본문 바로가기
Programming Languages/Java

Chapter 11. 클래스

by 더 이프 2023. 1. 11.
728x90

목차

    1. 클래스

    ■ 클래스란?

    • 클래스는 참조 자료형으로 자료형을 만드는 개념
    • 클래스를 통해 구현할 수 있는 모든 대상을 객체라고 함
    • 객체가 실제로 구현된 것을 클래스의 인스턴스라고 표현함
      • 메모리를 할당 받은 객체를 인스턴스라고 함
      • 예를 들면 클래스는 붕어빵 틀, 객체는 붕어빵, 인스턴스는 만든 붕어빵
    • 클래스는 데이터 + 기능으로 구성>
      • 데이터는 변수이며 명사로 표기
      • 기능은 메소드이며 동사로 표기
    • 변수와 메소드는 멤버(동적)와 static(정적)으로 나뉨
    • 객체 지향 프로그래밍 언어

     

    2. 객체 지향 프로그래밍

    ■ 객체 지향 프로그래밍이란?

    • 객체 지향 프로그래밍(Object-Oriented Programming)은 객체들 간의 상호작용을 통해 프로그램을 만드는 컴퓨터 프로그래밍의 패러다임 중 하나
    • 절차 지향 언어의 반대가 객체 지향 언어가 아니며 객체 지향 언어도 절차 지향 언어에 포함

    ■ 특징

    • 상속은 의미 그대로 상위 클래스의 모든 것을 상속받아 사용하는 것(데이터의 관계성)
    • 캡슐화는 데이터와 기능을 외부 접근에 대해 차단하고 권한 또는 절차 없이 데이터를 변경 또는 기능 수행을 할 수 없게 캡슐처럼 보호함(데이터의 은닉성)
    • 추상화는 추상적인 요소들(공통적인 요소)을 묶어서 분류하는 것(데이터의 구조화)
    • 다형성은 객체의 기능이 다양한 형태를 가질 수 있으며 상속과 깊은 관계를 가짐

    ■ 장점

    • 상속을 통해 코드의 재사용을 높일 수 있음
    • 클래스 단위의 부품들을 조립하기 때문에 생산성이 향상됨
    • 구조화 된 소스코드를 클래스 단위로 관리할 수 있으므로 유지보수가 우수함

    ■ 단점

    • 객체를 세분화하여 설계하여야함
    • 실행 속도가 절차지향 언어 대비해서 느림
    • 상속으로 인하여 관계가 많이 형성되면 코딩의 난이도가 높아짐

     

    3. 예시

    ■ J09_Student

    package j09_클래스;
    
    public class J09_Student {
    
    	String name = "김";
    	int age = 100;
    
    	// 기본생성자
    	J09_Student() {
    		// 기본적으로 생략되어 있음
    		// 반환 자료형을 우리가 정의할 필요없이 주소값을 리턴하는 자료형
    		System.out.println("생성됨!!!");
    	}
    
    	void printInfo() {
    		System.out.println("이름 : " + name);
    		System.out.println("나이 : " + age);
    	}
    }

    ■ J09_StudentMain

    package j09_클래스;
    
    public class J09_StudentMain {
    
    	public static void main(String[] args) {
    
    		// J09_Student 클래스를 객체라고 표현, new J09_Student()를 생성하는 생성자를 통해 주소값을 입력하면 인스턴스라고 표현
    		J09_Student s1 = new J09_Student(); 
    		J09_Student s2 = new J09_Student();
    
    		System.out.println();
    
    		s1.name = "김준일";
    		s1.age = 30;
    
    		s1.printInfo();
    		s2.printInfo();
    
    		J09_Student student1 = new J09_Student(); // 생성자는 클래스명과 일치
    		J09_Student student2 = new J09_Student();
            
    		System.out.println(student1);
    		System.out.println(student2);
    	}
    }

    ■ J09_User

    package j09_클래스;
    
    public class J09_User {
    
    	String username;
    	String password;
    	String name;
    	String email;
    
    	public void printUserInfo() {
    
    		System.out.println("아이디 : " + username);
    		System.out.println("비밀번호 : " + password);
    		System.out.println("이름 : " + name);
    		System.out.println("이메일 : " + email);
    		System.out.println();
    	}
    
    }

    ■ J09_UserMain

    package j09_클래스;
    
    public class J09_UserMain {
    
    	public static void main(String[] args) {
    
    		J09_User user = new J09_User();
    		J09_User user1 = new J09_User();
    
    		user.username = "aaa";
    		user.password = "1234";
    		user.name = "김종환";
    		user.email = "aaa@gmail.com";
    
    		user1.username = "bbb";
    		user1.password = "1234";
    		user1.name = "이종현";
    		user1.email = "bbb@gmail.com";
    
    		user.printUserInfo();
    		user1.printUserInfo();
    	}
    
    }