Kitworks Study 6
상속과 구현
Kitworks Study 6
Extends and Implements
이들의 차이는 무엇인가?
Kitworks Study 6
class and Interface
Extends and Implements
이들의 차이는 무엇인가?
Interface
Implements
Extends
뭔가 차이가 있는거 같기는 한데…
Class
Interface
Implements
Extends
모든 개발 단어들이 영어라서 불편합니다
Class
Interface
Implements
Extends
단어가 가진 개념과 뉘앙스를 직관적으로 이해하기 어렵거든요
Class
Interface
Implements
Extends
그래서 준비했습니다 - 이게 도대체 무슨 의미일까?
Class
그래서 준비했습니다 - 이게 도대체 무슨 의미일까?
상호작용
상속
구현
분류
Kitworks Study 6
상속과 구현
(자바의)
추상의 반어는 무엇일까요?
생각해 보신 적 있나요?
Class and Interface
정답은 구체 입니다
Class and Interface
정답은 구체 입니다
추상적 <-> 구체적
Class and Interface
정답은 구체 입니다
추상적 <-> 구체적
추상화 <-> 구체화
Class and Interface
사실 이전에도 추상화에 대해서
몇번 이야기를 했었죠
Class and Interface
사실 이전에도 추상화에 대해서
몇번 이야기를 했었죠
근데 썩 좋은 설명은 아니었던것 같아요
Class and Interface
사실 추상이라는 것은 도구입니다
Class and Interface
사실 추상이라는 것은 도구입니다
- 사물을 분류하기 위한 도구 -
Class and Interface
분류하다 : classify
분류 : classi
fi
cation
Class : 類(류)
Class and Interface
몇가지 예를 들어 볼까요?
Class and Interface
몇가지 예를 들어 볼까요?
Class and Interface
둘다 ‘개’ 입니다
Class and Interface
솔직히 얘가 더 비슷하지 않나요?
Class and Interface
사물을 ‘분류’ 하기 위해서는
차이보다 먼저 공통점을 보아야 합니다
Class and Interface
발톱을 숨기지 못하는 앞발,
비교적 짧은 송곳니,
발달한 후각,
멍멍하고 짖는 소리 등등…
Class and Interface
무엇보다…
Class and Interface
무엇보다…
교배가능!
Class and Interface
개와 고양이의 공통점도 많습니다
Class and Interface
개와 고양이의 공통점도 많습니다
다리가 네개, 비슷한 덩치, 5개 앞발가락 4개 뒷발가락 등등…
Class and Interface
개와 고양이의 공통점도 많습니다
다리가 네개, 비슷한 덩치, 5개 앞발가락 4개 뒷발가락 등등…
개와 고양이 모두 동물, 포유류, 식육목이라는 공통 분류를 가지니까요
Class and Interface
종류를 원하는 수준으로 분류하기 위해서는
구분에 불필요한 속성을 ‘무시’ 해야 합니다
Class and Interface
종류를 원하는 수준으로 분류하기 위해서는
구분에 불필요한 속성을 ‘무시’ 해야 합니다
바로 이 과정이 추상화죠
불필요한 속성을 무시하거나 배제하는 것
Class and Interface
계층도가 아니라 분류도가 되어야 한다고 했었죠?
Class는 원래 분류의 의미를 갖습니다
Class and Interface
추출된 공통속성 :
체내수정, 수유
항온동물
추상화에서 무시되는 속성 : 거의 모든 나머지 속성들…
Class and Interface
고래로 구체화 :
앞발이 지느러미로 진화했다
바다에서 산다 등등…
박쥐로 구체화 :
피막날개가 있다
동굴에서 산다 등등…
Class and Interface
Parent Class 와 Child Class 의 관계는
Class and Interface
Parent Class 와 Child Class 의 관계는
Child Class 들의 공통점을 추상화하여
그 속성을 추출한 것이 Parent Class
Class and Interface
공통점을 추출해 한 종류로 분류했다는 것은…
Class and Interface
공통점을 추출해 한 종류로 분류했다는 것은…
그 공통점이 없다면 그 종류가 아니라는 뜻!
Class and Interface
Class and Interface
포유류 -> 젖먹이 동물
포유류 -> 항온동물
(대우명제)
!젖먹이 동물 -> !포유류
!항온동물 -> !포유류
Class and Interface
Parent Class 를 Child Class가 상속했다
=
Parent Class 의 모든 속성들을,
Child Class가 가지고 있어야만 한다
Class and Interface
Parent Class 를 Child Class가 상속했다
=
Child Class -> Parent Class의 모든 속성들을 가지고 있다
Class and Interface
Parent Class 를 Child Class가 상속했다
(대우명제)
Parent Class의 어떤 속성을 가지지 않는다 -> Child Class가 아니다
논리학 시간 아님 주의
Class and Interface
Parent Class 를 Child Class가 상속했다
=
Parent Class 의 모든 멤버변수와 메서드들을
Child Class가 가지고 있는 것으로 간주한다
예외는 없음
Class and Interface
여기에서 클래스 상속의 특징을 볼 수 있습니다
멤버변수, 메서드를 포함하여 Parent Class의 모든 요소를 Child Class에 강요
Override 하지 않는다는 전제하에 Parent Class의 메서드가
Child Class에서 완벽하게 동일한 방식으로 동작할 것임을 보장할 수 있음
설령 Overide 할지라도 메서드가 없는건 아니기 때문에 호출할때 에러가 나지 않습니다
Class and Interface
여기에서 클래스 상속의 특징을 볼 수 있습니다
종류란 일종의 갈래이기 때문에, Class의 상속인 extends는 반드시 1개일 수밖에 없습니다
만약 어떤 Child Class가 2개 이상의 Parent Class를 상속받아야 하는 상황이 온다면,
이는 처음부터 Super Class의 정의나 범위를 잘못 설정하였거나,
Super Class들 사이 차상위의 Super를 다시 정의할 수 있음을 암시하는 것으로 봐야합니다
Class and Interface
여기에서 클래스 상속의 특징을 볼 수 있습니다
마치 포유류가 어류일 수 없는 것처럼,
혹은 포유류와 어류의 상위에 척추동물이란 분류가 있는것처럼요
Class and Interface
그럼 Class의 extends는 언제 활용해야 할까요?
클래스 상속의 장점은 명확합니다.
Child Class에서 super 에 정의된 모든 변수들과
모든 메서드 들을 완벽하게 동일한 방식으로 사용할 수 있다는 것,
제네릭 클래스의 타입변수를 부모타입으로 선언했을 때 자식타입이 그 안에 들어갈 수 있다는 것
Class and Interface
그럼 Class의 extends는 언제 활용해야 할까요?
예를 들어 포유류는 항온동물이기때문에 정상체온이 존재하죠?
이걸 포유류.get정상체온() 이라는 메서드로 값을 조회할 수 있다고 할 때,
Class and Interface
그럼 Class의 extends는 언제 활용해야 할까요?
List<포유류> 동물들 = new ArrayList<>()
동물들.add(new 고래(향유고래))
Int 체온 = 동물들.get(0).get정상체온()
처럼 되어도 아무런 문제가 없다는 겁니다
Class and Interface
그럼 Class의 extends는 언제 활용해야 할까요?
하지만 사용하기 쉽지는 않습니다
Super Class의 멤버를 정할 때, 어떤 Child Class들이 상속하게 될지
충분히 고려해야 하므로 처음부터 관계를 세심하게 설계를 해야 합니다
아니면 정말 Super 한 Super가 되거나 난잡한 코드가 만들어질 수 있습니다
Class and Interface
Interface는 보통 두가지 뜻으로 해석됩니다
: 상호작용
: 대접점
Class and Interface
보통 프로그래밍에서 말하는 Interface는
: 상호작용
: 대접점의 의미가 강합니다
Class and Interface
대접점으로서의 Interface의 의미
대접점으로서의 인터페이스의 개념은,
이전에 설명했듯, 서로 다른 시스템 사이에 소통을 위해 반드
시 가지고 있어야 하는 요소에 대한 정의를 가리킵니다
Class and Interface
대접점으로서의 Interface의 의미
대접점으로서의 인터페이스의 개념은,
이전에 설명했듯, 서로 다른 시스템 사이에 소통을 위해 반드
시 가지고 있어야 하는 요소에 대한 정의를 가리킵니다
Class and Interface
대접점으로서의 Interface의 의미
대접점으로서의 인터페이스의 개념은,
이전에 설명했듯, 서로 다른 시스템 사이에 소통을 위해 반드
시 가지고 있어야 하는 요소에 대한 정의를 가리킵니다
Class and Interface
대접점으로서의 Interface의 의미
RTX 4090 그래픽카드와 모니터를 연결한다고 했을 때,
이 모니터는 반드시 HDMI 인터페이스나 DP 인터페이스를
구현하고 있어야 합니다
그렇지 않다면 아예 연결이 불가능하죠
Class and Interface
대접점으로서의 Interface의 의미
즉 Interface를 구현한다는 것은,
특정한 양식이나 동작을 반드시 가지도록
강제한다는 의미가 됩니다
Class and Interface
여기에서 인터페이스 구현의 특징을 볼 수 있습니다
벌써 인터페이스 상속이 클래스 상속과 대별되는 차이점 하나가 드러납니다
인터페이스는 동작, 즉 메서드 상속이 주를 이루며, 멤버변수 상속은 불가능합니다
다만 멤버상수를 가질수는 있죠
메서드도 INPUT과 OUTPUT이 있을 뿐, 내용은 상속받는 객체에서 구현해야 합니다
Class and Interface
예를 들어 새와 박쥐가 있다고 해 봅시다
새는 조류고 박쥐는 포유류입니다
하지만 둘다 날 수 있죠
Class and Interface
예를 들어 새와 박쥐가 있다고 해 봅시다
새는 조류고 박쥐는 포유류입니다
하지만 둘다 날 수 있죠
하늘을 날기 위한 인터페이스 ‘비행’을 구현한다고 할 때,
이 인터페이스는 비행을 위한 메서드 ‘파닥파닥( )’을 강제합니다
Class and Interface
예를 들어 새와 박쥐가 있다고 해 봅시다
하지만 인터페이스의 관점에서 각 구현체들이
어떻게 파닥거릴수 있느냐는 큰 문제가 아닙니다
일단 조건에 맞게 파닥거릴수만 있다면, 날수는 있기 때문이죠
Class and Interface
예를 들어 새와 박쥐가 있다고 해 봅시다
새는 날개로 파닥거리고, 박쥐는 피막으로 파닥거리지만
인터페이스는 결론적으로 상속받는 객체들에게
날기위해서는 최소한 파닥은 거려야 한다는 점만 전달합니다
Class and Interface
예를 들어 새와 박쥐가 있다고 해 봅시다
여기에 추가로 ‘비행’이라는 인터페이스가
이륙( )과 착륙( )도 정의해야 한다고 강제한다면
이 비행기능을 구현하려는 구현체들은 모두
자기들만의 이륙( )과 착륙( ) 방법을 구현해야 합니다
Class and Interface
예를 들어 새와 박쥐가 있다고 해 봅시다
그럴 수 없다면 그것은 비행할 수 있는게 아니란 뜻이니까요
Class and Interface
여기에 또 다른 인터페이스 구현의 특징이 있습니다
또 인터페이스는 클래스의 상속관계는 무관하게,
어디에든 해당 동작을 할수 있는 곳, 또는 해야만 하는 곳에,
‘해당 동작을 할수있다’를 만족하기 위한 최소의 정의사항을 전달합니다.
이 정의사항만 충실히 구현한다면, 그 객체는 그 동작을 할 수 있다고 봐도 무방하죠
Class and Interface
여기에 또 다른 인터페이스 구현의 특징이 있습니다
꿀벌은 박쥐같은 포유류도, 새같은 조류도 아니지만
역시 ‘비행’ 인터페이스에서 정의한 대로
파닥파닥( ) 을 정의할 수 있고
그렇기 때문에 꿀벌이란 객체는 날 수 있다는 보장을 받게 됩니다
Class and Interface
인터페이스의 구현에는 어떤 특징이 있을까요?
인터페이스는 클래스의 상속관계와 무관하게,
해당 기능이 필요한 곳이라면 어디든, 간단하게 모듈처럼 넣을 수 있습니다
심지어 갈매기에게 ‘비행’도 구현할 수 있지만,
‘보행’과 ‘수영’도 구현할 수 있는 것 처럼 다중 구현 역시 가능합니다
Class and Interface
인터페이스의 구현에는 어떤 특징이 있을까요?
다만 일종의 속성값으로서의 멤버 변수를 전달할 수 없다는 점,
인터페이스는 멤버로서 구현해야 메서드와 상수만을 전달할 수 있습니다
또 메서드의 실질적인 구현 책임은
해당 인터페이스를 구현하는 클래스에게 있습니다
Class and Interface
인터페이스의 구현에는 어떤 특징이 있을까요?
또한 인터페이스를 작성한다고 할 때,
반드시 해당 동작을 위한 최소한의 메서드만을 추출해야 합니다
그렇지 않다면 구현하는 객체에 따라 불필요한 오버라이딩이 생기겠지요
Class and Interface
인터페이스는 어디에 사용해야 좋을까요?
농담처럼 들리겠지만, 사실 인터페이스는
인터페이스를 구현하기에 가장 적합한 형태로 설계되었습니다
서로 상이한 시스템이 데이터를 주고받기 위한
최소한의 규약을 정의하기 좋은 형태로 만들어졌죠
Class and Interface
인터페이스는 어디에 사용해야 좋을까요?
이를테면 인터페이스에 필요한 API-KEY 등을 가지고 있기 위한
상수를 멤버변수로 가질 수 있는 등의 구조가 그렇습니다
굳이 메서드 오버라이드만 강제해야 하는 것이라면
멤버상수를 상속시키는 기능은 굳이 필요하지 않았겠죠
Class and Interface
인터페이스는 어디에 사용해야 좋을까요?
또한 필요한 곳이면 어디든 구현시킬 수 있다는
인터페이스의 장점을 활용한 사용법도 있습니다
아마 자바 개발자라면 남들이 만들어 놓은 코드에
~Impl.java 라는 클래스를 본 적이 있겠죠?
Class and Interface
인터페이스는 어디에 사용해야 좋을까요?
이는 인터페이스를 활용하여 구현체 클래스를 만들고
자바의 의존성주입을 활용하여 모듈처럼 활용하는 방법입니다
각 모듈들은 독립된 구현체이지만 명세를 공유하기 때문에
그 세부적인 내부 로직에 차이가 있더라도,
교환 내지는 대체가 용이한 구조로 만들어지게 됩니다
Class and Interface
인터페이스는 어디에 사용해야 좋을까요?
개발환경에서는 이 DB, 저 로직을 쓰고,
운영환경에서는 저 DB, 이 로직을 쓰는 것은 대개
같은 인터페이스를 구현했기 때문입니다
Class and Interface
사실 상속과 구현은, 설계없이 사용하기는 어렵습니다
클래스와 인터페이스,
상속과 구현을 받는 대상 객체들이 어떤 확장성을 가지고
어떤 역할을 하게 될지에 대한 진지한 고민이 필요합니다
Class and Interface
상속과 구현의 간단정리
클래스의 상속은 분류의 관점으로 보아야 합니다
(자바에서) 상속은 한개만 가능합니다
클래스와 Super의 관계는 속성의 추상화, 구체화의 관계입니다
인터페이스의 구현은 동작을 위한 최소기능의 관점으로 보아야 합니다
구현은 다중구현이 가능합니다
구현체와 인터페이스의 관계는 동작의 추상화, 구체화의 관계입니다
Class and Interface
끝!

상속과 구현

  • 1.
  • 2.
    Kitworks Study 6 Extendsand Implements 이들의 차이는 무엇인가?
  • 3.
    Kitworks Study 6 classand Interface Extends and Implements 이들의 차이는 무엇인가?
  • 4.
  • 5.
  • 6.
    Interface Implements Extends 단어가 가진 개념과뉘앙스를 직관적으로 이해하기 어렵거든요 Class
  • 7.
    Interface Implements Extends 그래서 준비했습니다 -이게 도대체 무슨 의미일까? Class
  • 8.
    그래서 준비했습니다 -이게 도대체 무슨 의미일까? 상호작용 상속 구현 분류
  • 9.
    Kitworks Study 6 상속과구현 (자바의)
  • 10.
    추상의 반어는 무엇일까요? 생각해보신 적 있나요? Class and Interface
  • 11.
  • 12.
    정답은 구체 입니다 추상적<-> 구체적 Class and Interface
  • 13.
    정답은 구체 입니다 추상적<-> 구체적 추상화 <-> 구체화 Class and Interface
  • 14.
    사실 이전에도 추상화에대해서 몇번 이야기를 했었죠 Class and Interface
  • 15.
    사실 이전에도 추상화에대해서 몇번 이야기를 했었죠 근데 썩 좋은 설명은 아니었던것 같아요 Class and Interface
  • 16.
    사실 추상이라는 것은도구입니다 Class and Interface
  • 17.
    사실 추상이라는 것은도구입니다 - 사물을 분류하기 위한 도구 - Class and Interface
  • 18.
    분류하다 : classify 분류: classi fi cation Class : 類(류) Class and Interface
  • 19.
    몇가지 예를 들어볼까요? Class and Interface
  • 20.
    몇가지 예를 들어볼까요? Class and Interface
  • 21.
  • 22.
    솔직히 얘가 더비슷하지 않나요? Class and Interface
  • 23.
    사물을 ‘분류’ 하기위해서는 차이보다 먼저 공통점을 보아야 합니다 Class and Interface
  • 24.
    발톱을 숨기지 못하는앞발, 비교적 짧은 송곳니, 발달한 후각, 멍멍하고 짖는 소리 등등… Class and Interface
  • 25.
  • 26.
  • 27.
    개와 고양이의 공통점도많습니다 Class and Interface
  • 28.
    개와 고양이의 공통점도많습니다 다리가 네개, 비슷한 덩치, 5개 앞발가락 4개 뒷발가락 등등… Class and Interface
  • 29.
    개와 고양이의 공통점도많습니다 다리가 네개, 비슷한 덩치, 5개 앞발가락 4개 뒷발가락 등등… 개와 고양이 모두 동물, 포유류, 식육목이라는 공통 분류를 가지니까요 Class and Interface
  • 30.
    종류를 원하는 수준으로분류하기 위해서는 구분에 불필요한 속성을 ‘무시’ 해야 합니다 Class and Interface
  • 31.
    종류를 원하는 수준으로분류하기 위해서는 구분에 불필요한 속성을 ‘무시’ 해야 합니다 바로 이 과정이 추상화죠 불필요한 속성을 무시하거나 배제하는 것 Class and Interface
  • 32.
    계층도가 아니라 분류도가되어야 한다고 했었죠? Class는 원래 분류의 의미를 갖습니다 Class and Interface
  • 33.
    추출된 공통속성 : 체내수정,수유 항온동물 추상화에서 무시되는 속성 : 거의 모든 나머지 속성들… Class and Interface
  • 34.
    고래로 구체화 : 앞발이지느러미로 진화했다 바다에서 산다 등등… 박쥐로 구체화 : 피막날개가 있다 동굴에서 산다 등등… Class and Interface
  • 35.
    Parent Class 와Child Class 의 관계는 Class and Interface
  • 36.
    Parent Class 와Child Class 의 관계는 Child Class 들의 공통점을 추상화하여 그 속성을 추출한 것이 Parent Class Class and Interface
  • 37.
    공통점을 추출해 한종류로 분류했다는 것은… Class and Interface
  • 38.
    공통점을 추출해 한종류로 분류했다는 것은… 그 공통점이 없다면 그 종류가 아니라는 뜻! Class and Interface
  • 39.
    Class and Interface 포유류-> 젖먹이 동물 포유류 -> 항온동물 (대우명제) !젖먹이 동물 -> !포유류 !항온동물 -> !포유류
  • 40.
    Class and Interface ParentClass 를 Child Class가 상속했다 = Parent Class 의 모든 속성들을, Child Class가 가지고 있어야만 한다
  • 41.
    Class and Interface ParentClass 를 Child Class가 상속했다 = Child Class -> Parent Class의 모든 속성들을 가지고 있다
  • 42.
    Class and Interface ParentClass 를 Child Class가 상속했다 (대우명제) Parent Class의 어떤 속성을 가지지 않는다 -> Child Class가 아니다 논리학 시간 아님 주의
  • 43.
    Class and Interface ParentClass 를 Child Class가 상속했다 = Parent Class 의 모든 멤버변수와 메서드들을 Child Class가 가지고 있는 것으로 간주한다 예외는 없음
  • 44.
    Class and Interface 여기에서클래스 상속의 특징을 볼 수 있습니다 멤버변수, 메서드를 포함하여 Parent Class의 모든 요소를 Child Class에 강요 Override 하지 않는다는 전제하에 Parent Class의 메서드가 Child Class에서 완벽하게 동일한 방식으로 동작할 것임을 보장할 수 있음 설령 Overide 할지라도 메서드가 없는건 아니기 때문에 호출할때 에러가 나지 않습니다
  • 45.
    Class and Interface 여기에서클래스 상속의 특징을 볼 수 있습니다 종류란 일종의 갈래이기 때문에, Class의 상속인 extends는 반드시 1개일 수밖에 없습니다 만약 어떤 Child Class가 2개 이상의 Parent Class를 상속받아야 하는 상황이 온다면, 이는 처음부터 Super Class의 정의나 범위를 잘못 설정하였거나, Super Class들 사이 차상위의 Super를 다시 정의할 수 있음을 암시하는 것으로 봐야합니다
  • 46.
    Class and Interface 여기에서클래스 상속의 특징을 볼 수 있습니다 마치 포유류가 어류일 수 없는 것처럼, 혹은 포유류와 어류의 상위에 척추동물이란 분류가 있는것처럼요
  • 47.
    Class and Interface 그럼Class의 extends는 언제 활용해야 할까요? 클래스 상속의 장점은 명확합니다. Child Class에서 super 에 정의된 모든 변수들과 모든 메서드 들을 완벽하게 동일한 방식으로 사용할 수 있다는 것, 제네릭 클래스의 타입변수를 부모타입으로 선언했을 때 자식타입이 그 안에 들어갈 수 있다는 것
  • 48.
    Class and Interface 그럼Class의 extends는 언제 활용해야 할까요? 예를 들어 포유류는 항온동물이기때문에 정상체온이 존재하죠? 이걸 포유류.get정상체온() 이라는 메서드로 값을 조회할 수 있다고 할 때,
  • 49.
    Class and Interface 그럼Class의 extends는 언제 활용해야 할까요? List<포유류> 동물들 = new ArrayList<>() 동물들.add(new 고래(향유고래)) Int 체온 = 동물들.get(0).get정상체온() 처럼 되어도 아무런 문제가 없다는 겁니다
  • 50.
    Class and Interface 그럼Class의 extends는 언제 활용해야 할까요? 하지만 사용하기 쉽지는 않습니다 Super Class의 멤버를 정할 때, 어떤 Child Class들이 상속하게 될지 충분히 고려해야 하므로 처음부터 관계를 세심하게 설계를 해야 합니다 아니면 정말 Super 한 Super가 되거나 난잡한 코드가 만들어질 수 있습니다
  • 51.
    Class and Interface Interface는보통 두가지 뜻으로 해석됩니다 : 상호작용 : 대접점
  • 52.
    Class and Interface 보통프로그래밍에서 말하는 Interface는 : 상호작용 : 대접점의 의미가 강합니다
  • 53.
    Class and Interface 대접점으로서의Interface의 의미 대접점으로서의 인터페이스의 개념은, 이전에 설명했듯, 서로 다른 시스템 사이에 소통을 위해 반드 시 가지고 있어야 하는 요소에 대한 정의를 가리킵니다
  • 54.
    Class and Interface 대접점으로서의Interface의 의미 대접점으로서의 인터페이스의 개념은, 이전에 설명했듯, 서로 다른 시스템 사이에 소통을 위해 반드 시 가지고 있어야 하는 요소에 대한 정의를 가리킵니다
  • 55.
    Class and Interface 대접점으로서의Interface의 의미 대접점으로서의 인터페이스의 개념은, 이전에 설명했듯, 서로 다른 시스템 사이에 소통을 위해 반드 시 가지고 있어야 하는 요소에 대한 정의를 가리킵니다
  • 56.
    Class and Interface 대접점으로서의Interface의 의미 RTX 4090 그래픽카드와 모니터를 연결한다고 했을 때, 이 모니터는 반드시 HDMI 인터페이스나 DP 인터페이스를 구현하고 있어야 합니다 그렇지 않다면 아예 연결이 불가능하죠
  • 57.
    Class and Interface 대접점으로서의Interface의 의미 즉 Interface를 구현한다는 것은, 특정한 양식이나 동작을 반드시 가지도록 강제한다는 의미가 됩니다
  • 58.
    Class and Interface 여기에서인터페이스 구현의 특징을 볼 수 있습니다 벌써 인터페이스 상속이 클래스 상속과 대별되는 차이점 하나가 드러납니다 인터페이스는 동작, 즉 메서드 상속이 주를 이루며, 멤버변수 상속은 불가능합니다 다만 멤버상수를 가질수는 있죠 메서드도 INPUT과 OUTPUT이 있을 뿐, 내용은 상속받는 객체에서 구현해야 합니다
  • 59.
    Class and Interface 예를들어 새와 박쥐가 있다고 해 봅시다 새는 조류고 박쥐는 포유류입니다 하지만 둘다 날 수 있죠
  • 60.
    Class and Interface 예를들어 새와 박쥐가 있다고 해 봅시다 새는 조류고 박쥐는 포유류입니다 하지만 둘다 날 수 있죠 하늘을 날기 위한 인터페이스 ‘비행’을 구현한다고 할 때, 이 인터페이스는 비행을 위한 메서드 ‘파닥파닥( )’을 강제합니다
  • 61.
    Class and Interface 예를들어 새와 박쥐가 있다고 해 봅시다 하지만 인터페이스의 관점에서 각 구현체들이 어떻게 파닥거릴수 있느냐는 큰 문제가 아닙니다 일단 조건에 맞게 파닥거릴수만 있다면, 날수는 있기 때문이죠
  • 62.
    Class and Interface 예를들어 새와 박쥐가 있다고 해 봅시다 새는 날개로 파닥거리고, 박쥐는 피막으로 파닥거리지만 인터페이스는 결론적으로 상속받는 객체들에게 날기위해서는 최소한 파닥은 거려야 한다는 점만 전달합니다
  • 63.
    Class and Interface 예를들어 새와 박쥐가 있다고 해 봅시다 여기에 추가로 ‘비행’이라는 인터페이스가 이륙( )과 착륙( )도 정의해야 한다고 강제한다면 이 비행기능을 구현하려는 구현체들은 모두 자기들만의 이륙( )과 착륙( ) 방법을 구현해야 합니다
  • 64.
    Class and Interface 예를들어 새와 박쥐가 있다고 해 봅시다 그럴 수 없다면 그것은 비행할 수 있는게 아니란 뜻이니까요
  • 65.
    Class and Interface 여기에또 다른 인터페이스 구현의 특징이 있습니다 또 인터페이스는 클래스의 상속관계는 무관하게, 어디에든 해당 동작을 할수 있는 곳, 또는 해야만 하는 곳에, ‘해당 동작을 할수있다’를 만족하기 위한 최소의 정의사항을 전달합니다. 이 정의사항만 충실히 구현한다면, 그 객체는 그 동작을 할 수 있다고 봐도 무방하죠
  • 66.
    Class and Interface 여기에또 다른 인터페이스 구현의 특징이 있습니다 꿀벌은 박쥐같은 포유류도, 새같은 조류도 아니지만 역시 ‘비행’ 인터페이스에서 정의한 대로 파닥파닥( ) 을 정의할 수 있고 그렇기 때문에 꿀벌이란 객체는 날 수 있다는 보장을 받게 됩니다
  • 67.
    Class and Interface 인터페이스의구현에는 어떤 특징이 있을까요? 인터페이스는 클래스의 상속관계와 무관하게, 해당 기능이 필요한 곳이라면 어디든, 간단하게 모듈처럼 넣을 수 있습니다 심지어 갈매기에게 ‘비행’도 구현할 수 있지만, ‘보행’과 ‘수영’도 구현할 수 있는 것 처럼 다중 구현 역시 가능합니다
  • 68.
    Class and Interface 인터페이스의구현에는 어떤 특징이 있을까요? 다만 일종의 속성값으로서의 멤버 변수를 전달할 수 없다는 점, 인터페이스는 멤버로서 구현해야 메서드와 상수만을 전달할 수 있습니다 또 메서드의 실질적인 구현 책임은 해당 인터페이스를 구현하는 클래스에게 있습니다
  • 69.
    Class and Interface 인터페이스의구현에는 어떤 특징이 있을까요? 또한 인터페이스를 작성한다고 할 때, 반드시 해당 동작을 위한 최소한의 메서드만을 추출해야 합니다 그렇지 않다면 구현하는 객체에 따라 불필요한 오버라이딩이 생기겠지요
  • 70.
    Class and Interface 인터페이스는어디에 사용해야 좋을까요? 농담처럼 들리겠지만, 사실 인터페이스는 인터페이스를 구현하기에 가장 적합한 형태로 설계되었습니다 서로 상이한 시스템이 데이터를 주고받기 위한 최소한의 규약을 정의하기 좋은 형태로 만들어졌죠
  • 71.
    Class and Interface 인터페이스는어디에 사용해야 좋을까요? 이를테면 인터페이스에 필요한 API-KEY 등을 가지고 있기 위한 상수를 멤버변수로 가질 수 있는 등의 구조가 그렇습니다 굳이 메서드 오버라이드만 강제해야 하는 것이라면 멤버상수를 상속시키는 기능은 굳이 필요하지 않았겠죠
  • 72.
    Class and Interface 인터페이스는어디에 사용해야 좋을까요? 또한 필요한 곳이면 어디든 구현시킬 수 있다는 인터페이스의 장점을 활용한 사용법도 있습니다 아마 자바 개발자라면 남들이 만들어 놓은 코드에 ~Impl.java 라는 클래스를 본 적이 있겠죠?
  • 73.
    Class and Interface 인터페이스는어디에 사용해야 좋을까요? 이는 인터페이스를 활용하여 구현체 클래스를 만들고 자바의 의존성주입을 활용하여 모듈처럼 활용하는 방법입니다 각 모듈들은 독립된 구현체이지만 명세를 공유하기 때문에 그 세부적인 내부 로직에 차이가 있더라도, 교환 내지는 대체가 용이한 구조로 만들어지게 됩니다
  • 74.
    Class and Interface 인터페이스는어디에 사용해야 좋을까요? 개발환경에서는 이 DB, 저 로직을 쓰고, 운영환경에서는 저 DB, 이 로직을 쓰는 것은 대개 같은 인터페이스를 구현했기 때문입니다
  • 75.
    Class and Interface 사실상속과 구현은, 설계없이 사용하기는 어렵습니다 클래스와 인터페이스, 상속과 구현을 받는 대상 객체들이 어떤 확장성을 가지고 어떤 역할을 하게 될지에 대한 진지한 고민이 필요합니다
  • 76.
    Class and Interface 상속과구현의 간단정리 클래스의 상속은 분류의 관점으로 보아야 합니다 (자바에서) 상속은 한개만 가능합니다 클래스와 Super의 관계는 속성의 추상화, 구체화의 관계입니다 인터페이스의 구현은 동작을 위한 최소기능의 관점으로 보아야 합니다 구현은 다중구현이 가능합니다 구현체와 인터페이스의 관계는 동작의 추상화, 구체화의 관계입니다
  • 77.