객체 지향
캡슐화 (Encapsulation)
클래스로 객체 캡슐화
외부에서 객체 내부에 접근하지 못하도록 하여 객체 내부의 구조를 알지 못함
- 클래스
- 접근 제어자
- public : 어떠한 클래스에서도 접근 가능
- protected: 동일 패키지 내의 클래스나 동일 패키지가 아니더라도 해당 클래스를 상속 받은 클래스에서 접근 가능
- default: 동일 패키지 내의 클래스에서 접근 가능, 접근 제어자를 별도로 설정하지 않으면 default
- private: 해당 클래스에서만 접근 가능
상속 (Inheritance)
class 자식 클래스(서브 클래스) extends 부모 클래스(슈퍼 클래스) {}
- 상위 개체의 속성이 하위 개체에 물려져서 하위 개체가 상위 개체의 속성을 모두 가지는 관계
- 자식 클래스(서브 클래스)가 부모 클래스(슈퍼 클래스)의 속성을 물려받고 기능을 추가하거나 재정의하여 확장 (extends)
- 서브 클래스의 변경이 슈퍼 클래스에 영향을 미치지 않음
- 슈퍼 클래스의 필드와 메소드를 물려받아 코드를 재사용함으로써, 코드 작성에 드는 시간과 비용 절약 가능
다형성 (Polymorphism)
- 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것
- 오버라이딩 (overriding)
- 부모 클래스(슈퍼 클래스)에 구현된 메소드를 자식 클래스(서브 클래스)에서 동일한 이름으로 다시 구현
- 오버 로딩 (overloading)
클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드
- 참조 변수
- 특정 타입의 참조 변수는 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스 멤버 개수와 같기 때문에 같은 타입의 인스턴스 참조 가능
- 부모 클래스 타입의 참조 변수는 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 적기 때문에 자식 클래스 타입의 인스턴스 참조 가능
- 자식 클래스 타입의 참조 변수는 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 많기 때문에 부모 클래스 타입의 인스턴스 참조 불가능
- 타입 변환
- 서로 상속 관계에 있는 클래스 사이에만 타입 변환 가능
- 자식 클래스 타입에서 부모 클래스 타입으로의 타입 변환은 생략 가능
- 부모 클래스 타입에서 자식 클래스 타입으로의 타입 변환은 생략 불가능
- instanceof
참조 변수 instanceof 클래스명
- 참조 변수가 실제 참조하고 있는 인스턴스의 타입이 오른쪽에 전달된 클래스 타입이면 true, 아니거나 null 이면 false 반환
클래스와 인스턴스
클래스
객체를 만들어 내기 위한 설계도 혹은 틀
인스턴스
클래스 모양 그대로 생성된 객체
- 클래스는 하나 이지만 수 많은 객체 생성 가능
- 인스턴스는 클래스의 동일한 속성을 가지고 생성되지만 자신만의 고유한 값을 가져서 구분됨