본문 바로가기

JAVA

자바의 신 13장

시스템을 만드는 절차

  •  분석 -> 설계 -> 개발 및 테스트 -> 시스템 릴리즈

 

인터페이스

  • 두 물체의 경계면
  • 가장 일반적인 것이 DAO 패턴
  • 함수 시그내처를 인터페이스라고 부르기도 함
  • 순수 추상 클래스 == 인터페이스

 

특징

  • 상태가 없음
  • 동작의 구현도 없음
  • 동작의 시그내처만 있음
  • 다중 상속 가능
  • Java 8 이후로 default, static 가능
    • 동작의 구현도 가능

 

목적

  • 공통적인 것을 구현하면, 선언과 구현을 구분할 수 있다.
  • 기능 구현에만 집중할 수 잇다.

 

Interface abstract class를 편하게 작성하기 위함

  •  Abstract를 작성할 필요가 없음
  • 메소드는 언제나 public

 

Implements 예약어

  • 상속받을 때 구현안하면 컴파일 오류

 

*메소드이름 바꿔서 새로운 메소드가 되는 문제가 실무에서 발생하는 경우가 있음

  • 이러한 실수를 막기 위해 인터페이스를 사용하면 컴파일 단계에서 검사되긴 함

 

추상 메소드는 protected를 붙일 수 있다.

Public interface , interface 둘 다 가능하다.

 

Interface도 상속처럼 부모 = 자식 형변환 가능

 

Abstract (추상 클래스)

  • abstract로 선언된 메소드가 하나라도 있어야 함
  • interface랑 달리 구현되어 있는 메소드가 있어도 상관없음
  • interface와 달리 final, static이 있어 됨.

 

Interface abstract를 어느 상황에 사용할까?

  • 상속에 추가로 인터페이스를 추가
  • 구현한 내용을 상속할 때(추상 클래스) 

추상클래스와 일반클래스의 차이

  •  추상 클래스는 메소드 구현을 강제하지만, 일반은 그렇지 않고 확장의 개념
  • 추상은 직접 객체 생성이 불가능하다.

 

final

  • 상속받아서 내용을 변경하면 안 되는 클래스를 선언할 때 final로 선언
  • 변수에 사용시 생성과 동시에 초기화 해야함. 단 지역변수는 생성만 해도 가능
  • 해당 클래스가 final이라고 해서 안에 있는 변수들이 final이 아니라 변경 가능

 

 

final의 동작 원리는?

  • 변수: 해당 변수의 재할당 확인
  • 메소드: 해당 메소드의 오버라이딩 확인
  • 클래스: 해당 클래스의 상속 확인

Enum

  • 상수의 집합
  • 생성자를 만들 수 있으나, package-private과 private만 가능
  • 내부적으로 static final
  • 부모는 java.lang.Enum 이어야 한다
  • values(): 모든 상수 배열을 리턴
  • 열거되어 있는 데이터나 상수를 처리할 때 용이

 


왜 클래스는 다중상속 안되는데 인터페이스는 되는가?

  • 인터페이스는 상태, 구현이 없으니까.
  • 메소드의 반환형이 다르면 컴파일 오류 남  함수 오버로딩 문제
  • 다중 상속에서 많이 쓰임

일반 클래스 상속으로도 할 수 있는데 굳이 추상 클래스 상속 하는 이유는?

  • 추상클래스는 추상 메서드를 통해 상속을 강제해야 할 때

인터페이스를 사용할 때, 추상 클래스를 사용해야 할 때는 언제인가?

  • 인터페이스: 구현 명세만 제공하고자 할 때 / 다형성, 유연성을 높일 수 있음
  • 추상클래스: 구현한 내용까지 상속할 때 / 코드 재사용성을 높일 수 있음

 

'JAVA' 카테고리의 다른 글

자바의 신 16장  (0) 2024.04.16
자바의 신 14장  (0) 2024.04.16
자바의 신 12장  (0) 2024.04.15
자바의 신 10장  (0) 2024.04.15
SOLID 원칙  (0) 2024.04.05