업스케일링과 가상 메서드

3챕터 :

3챕터의 도입부에 대한 궁금증을 해결하기 위해 다른 강의를 참고 하고 있습니다. : )

[ 자바 입문 편 : 형변환과 가상 메소드 강의부분] 강의

오픈 튜토리얼 : https://opentutorials.org/course/1223/5400

프로그래머스 :https://programmers.co.kr/learn/courses/5/lessons/193#

 

자바 입문 - 클래스 형변환

자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금

programmers.co.kr

형변환 1. 부모 타입으로 업스케일 : 인스턴스 생성자 B()는 B{B()}인 걸까?

package TEST;

public class Do {
	public static void main(String[] args) {
		
		A a = new B();
		//B의 인스턴스를 생성해서 A에 담는다.
		//B의 생성자"class B{B(){}}"까지 실행된후. a에 값을 담는다.

		a.method_A();
		//A의 메서드는 a가 A타입이기 때문에 사용 가능하다.
		
//		a.method_B();
		//B의 메소드는 A타입에는 없기 떄문에 사용할수 없다.
		
		a.method_AB();
		//A의 메서드만 사용할수 있지만 B에 같은 이름의 메서드가 있다면 B의 메소드가 호출된다.
		
		System.out.println(a.alpabet);
		//B로 생성된 인스턴스 이기 때문에. a의 alpabat에는 B가 들어있다.
	}
}
package TEST;

public class A {
	String alpabet;
	A(){
		this.alpabet = "A";
	}
	public void method_A() {
		System.out.println("A_method");
	}
	public void method_AB() {
		System.out.println("A의 method_AB호출");
	}
}
package TEST;

public class B extends A{
	B(){
		this.alpabet= "B";
	}
	public void method_B() {
		System.out.println("B");
	}
	public void method_AB() {
		System.out.println("B의 method_AB호출");
	}
}

 

main 내부에서 main이 포함된 클레스의 메소드를 사용 할때. 

자신의 인스턴스를 만드는 타이밍이 가장 앞에 있어도 되는지 확인.(인터프린터와 컴파일 언어의 차이점이라고 배운듯)

형변환을 할때

메소드의 매게변수를 상위 타입으로 받고. 하위 타입의 것으로 인수를 보내도 자동으로 형변환이 된다. 그렇게 자동으로 오버라이딩 되도록 해보자.

package TEST;

public class Do {
	public static void main(String[] args) {
		Do dox = new Do();
		A a = new A();
		B b = new B();
		C c = new C();
		dox.print(a);
		dox.print(b);
		dox.print(c);

	}
	void print(A a) {
		a.print();
	}
}
package TEST;

public class C extends A {
	void print() {
		System.out.println("C");
	}
}
package TEST;

public class B extends A {
	void print() {
		System.out.println("B");
	}
}
package TEST;

public class A {
	void print() {
		System.out.println("A");
	}
}

 


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3챕터 : 1~13 정리하기.

1) 스스로 개념과 매치되는 코드를 짤수 있는지 검토한다.

2) 스스로 개념을 설명해본다.

3) 구조의 계념을 설계 이해. 설명할수 있도록 다이어그램을 작성할수 있도록 다이어그램에 대한 정보를 찾아본다.

3) 타이핑 하는 자세를 주기적으로 확인해서 교정한다. (손목 보호에 신경쓴다.)

4) 목표를 아침에 정해 놓고. 하루라도 완벽하게 보내서 후회를 없에 불면증과 무기력증을 날린다.

5) 워라밸을 때놓고 워커 홀릭의 자세로 전환한다.

6) 강의에 대해서 긍정적인 마인드를 갖고 참여한다 (교육학에서 중요하게 생각한다고 하네요)

7) 너무 완벽하게 이해하려고 하면 도전하기가 무서워지기 때문에 막!(?)해 본다. :) (웃음) 

 


이론 정리 : 이번 챕터에서는 손목이 회복되서 타이핑을 많이 하고 싶어졌기 때문에 뻘글이 많습니다 : ) 

3챕터 영어단어 암기

: 오늘로 4번정도 복습한듯 : )

evaluation  연산
expression 값이 도출되는 명령
JRE java runtime environment
JDK java development Kit
instruction set 프로세스가 해석가능한 명령어세트
compile 원시코드 → 목적코드 변환
james Arthur Gosling 캐나다의 자바 개발자
write once, run anywhere WORA . 어떤 장비로도 개발가능. JVM에서도 실행될수 있음
object orented programming OPP, 객체 지향 프로그램
procedural programming 절차지향 언어
unary operator 단항 연산자
infix operator 이항 연산자
ternary operator 삼항 연산자
assign 대입 (=)
Arithmetic Operators 산술 연산자
operation 운용
ExclusiveOR XOR, 두비트가 다를때만 1(HIGH)
Truncate 시프트 연산자로 범위 밖 값을 날리는 동작
statement 실행 가능한 최소 서술
indentation 들여쓰기
initialize 초기화
infomation hiding 정보 은닉
interaction 객체 사이에서 일어나는 행위
collaboration 인터렉션이 발생하는 객체간의 관계
member variable 객체에 속성의 변수를 선언한것.
convention 공통된 암묵적인 규약, 협약
Entity 객체: 정보를 저장하고 관리할수 있는 집합
method 메서드 : 함수의 일종으로 class 내의 자원을 활용하는것
instance 클레스를 기반으로 만들어져 heap메모리에 할당된 실체
constructor 생성자
parameter 매게변수
argument 전달 인자
initializer 초기화
primitive Type 기본형 데이터 타입 : 초기화값이 있는 데이터형
Reference Type 참조형 데이터 타입 : 초기화 않하면 NULL
access modifier 접근 제어 지시자
field class 자신의 내부에 있는 변수, 메서드등등의 영역 
isvalid 생성된 인스턴스의 필드의 값을 전달하기에 앞서서. 입력된 값의 유효성을 검증한후 true인지 false 인지 전달 하기 위해 있는 변수
encapsulation 캡슐화 : 꼭 필요한 정보만 외부에 오픈하는것
escpe sequence 확장 비트열, 이스케이프문자, 제어시퀀스
singleton pattern 하나의 인스턴스만 생성할수 있게 하는 디자인 패턴
inheritance 상속
annotation 컴파일러에게 정보를 전달할수 있는 주석 @(엣!?) 을 앞에 쓴다.
polymorphism 다형성
ratio 비율
strategy pattern 전략 패턴
DAO Data Access object : 데이터 접근기능을 갖고 있는 객체
implements 인터페이스를 구현(상속받을때)할때 extends 처럼 사용한다.
source hierarchy 코드의 계층구조 페키지명 뒤에 .(점)으로 줄줄이 써 내려가면 점 붙일때 마다 낮은 하위 계층이 만들어 진다.

 

영어단어를 암기하면서 타이핑한 휫수를 카운트한 횟수 83000회! .나름 뿌듯한 방법 이네요 : )

 

2챕터 ~ 13챕터 까지 ( 소스코드 구현 + 다이어 그램 + UML  )

2챕터_상속

상속 계념이 생기는 지점

우선 VIPCustomer이 없었고 Customer로 열씸히 다른 객체와 인터럭션을 시키며 놀고(일하고) 있었는데. VIP 라는 고객 분류가 새롭게 추가 되는 상황에서 VIP 고객을 위해 메소들 추가 하거나 수정해야 한다면 ?

만약 객체 지향 언어가 아니라면 이렇게 헤야 합니다.

1) Customer에 "회원등급"변수를 만들어서 "회원등급"내부의 값에 따라 조건문으로 VIP와 일반고객의 메소드가 별도로 존제하게 합니다

2) 마찬가지로 회원등급 변수를 만들어서 조건문으로 VIP와 일반고객의 영향을 받는 변수를 우선 변화시키고 메소드가 작동되게 만듭니다.

3)VIP_함수A , 일반고객_함수A 처럼 VIP용 함수를 따로 만들어서 회원등급에 따라서 작동 시킵니다.

히잉.. 너무 복잡해집니다. 회원등급이 3개 이상이라면 개발자는 복잡해 질떄로 복잡해진 Customer코드를 붙잡고서 대성 통곡을 하며 세벽까지 코딩을 하고 있을지도 모릅니다. : ( 

이럴때 만약 객체 지향이라면 어떨까요?

1) VIP 객체를 따로 만들어서 관리하기 떄문에 Customer 객체는 깔끔하게 자기의 의미를 잃지 않고. 평온한 삶을 살아갈수 있습니다(감격) . 그로인해 Customer은 복잡한 사고를 하지않고 자신의 전문 분야만 작업을 하면 됩니다. Customer은 복잡하지 않기 떄문에 다른 업무에도 호출해서 사용할수 있는 인기인이 됩니다. 만세. ( 이게 뭔소리야 .. 여러분은 하루종일 혼자 코딩하지 마십쇼 크큭)

<2챕터 구현 코드 UML>
<3챕터 구현 코드 UML>

 

시간은 뭐이렇게 빨리 지나갈까요. 오늘도 하루가 다 지나갔네요.

중간에 이렇게 뚝뚝 끊기니 보는 분들 입장에서는 기분이 좋을것 같지 않은데. 될수 있으면 언젠가는 부분별로 나누어서 정리할수 있는 시간을 가질수 있으면 좋겠네요.


전문 용어


 

에러 메세지


학습 시간

하루종일 공부했지만 타이머를 누르는게 익숙하지가 않네요.

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


01~13 정리하기

문제점 인식 :

0) 이번 챕터에서는 손목 통증이 있어서 강좌 시청을 주로 했습니다.

  a.운동용 손목보도대 착용. 낮은 키보드 구입 , 손목과 키보드의 각도에 대해서 자주 교정 하기로 하였습니다.

1) 3챕터의 1~13강까지의 설계 개념과 1:1로 매치 되는 코드를 스스로 작성할수 없기 때문에 다음 진도를 나가는것에 의미가 없습니다.

  a. 내용추가 : 프로그래머스의 강의와 복합적인 진행을 하기로 했습니다. 이론의 어려움도 다른 강의 참조를 적극적으로 하기로 하였습니다

개선 방향:

1) 스스코 개념과 매치되는 코드를 짤수 있는지 검토한다.

2) 스스로 개념을 설명해본다.

3) 구조의 계념을 설계 이해. 설명할수 있도록 다이어그램을 작성할수 있도록 다이어그램에 대한 정보를 찾아본다.

3) 타이핑 하는 자세를 주기적으로 확인해서 교정한다.

4) 목표를 아침에 정해 놓고. 하루라도 완벽하게 보낼수 있다면 후회와 불면증과 무기력증을 날릴수 있을것 같다.

5) 워라밸을 때놓고 워커 홀릭의 자세로 전환한다.

6) 강의에 대해서 긍정적인 마인드를 갖고 참여한다 (교육학에서 중요하게 생각한다고 하네요)

7) 너무 완벽하게 이해하려고 하면 도전하기가 무서워지기 때문에 막!(?)해 본다. :) (웃음) 

 


이론 정리 : 손목이 음청 아파서 기본적인 코드만 몇줄 적어서 볼게 없습니다. : )

01

A

package ch03;

public class A {
int intA = 10;
int methodA() {
	return 20;
}
}

B

package ch03;

public class B extends A {
	int methodA() {
		return 30;
	}
}

TEST

package ch03;

public class TEST {
public static void main(String[] args) {
	B b = new B();
	System.out.println(b.intA);
	System.out.println(b.methodA());
}
}

2

시나리오 제시

회사에서 고객정보를 활용한 맟춤 서비스를 하기 위해 일반고객(Customer)과 이보다 충성도가 높은 우수고객(VIPCoustomer)에 따른 서비스를 제공하고자 함
물품을 구매 할때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다름 
여러 맴버십에 대한 각각 다양한 서비르를 제공할 수 있음
멤버십에 대한 구현을 클레스 상속을 활용하여 구현해 보기

형변환에 대한 정리부터 . 자바의 정석 유투브 체널과 프로그래머스 강의의 도움을 받아서 다시 정리하고 있습니다.

일주일동안 이해가 되지 않는 강의를 붙들고서 수를 샐수 없이 반복 시청 했기 때문에. 이 강의에 대한 부정적인 감정을 갖고 있지만. 최대한 긍정적으로 이 강의에 대해서 생각하기 위해 노력하겠습니다. ㅎㅎ 

 

 


전문 용어


 

에러 메세지


학습 시간

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


1~13 설계 챕터 이해하기

목표

EASY

  • UML를 표준방법으로 활용(설계,설명) 할수 있다.
    • 예제 과제를 찾아서 설계를 할수 있다.
    • JAVA 코드와 1:1 대응할수 있다.
    • Stereo Type을 활용 할수 있다.
  • 적합한 UML툴의 종류를 탐색하고 . 사용방법을 습득한다.
    • 단축키를 원활하게 사용할수 있다.
    • 예제 과제를 찾아서 설계해 본다.

1. UML 계론

클래스 다이아그램은 UML의 일종이다.

Unified Modeling Language : 통합 모델링 언어

  • 다양한 분야에서 사용되는 복잡해진 구조들를 도식화 하는데 사용된다.
  • OMG(Object Management Group) 객체 관리 그룹에서 표준을 정의한다.

2. 클래스 다이어그램

선행 지식 : 객체지향의 개념, 객체 지향 언어의 문법.

UML 클래스의 표현방법

  1. 컨테이너상단 :
    • 클레스명 (추상적일 경우 이텔릭 체를 사용한다. : 기울어진 글시체)
    •  
  • 중간 :
    • 변수명 : 변수 타입
  • 하단 : 메서드 : 메서드 타입
  1. 관계 표현방법
    1. 컨테이너를 생성한다 :
      1. 접근 제어자를 지정한다.접근 제어자 표시 설명 
        public + 다른 클레스에서 접근가능
        private - 다른 클레스에서 접근 불가
        protected # 상속, 구현 관계에 있는 하위클레스(분화된 클레스)에서만 접근가능
        package ~ 페키지 내에 있는 클레스에서 접근 가능
    2. 컨테이너 간의 관계를 표현한다.

관계 표현 (택스트) JAVA 계념

연관 관계 화살표 혹은 실선 두 클레스가 같은 동작(행위)를 한다
일반화 관계 투명 화살표 상속_IS-A관계 이다.
집약관계 투명 다이아몬드 상위 객체의 한 부분 이지만 독립적인 객체이다.
합성 관계 다이아몬드 상위 객체의 한 부분이지만 의존적인 객체이다.(상위객체와 같이 소멸한다)
의존 관계 점선, 화살표 상속관계는 아니지만 참조하여 메서드를 짦은 시간동안 작동시킬수 있는 관계이다.
실체화 관계 점선, 투명화살표 인터페이스와 구현관계

TOOLS

  • StarUML :
    • 전문성과 편의성을 겸비
    • UML표준 규격으로 작동
    • 편리한 키보드 단축키
    • 실질적인 업계 표준 (IBM,GOOGLE,APPLE,FACEBOOK등의 참여 프로젝트)
    • 구입하지 않았을경우 워터마크 표시 이외에는 기능이나 기간제한 없음.
    • 상업적, 팀활동에 사용하기 위해선 비용 필요

단축키

ctrl+ enter 맴버 변수를 생성합니다.

ctrl+ shift + enter 메서드를 생성합니다.

teb Stereo Type을 정의 합니다.

 

 

잘 정리 되어 있는 교제 겸 자료

[StarUML]Manual.pdf

https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

https://www.nextree.co.kr/p6753/

 

객체지향 계념이 들어간 시스탬의 분석에는 UML만큼 좋은게 없는것 같다. 

아직 자바와 객체지향의 개념을 전부 획득한것이 아니기 때문에. UML을 자유롭게 사용하지는 못하지만.

자바 계념을 학습후. 스프링으로 넘어가기 전에 UML의 클레스 다이어 그램에 대해 학습 하는 시간을 갖게 되면 좋겠다.


전문 용어


 

에러 메세지


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:05 ~ 3:1:07


이론 정리

다형성이란?

  • 객체지향의 특징으로 형변환을 통해 다양한 타입으로 변경할수 있는것으로 얻어지는 이득적인 측면
  • 부모타입으로 모둔 자식 객체를 규격화 시킬수 있기 떄문에. 코드의 부품, 규격화가 가능하다.

재정의_예제 코드

public class Musician {
    public void play(){
        System.out.println("음악가 연주하다.");
    }
}
public class Musician {
    public void play(){
        System.out.println("음악가 연주하다.");
    }
}
public class Musician {
    public void play(){
        System.out.println("음악가 연주하다.");
    }
}

제정의후에도 원래의 메서드를 사용하는 방법 : SUPER

public class Musician {
    public void play(){
        System.out.println("음악가 연주하다.");
    }
}
public class Pianist extends Musician {
    @Override public void play(){
        super.play();
        System.out.println("딩동댕");
    }
}
public class Program {
    public static void main(String[] args){
        Pianist pianist = new Pianist();
        pianist.play();
    }
}

오버라이딩은 Final 속성은 할수 없다.

다형성

같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질

하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.

다형성을 위해 자바는 부모 클래스로 타입 변환을 허용한다.

즉 부모 타입에 모든 자식 객체가 대입될 수 있다. (부모 타입의 규격화)

이것을 이용하면 객체는 부품화가 가능하다.

ex) 타이어 클래스 타입을 적용했다면 이 클래스를 상속한 실제 타이어들은 어떤 것이든

상관 없이 장착(대입) 가능하다.

자동차는 타이어 타입으로 Hankook 타이어와 Kumho 타이어를 사용하지만,

각 타이어의 성능은 다르게 나온다. <다형성>

위 그림은 아래 코드처럼 표현된다.

public class Car {
    Tire t1 = new HankookTire();// 자식 타입 객체 대입
    Tire t2 = new KumhoTire();
}

타입 변환

데이터 타입을 다른 데이터 타입으로 변환하는 행위

클래스 타입도 기본 데이터 타입 변환과 마찬가지로 타입 변환이 있다. (기본 데이터 타입 변환)

클래스 타입 변환은 상속 관계에 있는 클래스 사이에서 발생한다.

자식 타입은 부모 타입으로 자동 타입 변환이 가능하다!! ( 자식 < 부모)

위의 그림에서 HankookTire와 KumhoTire 는 Tire 를 상속했기 때문에, Tire 변수에 대입할 수 있다.

자동 타입 변환 (Promotion)

프로그램 실행 도중 자동적으로 타입 변환이 일어나는 것을 말한다.

자동 타입 변환은 아래와 같은 조건에서 일어난다.

부모 클래스 타입으로 자동 타입 변환

자동 타입 변환 개념은

자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다.

ex) 고양이는 동물의 특징과 기능을 상속 받았다. 따라서 "고양이는 동물이다." 가 성립된다.

Animal 과 Cat 클래스가 아래와 같이 상속 관계에 있을 때

Animal 클래스와 Cat 클래스 상속 관계

Cat 클래스로부터 Cat 객체를 생성하고, 이것을 Animal 변수에 대입하면 자동 타입 변환이 일어난다.

Cat cat = new Cat();
Animal animal = cat;// Animal animal = new Cat(); 도 가능하다.

위의 코드의 메모리 상태는 아래와 같다. cat 과 animal 변수는 타입만 다를 뿐, (Cat, Animal)

동일한 Cat 객체를 참조한다.

Cat 타입 변수 cat = Cat 객체 참조 주소 값

Animal 타입 변수 animal = Cat 객체 참조 주소 값

동일한 Cat 객체를 참조한다.

즉, Animal 타입 변수 amimal 은 Cat 객체를 참조할 수 있다. <자동 타입 변환>

왜냐하면, Cat 객체는 Animal 객체를 상속 받았기 때문이다. (상속 관계이어야 한다.)

animal 변수가 Animal 타입이므로

당연히 부모인 Animal 객체를 참조하는 것이 맞다라고 생각할 수 있지만, 그렇지 않다!!

cat, animal 변수를 == 연산해보면, true 가 리턴되는데,

참조 변수의 == 연산은 참조 주소값이 같으면 true 를 반환하므로,

두 변수가 동일한 객체를 참조하고 있다.

cat == animal;// true

바로 위의 부모가 아니더라도, 상속 계층에서 상위 타입이라면, 자동 타입 변환이 일어날 수 있다.

ex)

D 객체는 B, A 타입으로 자동 타입 변환이 될 수 있고,

E 객체는 C, A 타입으로 자동 타입 변환 될 수 있다.

하지만, D 객체는 C 타입으로 변환될 수 없고, E 객체는 B 타입으로 변환될 수 없다.

<상속 관계가 아니기 때문!!>

ex) PromotionExample.java

class A { }

Class B extends A { }
Class C extends A { }

class D extends B { }
class E extends C { }

public class PromotionExample {
    public static void main(String[] args) {
        B b = new B();
        C c = new C();
        D d = new D();
        E e = new E();

        A a1 = b;
        A a2 = c;
        A a3 = d;
        A a4 = e;

        B b1 = d;
        C c1 = e;

// B b3 = e;  컴파일 에러 (상속 관계가 아니다.)// C c2 = d;  컴파일 에러 (상속 관계가 아니다.)
    }
}

자동 타입 변환 후 주의할 점!!

부모 타입으로 자동 타입 변환된 변수는 부모 클래스에 선언된 필드와 메소드만 접근 가능하다.

비록 변수는 자식 객체를 참조하지만,

변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정된다.

예외) 메소드가 자식 클래스에서 오버라이딩되었다면, 자식 클래스의 메소드가 대신 호출된다.

(다형성과 관련)

오버라이딩되었다면, 자식 클래스의 메소드에 접근 가능하다.

ex)

자동 타입 변환 시 부모 클래스 멤버만 접근 가능하다. (오버라이딩 예외)

child 객체는 method3( ) 메소드를 가지고 있지만,

Parent 타입으로 변환된 이후에는 method3( ) 을 호출할 수 없다.

하지만 method2( ) 메소드는 부모와 자식 모두가 가지고 있다.

이렇게 오버라이딩된 메소드 (method2( )) 는 타입 변환 이후에도 자식 메소드가 호출된다.

Parent.java

public class Parent {

//메소드
    public void method1() {
        System.out.println("Parent - method1()");
    }

    public void method2() {
        System.out.println("Parent - method2()");
    }
}

Child.java

public class Child extends Parent {
    @Override
    public void method2() {// 부모의 method2 재정의됨
        System.out.println("Child - method2()");
    }

    public void method3() {
        System.out.println("Child - method3()");
    }
}

ChildExample.java

public class ChildExample {
    public static void main(String[] args) {
        Child child = new Child();

        Parent parent = child;// 자동 타입 변환

        parent.method1();
        parent.method2();// 재정의된 메소드 호출 (자식 메소드)//parent.method3();  // 호출 불가능
    }
}

 


전문 용어


 

에러 메세지


학습 시간

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


1~4 . 정리하기


이론 정리챕터3

형변환 : casting

  • 영어 단어 : casting (주조) : 제료를 융해되는 온도보다 높게 가열하여 액체화 하여 형태를 바꾸는 것
  • 간단 정의 :
    • UpCasting : 서브 클레스를 슈퍼 클레스로 변환
    • DownCasting : 서브 클레스에서 슈퍼 클레스로 업케스팅 된 클레스에 한해서. 다시 서브 클레스로 변환이 가능하다.
  • 용도 : 다형성 (Polymophism)
    • 다형성이란?
      • 객체 지향의 특징
      • 서브 클레스의 메소드를 중복되게 슈퍼 클레스에서 생성해야 할때. 서브클레스의 메소드를 사용할수 있다.
  • 사용방법 : Perents perent = new childen();
    • perents는 perent의 메소드를 사용할수 있지만 children 의 메소드를 우선적으로 사용한다.

형변환 TEST

package upcasting;

import org.w3c.dom.TypeInfo;

class caffee { // super Class
	String cafeebean ;
	String sugar = "설탕 : 미포함";
	void eat () {
		System.out.println("카페인 섭취가 완료 되었습니다.");
	}
	void buyCaffee() {
		System.out.println("커피 콩을 구입하였습니다");
	}
	void changebean() {
		this.cafeebean = "원산지 : 정체불명";
	}
}
class goldMoca extends caffee {//sub Class
	String sugar = "설탕 : 포함";
	String instance = "인스턴트 커피 입니다";
	void eat() {
		System.out.println("설탕으로 인해 집중력과 행복도가 증가 하였으나. 당료병 가능성, 채중이 증가 하였습니다.!");
	}
	
	public goldMoca() {
		this.cafeebean = "원산지 : 페루산";
	}
	
	void changebean() {
		this.cafeebean = "원산지 : 한국산";
	}
}

public class MyUpCasstingEx_1 {
	public static void main(String[] args) {
		//----다운 케스팅 ----
		System.out.println("----다운 케스팅----");
		caffee goldMocaA = new goldMoca();
		// goldmocaA를 caffee로 생성하고 goldMoca로 형변환(다운케스팅)을 시킨 코드를 축약 한것이다.
		// ㄴ 이 코드가 갖고 있는 의미는 변수는 슈퍼 클레스 것을 사용하지만 메소드는 형변환 시킨 클레스(서브 클레스)것을 사용 한다는 것이다.
		// ㄴ 슈퍼 클레스의 변수 + 서브 클레스(형 변환된 타입)의 메소드 조합으로 사용 한다는 것이다. 
		goldMocaA.changebean();
		System.out.println(goldMocaA.cafeebean);
		// 다운 케스팅 했기 때문에 서브클레스의 메소드가 실행 되었다.
//		System.out.println(goldMocaA.instance);
		//	 ㄴ 생성을 수퍼 클레스로 생성 했기 때문에. 서브 클레스로 형변환 해도 서브 클레스의 변수는 갖고 있지 않다.  
		System.out.println(goldMocaA.sugar);
		//	 ㄴ 서브클레스와 슈퍼 클레스에 동일한 이름의 변수가 있어도 . 메서드와 다르게 변수는 슈퍼 클레스의 변수이다.  
		//----업 케스팅----
		System.out.println("----업 케스팅----");
		goldMocaA.changebean(); // 다운 케스팅 상태에서 메소드가 오버라이드 된 서브 클레스의 메소드가 실행 되었다.
		System.out.println(goldMocaA.cafeebean);
		
		System.out.println("----새로운 인스턴스에 다운케스팅 했을때 참조 주소값----");
		// 새로운 서브 클레스의 인스턴스에 다운케스팅 했을때 참조 주소 실험 
		goldMoca goldmocaB = new goldMoca();
		goldmocaB =(goldMoca)goldMocaA;
		System.out.println(goldmocaB.cafeebean);
		goldmocaB.eat();
		// 결론 : 메서드는 형변환된 타입의 메서드가 실행 되지만. 변수는 처음에 생성된 클레스의 변수를 유지한다. 
		

	}
	
}

Super Test Code

MySuperEx_1

package superEx;

public class MySuperEx_1 {
	public static void main(String[] args) {
		SubA A = new SubA(10);
		System.out.println(A.intA);
	}
}

SubA

package superEx;

public class SubA extends SuperA {
	SubA(int number){
		super(number);
		super.print();// super클레스 내부의 메소드 사용가능.
		super.intA =3;
	}
}

SuperA

package superEx;

public class SuperA {
int intA ;
SuperA(int number){
	this.intA = number;
}
void print() {
	System.out.println("Super print");
}
}

constructer : 생성자 ( 매번 기억하기 힘든 단어 ^^;)

챕터 4

오버라이드

  • 서브 클레스에서 메서드 이름을 슈퍼 클레스와 똑같이 하면 서브클레스의 메서드가 가동 된다.
    • 메서드의 정의 부분을 데피니션 혹은 펑션 시그니쳐 라고도 한다.
  • annotation 애노테이션 : @overriding같은 컴파일러에 보내는것
  • c++은 형변환 후에 가상메서드로 선언을 해야 메서드의 사용이 가능하지만 .자바는 모든 메서드가 가상메서드이고 메모리 영역에 저장되는 공간이 변수와 독립되어 있기 때문에. 그냥 사용이 가능함.

복습 & 실무적인 사용방법

 


전문 용어


 

에러 메세지


학습 시간


캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 


15. 여러 인터페이스 구현하기, 인터페이스의 상속


이론 정리

인터페이스가 구현되는 여러가지 상황들

  • 클레스와 인터페이스를 같이 상속받는 클레스도 많이 사용한다.
    • 어떻게 사용하는걸까?
    • 일단 프레임워크에서 인터페이스를 상속받기 때문에 클레스 까지 상속하는 상황은 흔하게 발생된다고 한다.
  • 여려개의 인터페이스를 같이 상속받는 경우.
  • 인터페이스 간의 상속도 발생한다.
  • 이렇게 인터페이스가 자유롭게 상속의 유연성을 갖게 되는 원인은 인터페이스 내부의 메서드에는 구현(body)부가 없기 때문에. 호환성이 높아지는 것에 있다.
    • 인터페이스 내부에서 사용하는 default method,static method 는 구현부가 있기 때문에. 호환성이 낮아 진다.

그렇다면 클레스는 복수 상속이 왜 불가능 할까?

  • 하나의 클레스를 두개의 클레스가 상속받았을경우에 발생하게 되는 대표적인 문제점으로는 다이아몬드 프라블롬이 뽑힌다.

다이아몬드 프라블롬 이란?

  • 클레스가 다중 상속을 지원하지 않는 대표적인 원인 이다.
  • 위의 다이어그렘 에서 결과적으로 A메서드는 제정의된 B와 C중에서 어떤쪽이 실행되는지 모호성을 갖게 된다. 이런 상황을 다이아몬드 프라블롬이라고 한다.
  • 유저가 구매자 이 기도 하고 판매자 이기도 한 상황처럼 다양한 상속을 받는 경우가 있다.
  • C++에서는 사용하려는 메소드의 재정의 지점을 지정하여 가능하다.
    • 안전하고 모호하지 않는 방향으로 자바가 개발되었다.
    • 점차 자바에 여러가지 기능이 많이 생겨나고 있다.

코드 예제

  • 상위 클레스로 생성 될수 있고. 상위클레스로 생성되면 상위 클레스의 메소드를 사용할수 있다.

코드예제

Buy

package ch15.A;

public interface Buy {
	void buy();
	default void order() {
		System.out.println("buy order");
	}
}

Sell

package ch15.A;

public interface Sell {
	void sell();
	default void order() {
		System.out.println("sell order");
	}
}

Customer

package ch15.A;

public class Customer implements Buy,Sell {

	@Override
	public void sell() {
	System.out.println("Customer Sell");		
	}

	@Override
	public void buy() {
	System.out.println("Customer Buy");
		
	}

	@Override
	public void order() {
		System.out.println("customer order");
	}
	
	public void hello() {
		System.out.println("HELLO");
	}

}

CustomerTest

package ch15.A;

public class CustomerTest {
	public static void main(String[] args) {
		Customer customer = new Customer();
		customer.buy();
		customer.sell();
		customer.order();
		customer.hello();
		System.out.println();
		Buy buyer = customer;
		buyer.buy();
		buyer.order();
		System.out.println();
		Sell seller = customer;
		seller.sell();
		seller.order();
	}
}

인터페이스 끼리의 상속

  • 인터페이스 끼리도 extends 로 상속 할수 있다.
  • X(interface), Y(interface) : interface Z extends X,Y{}
    • X와 Y를 상속받은 Z를 상속받는 클레스는 XYZ의 메소드를 전부 구현해야만 합니다.
    • 어떤 인스턴스를 X와 Y의 메소드 둘다 사용하고 싶은 경우 . 업 스케일링없이 사용할수 있다.
  • 복수 상속받을수 있는 클레스는 인터페이스 밖에 없기 때문에. Z처럼 다수를 상속받으면 다수의 인터페이스 클레스라는것을 알수 있다.
  • implements와 extends를 둘다 사용할 경우에는 implements extends의 순서로 사용한다.

예제 코드

목표 : 책장에서 책을 넣고 꺼낸다.

BookShelf : 책장

Shelf : 물건이 담겨 있다.

Queue : 먼저 입력한 책만 먼저 꺼낼수 있는 큐(Queue)방식을 구현

BookShelf.java

package ch15.B;

public class BookShelf extends Shelf implements Queue {

	@Override
	public void enQueue(String title) {
		shelf.add(title);
		
	}

	@Override
	public String deQueue() {
		// TODO Auto-generated method stub
		return shelf.remove(0);
	}

	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return getCount();
	}

}

BookShelfTest.java

package ch15.B;

public class BookShelfTest {
	public static void main(String[] args) {
		Queue bookQueue = new BookShelf();
		bookQueue.enQueue("토지1");
		bookQueue.enQueue("토지2");
		bookQueue.enQueue("토지3");
		bookQueue.enQueue("토지4");
		bookQueue.enQueue("토지5");
		System.out.println(bookQueue.getSize());
		System.out.println(bookQueue.deQueue());
		System.out.println(bookQueue.deQueue());
		System.out.println(bookQueue.deQueue());
		System.out.println(bookQueue.deQueue());
		System.out.println(bookQueue.deQueue());
	}
}

Queue.java

package ch15.B;

public interface Queue {
	void enQueue(String title);
	String deQueue();
	int getSize();
	
}

Shelf.java

package ch15.B;

import java.util.ArrayList;

public class Shelf {
	protected ArrayList<String> shelf;
	public Shelf() {
		shelf = new ArrayList<String>();
	}
	public ArrayList<String> getshelf(){
		return shelf;
	}
	public int getCount() {
		return shelf.size();
	}
}

복습 & 실무적인 사용방법

 

 


전문 용어


 

에러 메세지


학습 타이머


 

캠 스터디

 


스터디 그룹


1) 카카오톡 오픈 채팅방

  - 모르는것 질문하기

  - 이해가 가지 않는 부분을 다른 분들이 블로그에서 정리한 글을 살펴보고 참고 하기

2) 구루미 온라인 독서실

  - 학습 시간 관리하기

  - 남들과 경쟁하기 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


14. 인터페이스의 여러가지 요소

인터페이스에 대한 뚜렷한 사용방법. 계론

의 공동 학습진행을 위해 1강씩 진도를 나가면서. 복습. 이론 정리를 진행하기로 함.

이해가 가지 않는 선생님의 어휘가 등장하면 조사하면서 한 강의를 세세한 부분으로 나누어 정리.


이론 정리

인터페이스의 요소

1. 상수

인터페이스 내에서는 에서는 변수의 값 이 변할 경우 하위클레스들 (복수 구현(Implementation)가능)에 큰 영향을 미치기 때문에 변수를 상수로 사용한다.

  • 잘못된 사용예 ) final int A = 10;
  • 올바른 사용예 ) public static final 클레스명{ int A = 10 ;}

2. 추상 메서드

  • 인터페이스 내 에서는 모든 메서드를 구현부(중활호부분,body)없이 사용한다.
    • 잘못된 사용예 ) public int 메서드(){ }
    • 올바른 사용예 ) public abstract int 메서드명()
  • 자바 8이후의 변화
    • default method 등장
      • 인터페에스를 구현한(Implementation 한)대부분의 클레스에서 중복 구현 해야만 하는 메소드가 있을경우 오버해드가 발생됨으로, 인터페이스 내부에서 구현할수 있는 default method가 탄생
        • 사용예 ) default void description(){}
        • 구현된 클레스 ) description(){실행문} 로 메소드를 재정의 하거나 디폴트 메소드로 사용한다.
        • 구현하려는 메소드가 있는 인터페이스를 상속해야 한다.
  • 정적 메서드 : static method
    • NEW 해서 만들거나 상속받지 않아도 사용할수 있는 메서드로 default method처럼 인터페이스를 구현한 클레스 중에서 중복적으로 사용되는 메서드로 인해 오버해드 되는것을 해결하기 위해 탄생했다. (탄생 배경은 디폴트 메서드와 같다)
      • 사용예 ) static int(){}
  • 자바 9 이후로 바뀐점
    • private method
      • 인터페이스 내부에서 사용 하기위해서 구현하는 메소드
      • 인터페이스를 구현한 하위 클레스에서 사용하거나 재정의도 할수 없다.
      • interface 내부의 default, static 메소드에서 사용하기 위해서 탄생하였다.

한글

정적 메서드 : static 으로 되어있어서 호출 업이 사용가능한 메서드

인플리멘테이션 하는 클레스 : 인터페이스를 구현하는 클레스

영어

Implementation : implement 하는 클래스. (인터페이스 클레스를 상속받는 하위,자식 클레스)

decollation : 선언하다


복습 & 실무적인 사용방법

 

 


전문 용어


 

에러 메세지


학습 타이머


 

캠 스터디


스터디 그룹

1) 카카오톡 오픈 채팅방

  - 모르는것 질문하기

  - 이해가 가지 않는 부분을 다른 분들이 블로그에서 정리한 글을 살펴보고 참고 하기

2) 구루미 온라인 독서실

  - 학습 시간 관리하기

  - 남들과 경쟁하기 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

+ Recent posts