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프로 정도 강의를 들은 시점이기에 나중에 얼마나 어려워 질지는 모르겠지만 내 수준에서 이해할 수 있는 정도일것 같다. 왕초보자들은 기초강의를 듣고 오는 것이 좋을것 같다. 그만큼 실용성있는 부분에 중점을 둔 것 같다. 

4/28 - 4/30

목표: Ch 03 객체 지향 핵심 01 ~ 04

완료: Ch 03 객체 지향 핵심 01 ~ 04

 

이번주 자바강의 소감

3주차까지 포스팅이 너무 중구난방 이었다. 이번주부터 바로 티스토리에 적으니 좀 더 깔끔한 정리가 되는 것 같다. 자바의 핵심으로 들어갈 수록 더 어려워지고 복잡해 지는 것 같다. 함정은 아직도 기초 부분이라는 것... 하지만 목표는 무조건 끝까지 듣고 이해하기. 이런 과정을 몇 번 반복하다보면 점점 쉬워지지 않을까 싶다. 현재 자바강의는 13%정도 들었다. 하루에 적어도 1시간씩 자바강의를 듣고 있는데 이 속도라면 자바강의 완강하는데 5달은 걸리지 않을까 생각한다.

필기중에 클래스/클라스 이름을 번갈아 쓰는데, 원래는 클라스라고 써왔다가 사람들이 클래스/클라스 혼용해서 쓰다보니 나도 둘 다 쓰게 되었다. 별로 중요하진 않지만 만약 사람들이 내 글을 보고 이런 것 때문에 좀 불편해 할까봐 설명한다. 

 

 

Ch 03 객체지향 프로그래밍

 

 1. 객체 간의 상속 

클래스 상속

  • 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나
    기능을 확장하여 클래스를 구현함
  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를
    구현해야 할때 기존 클래스를 상속함

상속하는 클래스 : 상위 클래스, parent class, base class, super class

상속받는클래스 : 하위클래스, child class, derived class, subclass

- 오른쪽 그림은 자바강의 중 - 

 

  • 상속의 문법

class B extends A{ }

extends 키워드 뒤에는 단 하나의 클래스만 올 수 있음
(implement는 여러 개의 클래스 올 수 있음)

- 오른쪽 그림은 JAVA강의 중 -
( C++은 여러개의 클래스가 올 수 있음)
(여러개 있을 때 문제 : 모호성 )

자바는 단일 상속(single inheritance)만을 지원함 ,
안정성(기존 C 나 C++보다 ), 심플

 

상속을 구현 하는 경우

  • 상위 클래스는 하위 클래스 보다 더 일반적인 개념과 기능을 가짐
  • 하위 클래스는 상위 클래스 보다 더 구체적인 개념과 기능을 가짐
  • 하위 클래스가 상위 클래스의 속성과 기능을 확장 (extends)한다는 의미

 2. 상속을 활용한 멤버십 클래스 구현하기 

 

멤버십 시나리오

일반고객

private String customerName;

private String customerGrade;
int bonusPoint;
double bonusRatio;

 

일반고객과 VIP고객의 중복되는 부분은 일반고객에 넣고 VIPCustomer 클래스에서 Customer 클래스를 extends로 상속한다.

VIPCustomer 에서 추가될 변수를 작성.

Customer에서 상속받은 customerGrade 상속받은 변수를 VIPCustomer 에서 사용시 오류가 남. private 변수 이므로. 그럴땐 protected로 상속받는 클래스도 private변수를 사용할 수 있게 한다.

 

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

하위 클래스가 생성 되는 과정

  • 하위 클래스를 생성하면 상위 클래스가 먼저 생성 됨
  • new VIPCustomer()를 호출하면 Customer()가 먼저 호출 됨
  • 클래스가 상속 받은 경우 하위 클래스의 생성자에서는 반드시 상위 클래스의 생성자를 호출 함 ex: super( );

JAVA강의 중 - 필기는 내 것

형 변환(업캐스팅)

  • Customer상위클라스 customerLee = new VIPCustomer( )하위클라스; // 상위클라스 = new 하위클라스( ) .......문제없음 하위클라스는 이미 상위클라스를 포함하고 있으므로.
  • 상위클라스로 형변환 => 상위클라스 = new 하위클라스( )  
  • 상위 클래스 타입의 변수에 하위 클래스 변수가 대입;
  • implicit하게 일어남. custom이므로 특별한 선언 필요 없음. (묵시적 형변환) 

 

 

JAVA강의 중 - 필기는 내 것

 

다운 캐스팅된 vCustomer는 상위클래스 변수만 접근 가능하게 됨. VIPCustomer() 변수 사용 x

 

 

 4. 메서드 재정의하기(overring) 

하위 클래스에서 메서드 재정의 하기

  • 항상 상위클래스를 있는데로 쓰지 않음. 필요시 재정의할 수 있음.
  • VIPCustomer 클래스의 calcPrice()는 할인율이 적용되지 않음
  • 재정의 하여 구현해야 함
  • 반환값/메서드 이름/ 매개변수 type 값이 같아야 함. (정의부분 = function signature)

VIPCustomer.java 

@Override

  • 애노테이션은 원래 주석이라는 의미
  • 컴파일러에게 특별한 정보를 제공해주는 역할

JAVA강의 중 - 초록색 필기는 내 것

이번주 java강의들의 키 포인트는 클라스 상속과 하위클라스를 상위클라스로 형변환해주는 업캐스팅, 그리고 상속받은 후 하위클라스에서 매서드를 재정의(override) 하는 것. 

 

내가 수강한 강의 : http://abit.ly/java-spring

 

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

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

fastcampus.co.kr

 

+ Recent posts