반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-18 06:40
관리 메뉴

ImJay

[자바] Is A 상속 본문

자바/기본 개념

[자바] Is A 상속

ImJay 2022. 6. 30. 21:32
반응형

Has A 상속과 비교했을 때 Is A 상속은 부모가 자식이 요구하는 것을 완벽하게 갖고 있진 않다는 것이다.

 

Is A 상속은 한 캡슐이 내가 만들고자 하는 캡슐에서 필요한 부분들이 상당 부분 있을 때, 그 캡슐을 상속하여 필요한 부분들을 가져다 쓴다는 개념으로 이해하면 쉽다.

 

대표적인 Is A 상속에는 프레임워크가 있다.

 

프레임워크를 통해 Is A 상속을 하여 내가 원하는 부분을 상속함으로써 작업 속도를 향상하고, 작업량을 줄일 수 있다.

 

장점은 생산성이 좋다는 것이지만, 단점으로는 기성품으로 생각될 수 있다는 점이다.

 

거의 모든 부분을 가져다 쓰기 때문이다.

 

그러나 현재 IT는 굉장히 빠른 속도로 성장하고 있기 때문에 대다수 현업자들이 프레임워크를 선호하고, 일부분을 나의 아이디어로 차별화시키는 전략을 사용한다.

 

public class Program {
    public static void main(String[] args) {
        Child A = new Child();
        
        System.out.println(A.print());
    }
}
import Parent;

public class Child extends Parent {

}

 

자바에서 상속을 이용할 때는 extends 를 사용한다.

 

위 코드에서 Parent 가 내가 작성하고 싶은 기능들이 작성되어 있는 객체라고 가정하면,

 

Child는 extends 만을 사용하여 Parent 의 모든 기능을 사용할 수 있는 새로운 객체가 생성된 것이다.

 

복사했다는 것과 비슷하게 보면 될 것 같다.

 

여기서 새로운 기능들을 추가하여 내가 원하는 새로운 프로그램을 탄생시킬 수 있다.

 

import Parent;

public class Child extends Parent {
	
    private int x;
    
    public int getX() {
        return x;
    }
    
    public void setX(int x) {
        this.x = x;
    }
}

Parent 를 Is A 상속하는 Child 객체에 내가 새롭게 추가하고 싶은 변수 x 를 추가하였다.

 

 

public class Program {
    public static void main(String[] args) {
        Child A = new Child();
        
        A.setX(10);
        
        System.out.println(A.print());
    }
}

그 다음, Program 을 통해 x 에 값 10을 전달하고 상속 받은 print 메소드를 통해 x 를 출력해보려고 한다.

 

그렇다면, 이 Program 은 정상적으로 작동할까?

 

Parent의 Is A 상속을 받은 Child 의 print 메소드는 Parent 의 print 메소드를 기준으로 만들었기 때문에,

 

우리가 새롭게 Child 에서 추가한 변수 x 에 대한 print 메소드는 정상적으로 작동하지 않을 것이다.

 

그렇다면 어떻게 이걸 해결할 수 있을까?

 

다음 글을 통해 알아보자.

 

반응형
Comments