top of page

개념 정리

자바에서 사용되는 다양한 개념에 대해 알아보도록 하겠습니다.

 

1. 상속(extends)

 

안드로이드 스튜디오를 실행하고 처음 프로젝트를 만들면 요즘은 ActionBarActivity로부터 상속(extends) 받는다고 명시되어 있습니다.  그 의미는 무엇일까요?

 

=> 여기에는 안보이지만 어딘가에 있는 이미 잘 만들어 놓은 ActionBarActivity 클래스의 메소드(method)들을 사용하겠다라는 뜻입니다. 물론 상속 표시를 해 놓고 사용하지 않아도 상관은 없습니다.

 

■ MainActivity.java

 

     public class MainActivity extends ActionBarActivity{

 

          protected void onCreate(Bundle savedInstanceState) {

             super.onCreate(savedInstanceState);

 

          }

     }

 

이것만 가지고 생각해 보도록 하겠습니다.

super.onCreate는 무슨 근거로 썻길래 동작이 되는 걸까요?

super는 상위 클래스 생성자를 호출할 때나 상위 클래스의 멤버 변수나 메서드 접근시 사용합니다.

이것은 이 MainActivity가 ActionBarActivity로 부터 상속받았기 때문에 가능한 것입니다.

 

 

2. 구현(implements)

 

클래스 상속이 아니고 인터페이스 상속으로 위와 비슷하게 생각하고 사용하면 됩니다.

요기에 들어가 보시면 설명이 잘 되어 있습니다.

 

참고) 

1. extends는 일반 클래스와 abstract클래스 상속에 사용되고, implement는 interface상속에 사용됩니다.

2. class가 class를 상속받을 땐 extends를 사용하고, interface가 interface를 상속받을 땐 extends를 사용합니다.

3. class가 interface를 사용할 땐 implements를 써야하고

4. interface가 class를 사용할 땐 implements를 쓸 수 없습니다.

5. entends는 클래스 한 개만 상속받을 수 있습니다.(내부적으로 Object 클래스를 기본으로 상속받고 있습니다)

6. entends 자신 클래스는 부모 클래스의 기능을 사용합니다.

7. implemensts는 여러개 사용 가능합니다.

8. implements는 설계 목적으로 구현 가능합니다.

9. implements한 클래스는 implements의 내용을 다 사용해야합니다.

 

클래스를 상속받는 이유는 클래스간의 부모-자식 관계를 만들어주면서 부모의 함수/멤버들을 자식이 그대로 사용이 가능하도록 하는 것이구요.

 

인터페이스의 사용목적은 실제 내부 코드를 달라도 함수의 명과 함수의 인자를 동일하게 사용하려 하는 경우입니다.

 

import 는 위에서 가져다가 쓰겠다는 말입니다.

우리가 만약 현재 프로그램에서 만들어져있는 팩키지의 일부를 사용하겠다고 했을경우

import 문을 써서 팩키지 경로를 적습니다.

 

예를 들어 API에 있는 Array 를 사용할려고 할때는 import java.util.Array

라고 해야 합니다.

그리고 나서  Array arr  =  new Array(); 라고 했을때 컴파일러는 Array 가 무엇인지 알수 있을겁니다.

 

implements   ,  와  extends 는 비슷하지만 많은 차이가 있습니다.

 

implements 는 선생님이라고 보시면 되고.. extends 는 아버지라고 보시면 됩닌다.

선생님은 친한 관계이긴 하지만 선생님의 물건이나 재산이 제자의 것이 되진 않습니다.

하지만 아버지의 물건이나 재산은 결국 자식에게 돌아올수 있습니다.

 

다시 설명드리면  선생님(implements)은 고기잡는 법을 알려주시는 조언자 라고 보면 되고.. 아버지(extends) 는 고기를 잡아다 주시는 것이라고 이해하면 됩니다.

 

아버지(extends)는 1명만 존재할수 있으면 선생님(implements) 는 여려명이 존재할수 있겠죠.

 

어떠한 프로그램을 만들때 하나의 프로그램안에 모든 코드를 만들어서 사용하진

않습니다. 이미 만들어져 있거나 구현되어 있는 것은 상속을 해서 사용하거나 implements 해서 구현을 합니다.

 

-------

 

extends는 일반 클래스와 abstract 클래스 상속에 사용되고, implement는 interface상속에 사용된다. 
자바에서의 상속은 2가지 형태가 있다.
하나는 extends 이고, 다른 하나는 implements이다.
 1. extends는 순수 상속으로 부모로부터 모든 권한과 재산과 능력을 가져 오는 것을 말한다.


 2. implements는 하나는 구현 상속 이라고 하는데, 상속이라기 보다는 인터페이스(나는 하나의 뼈대 혹은 방법을 빌어오기만 한다로 표현하고 싶다)만을 얻어 오는 것을 말한다. 즉 extends와 같게 상속은 받지만, 그 상속 내용이 비어 있어서 그 비어 있는 부분을 내가 반드시 채워서 써야 하는 것을 의미한다. 그러므로 여러 interface를 통해서 상속을 받을 수 있다.

 

 

 

bottom of page