Java

추상화와 상속

거북이같은곰 2025. 7. 10. 18:09

추상화


중요한 것이나 특징점을 잡아 설명한 것
불필요한 것들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것
OOP의 추상화

  • 객체의 관련 속성만 표시 : 데이터 추상화
  • 불필요한 정보를 숨긴다 : 제어 추상화제어 추상화
  • 메소드의 작동 방식과 같은 내부 로직을 숨긴다.
    • 내부 동작을 몰라도 사용하고 싶은 메소드를 쓰면 된다.
    • 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축데이터 추상화
  • 대상을 간단한 개념으로 일반화
    • 객체들의 공통점을 묶어 이름을 붙이는 것

상속


추상화된 개념들을 서로 연관 관계로 만드는 것
상위 클래스의 속성과 기능을 재사용하여 하위 클래스가 물려받는 것

  • 중복 속성 제거
  • 코드 재사용성 증대

추상 클래스


구체적이지 않은 추상적인 데이터를 담고 있는 클래스
추상클래스 안의 메서드를 미완성으로 남겨놓는 이유는 자식클래스에 따라 상속받는 메서드의 내용이 달라질 수 있기 때문이다
클래스 선언부의 abstract는 추상메서드가 있으니 상속을 통해 구현해주라는 지침

추상클래스의 생성자

추상클래스는 상속 구조에서 부모 클래스를 나타내는 역할만 한다.
추상클래스는 new 생성자를 통해 직접 인스턴스를 만들 수 없다
추상클래스의 생성자를 이용하려면 super()를 이용해 생성자 호출이 가능하다
자식클래스의 기본생성자는 super()로 부모를 호출한다

추상클래스의 활용

공통 맴버 통합으로 중복 제거
자식 클래스를 업캐스팅 해서 다형성을 이용할 때 사용
인터페이스는 공통된 맴버는 자동 public static final 공통 상수로 처리해버린다.
구현의 강제성을 통한 기능 보장
스펙이 추가되었을 때 반드시 추가 기능을 구현해야 한다.

인터페이스


추상 메서드의 집합

  • 주어지는 메서드를 간편하게 이용
  • 스펙을 지정하여 소프트웨어 확장에 유리

    인터페이스의 이점

  • 상속 및 추상메서드 강제 구현
  • 다양한 프레임워크에서 클래스끼리 통신하는데 사용
  • OOP 프로그래밍의 전략에서 결합도를 낮춰 유지보수성을 늘린다.인터페이스 문법추상 클래스와 비슷하다.
  • 필드를 선언할 수 있지만 상수(final)로만 정의할 수 있다.
  • public static final public abstract는 생략할 수 있다.
  • 인터페이스 정의된 모든 맴버에 자동 적용되기 때문
  • 다중 상속이 가능하다
  • 자식 클래스에서 메소드를 오버라이딩 할때 반드시 public을 붙여줘야 한다.
    • 오버라이딩 할때는 부모의 메서드보다 더 넓은 접근제어자를 지정해야 하는 규칙
  • 인터페이스를 일부만 구현하는 경우 abstract 클래스로 만들어야한다.
  • 자바8 이후 인터페이스에도 디폴트 메서드, 스태틱 메소드를 통해 구현 메소드를 정의할 수 있다.

    인터페이스 다형성

  • 객체는 클래스가 아닌 인터페이스로 참조하라
    인터페이스 타입으로 변수를 선언하게 되면 사용자는 뒤에 오는 객체는 인터페이스를 구현한 객체이면 된다.