본문 바로가기
Programming/Java

[F-Lab 모각코 챌린지 13일차] Java : 인터페이스와 추상클래스

by 구튼탁 2023. 6. 15.
728x90

학습 목표


  • 인터페이스나 abstract 클래스를 사용해야 하는 이유
  • 자바의 클래스는 다중 상속이 불가능한 이유와 인터페이스는 다중 구현이 가능한 이유

학습 결과 요약


  • 인터페이스나 abstract 을 사용하면 설계 단계에서 미리 클래스를 정의할 수 있다. 그리고 외부에 노출되는 것을 미리 정의 가능하다.
  • 인터페이스는 구현된 메서드를 갖을 수 없고 abstract 는 가능하다. 인터페이스에 default methoed 를 선언할 수는 있지만 추상클래스와는 목적이 다르다고 한다.

학습 내용


인터페이스를 사용하는 이유

  1. 설계
    • 설계 단계에서 기능이나 메서드, 변수 명을 미리 정의한다.
    • 개발할 때 기능 구현에만 집중 가능
    • 메서드 이름과 매개 변수 선언을 어느 정도 통일화 가능
    • 선언과 구현을 구분할 수 있음
  2. 외부에 노출되는 것을 정의
  • 자바에서 abstract 의미
  • 자바에서는 메서드가 구현되지 않은, 인터페이스에 있는 메서드 선언문들과 같이 몸통이 없이 선언한 것을 abstract 라는 용어로 표현한다.
  • 인터페이스의 자동 타입 변환인터페이스에 선언된 메서드를 호출하면 자식의 것이 호출된다.
  • 상속과 마찬가지로 인터페이스 타입의 참조 변수에 구현 객체의 참조값을 할당할 수 있으며,
    인터페이스에 선언된 메서드를 호출하면 자식의 것이 호출된다.
public class FeatureInterfaceImpl implements FeatureInterface {
    @Override
    public void doSomething() {

    }
}


FeatureInterface featureInterface = new FeatureInterfaceImpl();

 

 

abstract 클래스

  • 인터페이스는 아무것도 구현되어있지 않은 반면 abstract 클래스는 일부 완성되어 있는 클래스다.
  • abstract 클래스를 초기화 및 실행은 불가능하다. 구현 클래스로 가능하다.
  • abstract 메서드가 하나라도 있으면 abstract 클래스로 선언해야 한다.
    • 상속 받는 클래스에서 추상 메서드를 반드시 구현해야 컴파일에 성공하기 때문이다.
  • 인터페이스를 선언하다 보니, 어떤 메서드는 미리 만들어 놓아도 전혀 문제가 없는 경우가 발생한다.
    • 자바 버전이 오르면서 인터페이스에도 default 메서드라는 구현된 메서드를 선언할 수 있게 되었다.
    • → 그럼 default method 가 있는 인터페이스 vs 추상 클래스 공부하기

 

 

final 사용시 주의사항

  • final 변수로 선언하면 최종 값이란 의미로 생성과 동시에 초기화하고 그 이후에 값을 변경할 수 없다.
    참조 변수가 참조하는 객체의 내용은 바뀔 수 있다.
  • final 변수의 타입이 참조형일 경우 주의 사항은 참조변수에 대해 재할당을 못할 뿐이지

  • 이처럼 참조형 변수를 final 선언했다고 해서 객체의 내용까지 값이 안바뀜을 보장할 수 없다.
  • 참조 변수가 final 이라 해서 객체 안의 인스턴스 변수나 클래스 변수는 final은 아니라는 것을 항시 기억하자.

 

 

상수의 집합, enum 클래스

  • final 로 기본 자료형의 값을 고정할 수 있다.
  • 이런 고정된 값을 상수라고 하며 영어로는 constant 라고 한다.
  • 클래스가 상수만으로 만들어져 있을 때 enum 을 선언하면 이 객체는 상수의 집합이다 라는 것을 명시적으로 나타낸다.
  • 생성자를 만들 수 있지만, 생성자를 통해 객체를 생성할 수는 없다.
  • enum 상수에 값을 지정하는 것은 가능하나, 값을 동적으로 할당하는 것은 불가능하다.
  • 생성자 접근 제어는 private, package-private 만 가능하다.
728x90

댓글