Java 꽤 할만 할지도? 1편-<상속과 다형성>

hans·2022년 8월 12일
0

JAVA 할만 할지도?

목록 보기
1/1

1.상속

상속은 올바르게 활용하면 재사용성과 확장성이 좋은 프로그램을 만들수 있다
그렇다면 상속 이란 무엇일까?
우리가 흔히 아는 상속이라는 단어는 상속자를 떠올리기 쉽다
흔히 부모가 자식에게 재산이나 무언가를 상속하는걸 상상하기 쉬울거다 그렇다면
프로그램에서는 어떻게 상속이 이루어질까?

1-1.클래스 상속

2개의 클래스가 A,B가 존재한다고 생각해 보자
B가 A에게 상속 받았다면 B와A의 관계를 그림으로 살펴보자

이러한 관계를 문장으로 표현하면 A클래스가 B클래스 에게 상속했다 ,B클래스가 A클래스에게 상속 받았다

그럼이제 본격적으로 상속을 어떻게 프로그램에서 활용 할수있을지 알아보자
하나의 상황을 가정해보자
우리는 마트를 운영하는데 VIP시스템을 도입하려고 한다.
그럼이제 프로그램을 만들어 보자
손님 클래스와 VIP클래스를 생성한다

손님과 VIP클래스에게 동일하게 사용되는 멤버변수가 있다
우리가 상속을 활용하지 않는다면 우리는 손님 클래스를 정의하고 나서 VIP를 클래스를 정의할때
똑같은 코드를 써줘야 한다 이것은 굉장히 비효율 적인 방식이다
그렇다면 상속을 이용하면 어떻게 될까?

VIP클래스의 정의가 훨씬 깔끔해 졌다

1-2 상속의 주의점

상속받은 클래스는 상위 클래스의 멤버변수와 메소드를 활용할수있다
하지만 여기서 주의할점이 있다
그것은 상위 클래스에서 private를 통해 변수 메소드를 만들면 하위 클래스는 접근할수 없다.
이를 해결하기 위해 protected을 활용하면 된다
private와 같이 외부접근을 막지만 하위클래스에서의 활용은 가능하게 한다

2.상속에서 클래스 생성과 형 변환

하위 클래스가 생성될때 상위 클래스의 생성자가 먼저 호출됩니다
즉 VIP클래스를 생성하면 먼저 손님 클래스의 멤버변수가 힙 메모리에 생성되고 난후
VIP멤버 변수가 생성됩니다

참고로 private선언된 경우에도 메모리 공간에 존재하지만 접근 자체가 불가능 한것이다

2-1.형 변환

하위 클래스는 상위 클래스보다 일반적으로 더 많은 기능을 가지고 있다
하위 클래스가 상위 클래스 에게 상속을 받기 떄문이다
그렇다면 하위 클래스를 상위 클래스로 형 변환 하면 어떻게 될까?

위 그림을 보면 VIP클래스를 생성하면 다음과 같은 메모리 구조로 나타나다
하지만 VIP클래스를 손님 클래스로형변환 하면 손님 클래스의 메모리에만 접근할수있게된다

2-2.메서드 오버라이딩

메서드 오버라이딩이란 상위 클래스의 메서드를 하위 클래스에서 재정의 하는것을 말한다
예를 들어 손님 클래스에는 쿠폰이 없다 그렇기에 값을 계산하는 메서드는 쿠폰 할인율을 고려하지않고 정의 하면 되지만 VIP클래스는 쿠폰 할인율이 존재하기에 메서드를 재정의 해줘야할 필요가있다

2-3.가상 메서드

손님 클래스와 A라는 메서드가 있고 VIP클래스에서 A를 오버라딩한 메서드가 있다
VIP 클래스를 손님 클래스로 형변환후 A메서드를 호출 하면 어떤 A가호출 될까?
답은 오버라이딩 된 A메서드가 호출된다.
이것은 메서드가 멤버변수와는 다른 메모리 구조를 지니기 떄문이고 이 메모리를 가상 메모리라고 부른다 즉 손님 클래스 에서 A는 VIP 클래스에서 A와 다른 메모리 구조에 위치한다

profile
방구석여포

0개의 댓글

관련 채용 정보