Java
추상화와 상속
거북이같은곰
2025. 7. 10. 18:09
추상화
중요한 것이나 특징점을 잡아 설명한 것
불필요한 것들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것
OOP의 추상화
- 객체의 관련 속성만 표시 : 데이터 추상화
- 불필요한 정보를 숨긴다 : 제어 추상화제어 추상화
- 메소드의 작동 방식과 같은 내부 로직을 숨긴다.
- 내부 동작을 몰라도 사용하고 싶은 메소드를 쓰면 된다.
- 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축데이터 추상화
- 대상을 간단한 개념으로 일반화
- 객체들의 공통점을 묶어 이름을 붙이는 것
상속
추상화된 개념들을 서로 연관 관계로 만드는 것
상위 클래스의 속성과 기능을 재사용하여 하위 클래스가 물려받는 것
- 중복 속성 제거
- 코드 재사용성 증대
추상 클래스
구체적이지 않은 추상적인 데이터를 담고 있는 클래스
추상클래스 안의 메서드를 미완성으로 남겨놓는 이유는 자식클래스에 따라 상속받는 메서드의 내용이 달라질 수 있기 때문이다
클래스 선언부의 abstract는 추상메서드가 있으니 상속을 통해 구현해주라는 지침
추상클래스의 생성자
추상클래스는 상속 구조에서 부모 클래스를 나타내는 역할만 한다.
추상클래스는 new 생성자를 통해 직접 인스턴스를 만들 수 없다
추상클래스의 생성자를 이용하려면 super()
를 이용해 생성자 호출이 가능하다
자식클래스의 기본생성자는 super()로 부모를 호출한다
추상클래스의 활용
공통 맴버 통합으로 중복 제거
자식 클래스를 업캐스팅 해서 다형성을 이용할 때 사용
인터페이스는 공통된 맴버는 자동 public static final
공통 상수로 처리해버린다.
구현의 강제성을 통한 기능 보장
스펙이 추가되었을 때 반드시 추가 기능을 구현해야 한다.
인터페이스
추상 메서드의 집합
- 주어지는 메서드를 간편하게 이용
- 스펙을 지정하여 소프트웨어 확장에 유리
인터페이스의 이점
- 상속 및 추상메서드 강제 구현
- 다양한 프레임워크에서 클래스끼리 통신하는데 사용
- OOP 프로그래밍의 전략에서 결합도를 낮춰 유지보수성을 늘린다.인터페이스 문법추상 클래스와 비슷하다.
- 필드를 선언할 수 있지만 상수(final)로만 정의할 수 있다.
public static final
public abstract
는 생략할 수 있다.- 인터페이스 정의된 모든 맴버에 자동 적용되기 때문
- 다중 상속이 가능하다
- 자식 클래스에서 메소드를 오버라이딩 할때 반드시 public을 붙여줘야 한다.
- 오버라이딩 할때는 부모의 메서드보다 더 넓은 접근제어자를 지정해야 하는 규칙
- 인터페이스를 일부만 구현하는 경우 abstract 클래스로 만들어야한다.
- 자바8 이후 인터페이스에도 디폴트 메서드, 스태틱 메소드를 통해 구현 메소드를 정의할 수 있다.
인터페이스 다형성
- 객체는 클래스가 아닌 인터페이스로 참조하라
인터페이스 타입으로 변수를 선언하게 되면 사용자는 뒤에 오는 객체는 인터페이스를 구현한 객체이면 된다.