자바에서 말하는 extends와 implements가 무엇인지? 가끔 헷갈리거나 모를 경우
그리고 무시를 하거나 아직도 모르는 경우가 있다. 나의 경우는 모두 해당되지 않나 하는 마음에 다시 한번 
기초 공부를 하게 되고, 주변 분들에서 조언을 들어서 배운 것들이다.

본론으로 넘가서, extends가 무엇인지 알아야 하는데, 보통 네이버가 다른곳으로 검색을 하면은
상속이라고 많이들 이야기 한다. 사실 맞지만 이 내용을 순수 영어사전으로 따져 보자면은 상속이 아닌, 넓히다, 늘리다. 확장하다
라는 뜻으로 나타난다....-_- 왜 이렇게 했을까...
사실 Java에서는 class test1 extends test라고 선언을 하면은 상속이라고 애길하지만, 어느 곳에서 이 내용을 왜 이걸 하는지
왜 부모의 받는지 그런걸 알고 아 그냥 확장한다고 생각만 할 뿐, 프로젝트 투입을 하면은 기억이 나지 않을 것이다.
하나의 키보드를 예를 들자

키보드를 만들기 위해서 입력, 자판, 구조 버튼 등...여러가지가 있다.
그런데 이 키보드를 하나를 만들었다고 가정을 하자 그런데, 지금 키보드가 한국에만 있는건 아닐것이다. 
해외인 미국식, 일본식,중국식...등 상당히 많을 것이다.
이것을 따로 따로 만든다고 생각 해보면은 상당히 많은 시간과, 그리고 유지 보수를 생각하면은
상당히 끔찍 할 것이다. 
이 부분은 조금더 좀더 생각을 하게 만들면은
현재 사용되는 키보드는 입력장치이기 때문에 입력라는 매소드를 하나 넣고, 그리고 기본언어는 영어로 작성을
할것이다. 왜냐 지금 현재 사용하는 키보드가 다 그러니깐...

class 표준 키보드{
 자판(){ 영어}
 입력 () {a ~ z; A ~Z 0 ~9}                                          

하나의 클래스를 만들었다. 영어만 입력이 가능한 클래스이다.
이것을 가지고 한글 키보드를 한번 만들어보자!

한국 키보드 extends 표준 키보드{  // 라고 선언을 하였다.
  kor자판(){한국}
  한국 입력 (){가~하; ㄱ ~ㅊ ...}                     
}
위 처럼 만들면은 매소드에 자판 입력을 하면은 영어가 나올것이며, kor자판 한국이 나올것이다.
상속은 사용을 하고 있는 클래스를 그대로 갖다 쓸수 있다. 그것을 통해서 한국 키보드 클래스에서 kor자판,한국 입력 
다른 클래스를 만들어서 일본어 키보드를 만들어 보자

일본 키보드 extends 표준키보드{
   jp자판(){ 일본어}
  일본어 입력(){a ~ ng....}
}

표준 키보드라는 클래스를 상속을 받아서 한글 일본어.. .등등 키보드 객체를 만들 수 가 있을 것이다.
위에 예제를 보면은 표준 키보드를 통해서 재사용이 가능하면서, 상속받은 클래스는 다른 클래스 인 객체로 만들수가 
있으며, 부모와 자식이라는 계층을 명확하게 확인이 가능하다. 하지만 상속을 많아질 수록 코드는 상당히 어려워지면서
명확한 구분을 짓기가 어렵다는 단점이 있다.


interface
네이버나 다른곳으로 가면은 항상 검색을 하면은 빈 껍데기...또는 구현을 해서 사용을 해야한다는 쉽게 볼 수가 있을 것이다.
그리고 프로젝트에서는 항상 interface로 빼야 한다 뭐한다고 애길하지만 난 이해가 안된다...워낙 그분들이야 내공이 워낙이
출중 하다보니깐 내가 어찌 할 수 없는 거므로 패스..일단은 기본은 열심이 하자...다 피가 되고 빼가 되는거다 -_-;;
쉽게 정리를 해보자 interface가 무엇인지...그것이 우선일 듯 하다.


보통 쉽게 생각하면은, 키보드를 다시 예를 들자 다른 걸로 하면은 상당히 힘드니깐 -_-;

키보드가 여러가지가 있을수 있고 거기에 한국 키보드가 있을수 있고 영문키보드도 있고 상당히 많이 있을 것이다.
그중에서 자주 사용하는 부분을 하나의 매소드만 선언을 해본다고 생각 하자 사전으로 검색을 하다보면으ㅓㄴ
공유, 영역, 대화 , 조회시키다 조정하다..라고 검색이 될 것이다. 한번 해보삼..~~
 그리고 컴퓨터 용어로는 CPU와 단말 장치와의 연결 부분을 이루는 회로부분이라고 나올 것이다...더더욱 힘들더라..니미..-_-
그래서 자바에서 생각하는(?) interface가 무엇이냐하면 검색을 하다보니깐 이해가 쉬운것이 있다...내맘대로..
 어떠한 기능을 정의를 해놓지 않고, 단지 비슷한 기능을 모아서 단지 어떻게 만들겠다고 추상적으로 선언만 해놓은
것들을 interface라고 생각 하면 된다. 

예를 들어보자, 쉽게 키보드라는 것을 만들려구 한다고 생각 하자.

interface 키보드 {

+ 입력 ();  // 입력을 해야한다. 입력을 할때 어떻식을 입력을 할지는 아직 모르는 것이다.
+ 언어 ();  //물론 언어가 어떤건지 한국인지, 미국인지, 일본인지 모르기 때문에 

}
하나의 키보드에 공통적으로 사용을 할 수 있는 부분만 정의를 한다.
이와 같이 키보드를 만들고는 싶지만 아직 정해 진것이 없고, 그리고 어떻게 만들지 모른는 상황이다. 이럴때는
하나의 매소나와 변수만 정의를 한다. 하나의 명세서와 같은 역할이라고 생각 하면은 된다.
만약에 한글 키보드를 만들자 라고 하면은 아래와 같이

한글 키보드 implements 키보드 {
   + 입력(){

한국어 입력

    }

 + 언어(){

ㄱ ~ ㅊ
가 ~ 차
0 ~ 9

 }
}
입력을 할 구현만 해놓고 사용을 할 수 있다.

일본 키보드 implements 키보드 {
//implements 는 반드시 구현은 해야된다 구현하지 않는 매소드가 있으면은 컴파일러 오류발생이 일어난다.
   + 입력(){

일본어 입력

    }

 + 언어(){

일본어 ...

 }
}
위에 예제를 보는 것 처럼 인터페이스를 클래스로 구현을 통해서 하나의 클래스를 만들어 주면서 하나의 표준이
될 수 있는것을 알 수 있을 것이다. 그리고 인터페이스의 재미있는 것이 또하나 있다. 리턴형이다.
            키보드                  등은 구현을 통해서 사용을 하였다. 하지만 리턴형은 껍데기 인 키보드 인터페이스를 
한글 키보드, 일본 키보드     를통해서 리턴형이되면서 다향성과 객체들 간의 통일화가 된다는 것도 있다.
늘 기본을 공부를 하면서 재미있는 것을 보고 항상 생각 한다. 기본은 중요하군아...

 두개의 예제를 보면은 결국 extends, implements도 결국 상속이라는것을 보여주는 것이다.
그리고 개념적으로 보며는 interface와 class는 개념은 마찬가지일 것이라고 확인 할 수 있을 것이다.
물론, 다지면은 같다고는 말 할 수 없지만은 개념은 같다는 것이고, 다르다면은 사용을 할 수 있는 녀석을 쓰냐,
아님면은 아무것도 없는 선언만 되어 있는 껍데기를 사용을 하느냐 인데 왜 이걸 사용을 하며, 왜 구분을 짓나는 것이다.
이 결론은 쉽다. 단순하게 생각을 하면은 부모에게 일을 수행을 필요할 때는 class를 만들어서 사용을 하는 것이고,
부모는 굳이 수행할 필요가 없고, 모두가 사용을 할 수 있도록 표준화를 만든다면은 interface를 만들어서 사용을 하면은
된다는 것이다. 나 역시도 이번 프로젝트를 통해서, 왜 클래스를 상속을 해야하는지 그리고 어떤 경우는 왜 interface를 완벽하게
이해를 하지 못하지만, 많은 경험을 통해서, 하나씩 배워가고, 잘못된 부분은 수정을 하면서 배워가는게 목적이 아닐까 생각하면서
게시판을 인터페터이스로 하나 만들어보구 있다..ㅋㅋ 잘 될련지는 모르겠지만...


블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

,