4/28 - 4/30
목표: Ch 03 객체 지향 핵심 05 ~ 09
완료: Ch 03 객체 지향 핵심 05 ~ 08
이번주 자바강의 소감
매서드 중요하면서도 아직도 막연하다. 설명을 들을때는 이해가 가지만 금방 까먹는다. 도대체 언제 제대로 내 것으로 만들 수 있을지.. 하지만 볼때마다 조금씩은 점점 이해가 더 잘 된다는 작은 보람이 있다.
다형성(polymorphism)은 클라스를 override를 사용하여 더 다양하게 사용할 수 있다. 이번 자바강의의 가장 큰 소득은 업캐스팅과 다운캐스팅 이었다. 이것도 볼 때마다 돌아서면 까먹는데 이번엔 좀 더더 확실히 이해가 됐다.
Ch 03 객체지향 프로그래밍
5. 메서드 재정의와 가상 메서드 원리
메서드는 어떻게 호출되고 실행 되는가?
- 메서드(함수)의 이름은 주소값을 나타냄
- 메서드는 명령어의 set 이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치
- 해당 메서드가 호출 되면 명령어 set 이 있는 주소를 찾아 명령어가 실행됨
- 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치 하게됨
- 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨
- 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드 됨
가상 메서드의 원리
- 가상 메서드 테이블(virtual method table)에서
해당 메서드에 대한 address를 가지고 있음 - 재정의 된 경우 재정의 된 메서드 주소를 가리킴
6. 다형성과 다형성의 사용 이유
다형성(polymorphism)
- 하나의 코드가 여러 자료형으로 구현되어 실행
- 같은 코드에서 여러 다른 실행 결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임
- 유연 / 확장성 / 유지보수가 편리
코드는 한 줄인데 어떤 data type / instance 형이 들어가느냐에 따라 move( )의 implement 형이 달라진다 - 다형성
다형성을 사용하는 이유?
- 다른 동물을 추가하는 경우
- 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음
- 그렇지 않는 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐
- 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현
- 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음
if-else if 구문 사용시 메서드마다 넣어줘야 함.
가격 / 프로모션 / 쿠폰정책을 클라스마다
if-else if 문으로 넣어줘야함. blacklist 같은 grade 추가시 또 새로 만들어 줘야 함.
다형성을 활용한 멤버십 프로그램 확장
- 일반 고객과 VIP 고객 중간 멤버십 만들기GOLD 고객 등급을 만들고 혜택은 다음과 같다
- 고객이 늘어 일반고객보다는 많이 구매하고 VIP보다 적게 구매한 고객 해택
- 제품을 살때는 10프로를 할인해준다
- 보너스 포인트는 2%를 적립해준다
7. 상속은 언제 사용할까
IS-A 관계(is a relationship : inheritance)
- 일반적인(general) 개념과 구체적인(specific) 개념과의 관계 -> 기능의 확장 ( base class 와 derived class 관계)
- 상위 클래스 : 하위 클래스보다 일반적인 개념 ( 예: Employee )
- 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 ( 예: Engineer, Manager...)
- 상속은 클래스간의 결합도가 높은 설계
- 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음
- 계층구조가 복잡하거나 hierarchy가 높으면 좋지 않음
HAS-A 관계(composition)
- 클래스가 다른 클래스를 포함하는 관계 ( 변수로 선언 )
- 코드 재사용의 가장 일반적인 방법
- 좋은 클래스가 있다고 무조건 상속 x.
- Student가 Subject를 상속 x 또는 Library를 구현할 때 ArrayList 상속 x.
위의 경우 Subject 나 ArrayList경우 그 기능을 가져다 쓰는 것이 맞음. (=포함)
8. 다운캐스팅과 instanceof
다운캐스팅
- 원래 human class 였는데 animal class로 업캐스팅 되었을때 다운캐스팅 할 수 있다. (원래 클래스로 돌아오는 것)
- Object class (all class의 최상위 클래스)에서 원래 클래스로 돌아올 때에도.
Animal tAnimal = new Tiger( ); // 업캐스팅 (묵시적)
Tiger tiger = (Tiger)tAnimal; // 다운캐스팅 (명시적)
내가 수강한 강의 : http://abit.ly/java-spring
강의 수강 후기: 나는 개인적으로 자바 기초 수업을 들은 적이 있다. 이번 수업은 내 수준에 딱 맞는 수업인것 같다. 아직 20프로 정도 강의를 들은 시점이기에 나중에 얼마나 어려워 질지는 모르겠지만 내 수준에서 이해할 수 있는 정도일것 같다. 왕초보자들은 기초강의를 듣고 오는 것이 좋을것 같다. 그만큼 실용성있는 부분에 중점을 둔 것 같다.
'Back-end' 카테고리의 다른 글
(자바강의/후기)JAVA/Spring 4주차-1 (0) | 2021.04.27 |
---|---|
(자바기초/후기)Java인강/Spring 3주차 (0) | 2021.04.27 |
(자바교육/후기) Java/Spring 2주차 (0) | 2021.04.20 |
(자바인강/후기) Java/Spring 1주차 (0) | 2021.04.07 |