Coding/언어-JAVA

JAVA : 상속, 캡슐화, 다형성, 추상화 #Day3

꿀딴지- 2023. 8. 2. 19:20

객체지향 4가지 핵심원리 : 상속, 캡슐화, 다형성, 추상화

 

상속(inheritance) : extends

: 코드의 중복을 제거(결합성 낮추기)

  • 상위(super)클래스/하위클래스라고 하며, 단일 상속(single inheritance)만을 허용
  • 포함관계(Composite) : 클래스 멤버로 다른 클래스 타입의 참조변수를 선언
    • 클래스 간의 관계가 ~은 ~이다(IS-A) 관계 → 상속
      ~은 ~을 가지고 있다(HAS-A) 관계 → 포함
  • 메서드 오버라이딩 : 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의
    (오버로딩 : 동일 메서드명의 다른 파라미터)
    • 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
  • super 상위 클래스의 객체, super()는 상위 클래스의 생성자를 호출하는 것
    • super() 메서드 또한 this()와 마찬가지로 생성자 안에서만 사용 가능하고, 반드시 첫 줄에 와야 함
    • 모든 생성자의 첫 줄에는 반드시 this() 또는 super()가 선언되어야 함
    • 만약 super()가 없는 경우에는 컴파일러가 생성자의 첫 줄에 자동으로 super()를 삽입 → 상위 클래스에 기본생성자가 없으면 에러가 발생, 따라서 클래스를 만들 때는 자동으로 기본 생성자를 생성하는 것을 습관화
  • Object 클래스(최상위 상위클래스)

 

캡슐화  : 접근제어자

: 정보 은닉(Data Hiding)

  1. 접근제어자(Access Modifier) : public, protected, default, private
    public(접근 제한 없음) > protected(동일 패키지 + 하위클래스) > default(동일 패키지) > private(동일 클래스)
    외부로부터 데이터를 보호하고, 불필요하게 데이터가 노출되는 것을 방지
  2. (기타제어자 : static, final, abstract, native, transient, synchronized 등) → 접근제어자는 1개만, 기타제어자는 여러개 사용가능 (클래스, 필드, 메서드, 생성자 앞)
  3. getter/setter 메서드

 

다형성(polymorphism)  : 참조타입(상속, 인터페이스)

: 하나의 객체가 여러가지 형태를 가질 수 있는 성질

  • 상위 클래스 타입의 참조 변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것 → 참조 변수가 사용할 수 있는 멤버의 개수는 상위 클래스의 멤버의 수 (적어진다!)
    • 서로 상속 관계에 있는 상위 클래스 - 하위 클래스 사이에만 타입 변환 가능

 

추상화(Abstraction) : abstract

: 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것

  • 추상화 클래스/메서드
    • 메서드의 시그니처만 있고 바디가 없는 클래스/메서드(객체 생성 불가)
    abstract 제어자 : 미완성
    • 상속 관계에 있어 새로운 클래스를 작성하는 데 매우 유용
    • 상위 클래스에서는 선언부만을 작성하고, 실제 구체적인 내용은 상속을 받는 하위 클래스에서 구현하도록 비워둔다면 설계하는 상황이 변하더라도 보다 유연하게 변화에 대응
abstract class AbstractExample { // 추상 메서드가 최소 하나 이상 포함돼있는 추상 클래스
	abstract void start(); // 메서드 바디가 없는 추상메서드
}
  • 인터페이스(Interface) : 추상메서드의 집합
    • 기본적으로 추상 메서드와 상수만을 멤버로 가질 수 있다는 점 → 추상 클래스에 비해 더 높은 추상성을 가짐