[Java] 상속과 다형성

bagt13·2022년 5월 12일
0

JAVA

목록 보기
3/7
post-thumbnail

📒 메서드 오버라이딩의 3가지 조건

  • 선언부가 일치해야한다

  • 접근 제어자가 상위클래스의 접근 제어자보다 보다 같거나 넓어야 한다

  • 예외는 상위 클래스보다 많이 선언할 수 없다


📒 super와 super()

super, super()는 기본적으로 this, this()와 동일한 기능을 수행한다.

super() 메서드 또한 this()와 마찬가지로 생성자 안에서만 사용가능하고, 반드시 첫 줄에 와야 한다.

  • 만약 super()가 없는 경우에는 컴파일러가 생성자의 첫 줄에 자동으로 super()를 추가해주지만, 상위클래스에 기본생성자가 없으면 에러가 발생한다.

따라서 클래스를 만들 때는 항상 기본 생성자를 생성하는 것이 좋다.


📒 캡슐화의 장점

  • 데이터 보호

  • 내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출을 방지

즉, 외부로부터 객체의 속성과 기능이 함부로 변경되지 못하게 막고, 데이터가 변경되더라도 다른 객체에 영향을 주지 않기에 독립성을 확보할 수 있기에 유지보수와 코드 확장도 쉬워진다.


📘 다형성

📒 다형성이란

한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다.


📒 다형성을 이용할 때 주의해야 할 점

  • 참조 변수가 사용할 수 있는 멤버의 개수는 실제 객체의 멤버 개수보다 같거나 적어야한다.

    따라서, 상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조할 수 있다. 반대의 경우는 불가능하다

  • 상속 관계에 있는 클래스 간에는 타입 변환이 가능한데, 하위 클래스를 상위 클래스 타입으로 변환할 때에는 타입 변환 연산자 생략이 가능하지만, 반대의 경우에는 생략이 불가능하다


📘 추상화

📒 추상 클래스와 메서드

추상 메서드 : 메서드의 구현부 없이 선언부만 완성된 메서드

추상 클래스 : 추상 메서드를 포함한 클래스

  • 추상 클래스는 메서드 바디가 완성이 되기 전까지 이를 기반으로 객체 생성이 불가능하다.

📒 인터페이스

인터페이스는 오직 추상 메서드와 상수만을 멤버로 가질 수 있고 다른 어떤 요소 포함될 수 없다.

  • 인터페이스는 내부의 모든 필드가 public static final로 정의되고, static과 default 메서드 이외의 모든 메서드가 public abstract로 정의되며, 일반적으로 생략 가능하다.

  • 추상 클래스와의 차이점

  1. 인터페이스는 상수와 추상 메서드만 가질 수 있기 때문에 추상 클래스와 다르게 멤버 변수를 가질 수 없다.

  2. 인터페이스는 다중 상속이 가능하고, 클래스와 인터페이스를 함께 상속받는 것도 가능하다.


📒 인터페이스의 핵심기능 ! !

다형성과 중복 제거 등 여러가지 장점이 있지만, 핵심은 클래스끼리 연결하는것이 아니라 특정 클래스를 인터페이스로 씌워 인터페이스를 참조하도록 하면,

인터페이스의 구현체가 변경되어도 인터페이스와 연결된 클래스들은 전혀 영향을 받지 않기 때문에 변경 또는 수정이 수월해진다.

=> 의존성 약화 + 느슨한 결합


➕ 추상화를 사용하는 이유

  • 중복을 제거해 코드를 간결하게 작성할 수 있고, 유지 보수에 용이하다.

  • 또한, 공통된 속성과 기능임에도 불구하고 각각 다른 변수와 메서드로 정의되는 경우를 미연에 방지할 수 있다.

profile
주니어 백엔드 개발자입니다😄

0개의 댓글