객체지향 4가지 핵심원리 : 상속, 캡슐화, 다형성, 추상화
상속(inheritance) : extends
: 코드의 중복을 제거(결합성 낮추기)
- 상위(super)클래스/하위클래스라고 하며, 단일 상속(single inheritance)만을 허용
- 포함관계(Composite) : 클래스 멤버로 다른 클래스 타입의 참조변수를 선언
- 클래스 간의 관계가 ~은 ~이다(IS-A) 관계 → 상속
~은 ~을 가지고 있다(HAS-A) 관계 → 포함
- 클래스 간의 관계가 ~은 ~이다(IS-A) 관계 → 상속
- 메서드 오버라이딩 : 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의
(오버로딩 : 동일 메서드명의 다른 파라미터)
- 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
- super 상위 클래스의 객체, super()는 상위 클래스의 생성자를 호출하는 것
- super() 메서드 또한 this()와 마찬가지로 생성자 안에서만 사용 가능하고, 반드시 첫 줄에 와야 함
- 모든 생성자의 첫 줄에는 반드시 this() 또는 super()가 선언되어야 함
- 만약 super()가 없는 경우에는 컴파일러가 생성자의 첫 줄에 자동으로 super()를 삽입 → 상위 클래스에 기본생성자가 없으면 에러가 발생, 따라서 클래스를 만들 때는 자동으로 기본 생성자를 생성하는 것을 습관화
- Object 클래스(최상위 상위클래스)
캡슐화 : 접근제어자
: 정보 은닉(Data Hiding)
- 접근제어자(Access Modifier) : public, protected, default, private
public(접근 제한 없음) > protected(동일 패키지 + 하위클래스) > default(동일 패키지) > private(동일 클래스)
⇒ 외부로부터 데이터를 보호하고, 불필요하게 데이터가 노출되는 것을 방지 - (기타제어자 : static, final, abstract, native, transient, synchronized 등) → 접근제어자는 1개만, 기타제어자는 여러개 사용가능 (클래스, 필드, 메서드, 생성자 앞)
- getter/setter 메서드
다형성(polymorphism) : 참조타입(상속, 인터페이스)
: 하나의 객체가 여러가지 형태를 가질 수 있는 성질
- 상위 클래스 타입의 참조 변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것 → 참조 변수가 사용할 수 있는 멤버의 개수는 상위 클래스의 멤버의 수 (적어진다!)
- 서로 상속 관계에 있는 상위 클래스 - 하위 클래스 사이에만 타입 변환 가능
추상화(Abstraction) : abstract
: 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것
- 추상화 클래스/메서드
- 메서드의 시그니처만 있고 바디가 없는 클래스/메서드(객체 생성 불가)
- 상속 관계에 있어 새로운 클래스를 작성하는 데 매우 유용
- 상위 클래스에서는 선언부만을 작성하고, 실제 구체적인 내용은 상속을 받는 하위 클래스에서 구현하도록 비워둔다면 설계하는 상황이 변하더라도 보다 유연하게 변화에 대응
abstract class AbstractExample { // 추상 메서드가 최소 하나 이상 포함돼있는 추상 클래스
abstract void start(); // 메서드 바디가 없는 추상메서드
}
- 인터페이스(Interface) : 추상메서드의 집합
- 기본적으로 추상 메서드와 상수만을 멤버로 가질 수 있다는 점 → 추상 클래스에 비해 더 높은 추상성을 가짐
'Coding > 언어-JAVA' 카테고리의 다른 글
JAVA 인터페이스, 다형성 실습 #Day4 (0) | 2023.08.03 |
---|---|
JAVA 인터페이스 #Day4 (0) | 2023.08.03 |
JAVA 클래스, 객체 #Day2 (0) | 2023.08.01 |
JAVA 기초 : 변수(기본타입, 참조타입) #Day1 (0) | 2023.08.01 |
JAVA 환경구성 하기 (0) | 2023.08.01 |