추상클래스 ( abstract class )

규칙
1. 미완성 설계도. 미완성(abstract)몸통없는 메서드를 가지고 있는 클래스
2. 인스턴스(객체) 생성 불가. 다른 클래스 작성에 도움을 주기 위한 것
3. 상속을 위한 추상 메서드를 완성해야 인스턴스(객체) 생성가능 
4. 추상메서드를 모두 구현(몸통만들기) 하지 않으면, abstract를 붙여줘야함.
   (추상메서드 일부만 구현시 여전히, 추상클래스)
5. 공통적으로 사용될수 있는 추상클래스를 바로 작성하거나,
 기존의 클래스의 공통부분을 뽑아서 추상클래스를만든다.

관리가용이해짐
클래스가 점점 구체적으로됨. ( 변경되어도 특정시점 자손을 변경하는게아니라, 새로운버전의자손을만들면됨 )

※ abstract = 제어자, 추상클래스도 생성자가 있어야한다.

 

Player p = new Player();    // 에러   ( 몸통이 없는 클래스(추상클래스) 라서 인스턴스(객체) 생성불가 )

 

AudioPlayer ap = new AudioPlayer ();   // 인스턴스(객체) 생성 ok .   완성된 설계도
Player ap = new AudioPlayer ();   // 다형성사용 ok.

 


추상클래스 vs 인터페이스 차이

 

추상클래스 ( abstract class )

인터페이스 (interface)

공통점 추상메서드를 가지고 있음 ( 미완성 설계도 )
차이점 인스턴스 변수를 가질수 있느냐 없느냐 
( 추상메서드 o    /     인터페이스 x )
코드예시 추상메서드 + 멤버변수(iv) + 생성자 등 이있음

인터페이스는 인스턴스 멤버(iv,im)을 가질 수 없다

 


인터페이스 (interface)

규칙

1. 추상메서 집함
2. 구성된것이 전혀 없는 설계도, 껍데기 ( 제일 밖에 노출되어있으니 모든멤버가 public)
3. 컴파일시 메서드는 public abstract 가 접두어로 생성 되므로,  일부 또는 전부 생략가능
4. 컴파일시  상수에는 public static final 이 접두어로 생성 되므로, 일부 또는 전부 생략가능
5. 인터페이스의 조상은 인터페이스만 가능 ( Object가 조상이 아님)
6. 다중상속가능 ( 추상메서드는 구현부가 없기 때문에, 충돌해도 문제없음 )
     ex) interface Fightable extends A, B { }
7.  인스턴스 멤버변수 사용불가 ( iv, cv 안됨 )

※ 부수적인것 ( static메서드, 상수, default 메서드 )


인터페이스의 구현 (implements)

규칙
1. 인터페이스에 정의된 추상메서드를 완성하는 것
2. 일부만 구현하는 경우, 클래스앞에 abstract를 붙여야함.

껍데기와 알맹이 분리, 추후 알맹이만 변경시 유연하게 가능함


인터페이스를 이용한 다형성

다형성이란?   조상 참조변수로 자손 객체를 다루는 것 [ Tv t = new SmartTv();

규칙

1. 인터페이스도 구현클래스의 부모? ( 처럼.... 가능)

 

그러므로 아래처럼 가능함


인터페이스를 리턴타입으로 지정할수 있다.

규칙
1. 메서드의 반환타입이 인터페이스이면, 그 인터페이스를 구현한 객체를 반환한다.


인터페이스의 장점

장점1

1. 두 대상(객체) 간의 ‘연결, 대화, 소통’을 돕는 ‘중간 역활’을 한다.
2. 선언(설계)와 구현을 분리시킬 수 있게 한다.

장점2
1. 개발시간을 단축할 수 있다.
        ( 강한결합은 A 클래스를 만들때까지 기다렸다가, B클래스를 이어서 만들어야한다,
       인터페이스를 사용한다면, 기다리지않고도 작업가능
        ① A클래스는 interface 를 기준으로 작성,
        ② B클래스 또한 interface 기준으로 구현)
2. 변경에 유리한 유연한 설계가 가능하다. 
        (interface를 사용함으로써 알맹이만 변경유연하게가능)
3. 표준화가 가능하다
        ( JavaApplication과 DB와 연결시 [JDBC interface집합] 중간역활함)
4. 서로 관계없는 클래스들의 관계를 맺어줄 수 있다.

 

강한결합

느슨한결합
(interface 사용)

구조
설명 A클래스가  → B클래스를 사용(의존) 
 만약 ,  B클래스를 C클래스로 변경하고 싶다면?,
A,B 모두 변경해줘야함.
인턴페이스를 사용한다면
A클래스는 →  interface와만 관계가 있음 ( → (구현) B클래스)
만약 ,  B클래스를 C클래스로 변경하고 싶다면?,
 B클래스에서 C로 유연한게 변경할수 있음
코드




 


서로관계없는 클래스 관계맺어주기


인터페이스 - 디폴트메서드와 static 메서드

규칙
1. 인터페이스 default메서드, static메서드 추가 가능 ( JDK 1.8 부터~ )
2. 인터페이스에 새로운(추상) 메서드를 추가하기 어려움

 

기존 문제 예 )
인터페이스에 새로운 (추상)메서드를 추가할경우, 기존에 구현하고있던 클래스까지 모두 추가구현해주어야 하는 상황발생

해결책 )
default 메서드 (몸통)허용으로 예외상황이 생김
인터페이스에서는 추상(껍데기) 메서드만 작성했었는데, 문제를 해결코자
default 메서드, 몸통이 있는 메서드를 작성해줄수 있게함. (기존이라면 원칙 위반!!)

그런데, default 메서드 (몸통)허용으로 충돌 문제 발생

해결방법 ) 

 

 

 

 

 

 

 

 

 

 

 

 


출처 : 남궁성의 정석코딩

https://www.youtube.com/@MasterNKS

70~96 (26)

+ Recent posts