4/28 - 4/30

목표: Ch 03 객체 지향 핵심 05 ~ 09

완료: Ch 03 객체 지향 핵심 05 ~ 08

 

이번주 자바강의 소감

매서드 중요하면서도 아직도 막연하다. 설명을 들을때는 이해가 가지만 금방 까먹는다. 도대체 언제 제대로 내 것으로 만들 수 있을지.. 하지만 볼때마다 조금씩은 점점 이해가 더 잘 된다는 작은 보람이 있다.

다형성(polymorphism)은 클라스를 override를 사용하여 더 다양하게 사용할 수 있다. 이번 자바강의의 가장 큰 소득은 업캐스팅과 다운캐스팅 이었다. 이것도 볼 때마다 돌아서면 까먹는데 이번엔 좀 더더 확실히 이해가 됐다. 

 

 

 

Ch 03 객체지향 프로그래밍

 

5. 메서드 재정의와 가상 메서드 원리 

메서드는 어떻게 호출되고 실행 되는가?

  • 메서드(함수)의 이름은 주소값을 나타냄
  • 메서드는 명령어의 set 이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치
  • 해당 메서드가 호출 되면 명령어 set 이 있는 주소를 찾아 명령어가 실행됨
  • 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치 하게됨
  • 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨
  • 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드 됨

JAVA강의 중 - 컬러 필기는 내 것

 

 

가상 메서드의 원리

  • 가상 메서드 테이블(virtual method table)에서
    해당 메서드에 대한 address를 가지고 있음
  • 재정의 된 경우 재정의 된 메서드 주소를 가리킴

 

 

6. 다형성과 다형성의 사용 이유 

다형성(polymorphism) 

  • 하나의 코드가 여러 자료형으로 구현되어 실행
  • 같은 코드에서 여러 다른 실행 결과가 나옴
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임
  • 유연 / 확장성 / 유지보수가 편리

JAVA강의 중 - 필기는 내 것
JAVA강의 중 - 필기는 내 것

 

 

코드는 줄인데 어떤 data type / instance 형이 들어가느냐에 따라 move( ) implement 형이 달라진다 - 다형성

 

다형성을 사용하는 이유?

  • 다른 동물을 추가하는 경우
  • 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음
  • 그렇지 않는 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐
  • 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현
  • 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음

 

if-else if 구문 사용시 메서드마다 넣어줘야 함.

가격 / 프로모션 / 쿠폰정책을 클라스마다 

if-else if 문으로 넣어줘야함. blacklist 같은 grade 추가시 또 새로 만들어 줘야 함.

 

 

다형성을 활용한 멤버십 프로그램 확장

  • 일반 고객과 VIP 고객 중간 멤버십 만들기GOLD 고객 등급을 만들고 혜택은 다음과 같다 
  • 고객이 늘어 일반고객보다는 많이 구매하고 VIP보다 적게 구매한 고객 해택
    1. 제품을 살때는 10프로를 할인해준다
    2. 보너스 포인트는 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

 

한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online. | 패스트캠퍼스

Java/Spring 웹 개발, 핵심 25가지 스킬부터 공부하세요. 대기업 출신 7인의 강사진이 모여 만든 Java/Spring 웹 개발 완전체 커리큘럼! 핵심 스킬 25가지 강의부터 250개의 예제, 7개의 프로젝트까지! 비

fastcampus.co.kr

강의 수강 후기: 나는 개인적으로 자바 기초 수업을 들은 적이 있다. 이번 수업은 내 수준에 딱 맞는 수업인것 같다. 아직 20프로 정도 강의를 들은 시점이기에 나중에 얼마나 어려워 질지는 모르겠지만 내 수준에서 이해할 수 있는 정도일것 같다. 왕초보자들은 기초강의를 듣고 오는 것이 좋을것 같다. 그만큼 실용성있는 부분에 중점을 둔 것 같다. 

+ Recent posts