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

 

4/21 - 4/27

목표: 2. 객체지향 프로그래밍 - 챕터 16 ~ 23

 

이번주 자바교육 소감

1강을 맨몸으로 100미터 뛰기의 속도로 갔다면 2강부터는 타이어를 허리에 매고 마라톤을 뛰는 느낌이다. 

갈수록 어려워지는데 가끔 숨고르기 구간이 나와서 너무 다행이 아닌 수 없다.

그리고 챕터 중간마다 풀어보기문제가 있는데 이것을 스스로 풀었을때 가장 보람된 순간인 듯 싶다.

현재 16% 완료했다. 

 

13. 객체 간의 협력(collaboration)

JAVA인강 중

너무 중요한 부분인데 저번주에 빼먹어서 포함했다. 

3개 객체의 협력으로 데이터도 줄이고 간략한 프로그램을 구현할 수 있다.

 

16. 여러 인스턴스에서 공통으로 사용하는 변수 : static

  • 기준 값이 있고 값으로부터 순차적으로 증감하는 경우
  • : 학번, 카드번호, 사원번호
  • static int serialNum;
  • static변수는 프로그램이 시작되는 순간 메모리영역에 프로세스되면서 data영역에 잡힌다.
  • 소멸되는 시점: 프로그램이 끝나고 메모리에서 unload되는 순간.

JAVA인강 중 - 필기는 내 것

 

 

JAVA인강 중 - 필기는 내 것

 

static 메서드(클래스 메서드)에서는 인스턴스 변수를 사용할 없다.

  • employeeLee.*같은 인스턴스 없이 Employee.* 처럼 클래스이름으로 호출가능.

employeeLee.*같은 인스턴스 변수 사용불가 - 인스턴스 생선 전에 호출될 있으므로.

JAVA인강 중 - 필기는 내 것

  • 멤버변수 많으면 메모리 많이 차지/ 적당히 - 클래스 속성이 있는 변수로. 클래스 내부에서 많이 사용되는 .
  • 멤버변수가 너무 적으면 필요시마다 함수사이 매개변수가 계속 전달하는 역할해야함. 외부에서 클래스 사용할때도 많이 귀찮음.
  • static 프로그램 시작과 동시에 메모리에 잡히고 종료때까지 잡고 있으므로 많이 쓰면 메모리소모가 . - 배열 지양
  • static instance 공유할 필요가 있는 변수 위주

 18. static응용 - 싱글톤 패턴(singleton pattern)

  • 회사를 클래스로 만들경우 사원은 여러명이나 회사는 하나여야만 .
  • public class Company{ } 경우 디폴트 생성자는 public. 외부에서 여러 생성 가능.
  • 그러므로 예제를 보자.

JAVA인강 중 - 필기는 내 것

 

20. 배열(array)

  • 순차적, 빠르다, 물리적/논리적위치 동일, 속도는 N개의 디펜던트( 0(n))
  • 기본자료형 (primitive data type): int, double… int 10개의 배열은 40byte
  • 객체배열 (Student, Employee….. 객체)

JAVA 인강 중 - 필기는 내 것

21.객체 배열

얕은 복사하기: System.arrayCopy(src, srcPos, dest, destPos, length)

src - 원본

srcPos - sorce position, 복사시작할 위치

dest - destination

destPos - 복사시작될 위치

length - 복사될 길이 (소스길이보다 dest길이 짧으면 오류)

 

JAVA 인강 중 - 필기는 내 것

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://abit.ly/java-spring

+ Recent posts