clone 메소드


정리 해 봅시다 .😘

 

기능:

  • 오브젝트의 내부를 똑같이 복사할수 있습니다.
    • 대상이 new로 만들어 질때의 생성자나 초기값은 상관없이. 현제 상태의 값 만을 복사합니다.
    • 맴버변수와 내부의 값까지 똑같은 인스턴스를 new 없이 새롭게 만들수 있습니다.
    • 만들어질때 대상(인스턴스)의 타입(기반이 되는 클레스)는 복사 되지 않고 object타입으로 생성됩니다. ( 완벽하게 복사하거나 원본의 메소드를 사용하기 위해서는 형변환을 해줘야 합니다)
      • “복사하려는 대상의 타입”+”만들려는 참조변수명” = (복사하려는 대상의 타입)대상.clone();

위치:

lang 페키지의 Object

  • 모든 class는 object를 상속받기 때문에 별도의 임포트나 상속이 필요하지 않습니다.

사용하는 방법:

  • 복제하려는 대상 오브젝트(인스턴스)나 기반이 되는 클레스에서 cloneable 를 implement 해야합니다.
    • 오브젝트 내부의 정보를 전부 복사하기 때문에. 개인,기업 정보의 보안적인 관점에서 정보은닉과 캡슐화, 객체 지향의 계념과 배척적 입니다. 그렇기에 이같은 위험성을 인지하고 허가 한다는 의미에서 cloneable 이라는 인터페이스를 명시(implement)해 줘야 사용할수 있습니다.
  • 복제하려는 대상 오브젝트(인스턴스)나 기반이 되는 클레스에서 clone메소드를 재정의(overrriding)으로 입력합니다 .( 오버라이딩 하지 않으면 작동되지 않기 때문에 필수 조건 입니다.)

에제 상황

  • 변화 되는 오브젝트 중간 중간에서 현제 값을 저장하게 하여. 값이 변화하는 오브젝트의 상태를 시간순서에 의거하여 비교 하여 수치 변화를 조건식으로 사용하거나 관찰 할때도 사용할수 있습니다

간단한 사용법 예제

package Clone_A;
class Target implements Cloneable{
	int A = 10;
	void runTest() {
		System.out.println("check");
	}
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}
	
	
}
public class TEST {
	public static void main(String[] args) throws CloneNotSupportedException {
		Target T1 = new Target();
		Target T2 = (Target)T1.clone();
		System.out.println(T2.A);
		T1.A = 20;
		System.out.println("==T1값 변조==");
		System.out.println(T1.A);
		System.out.println(T2.A);
	}
}
  • 이 예제 에서는 예외처리(Exception)를 try catch 하지 않고 디커렙션으로 throws 해서 간단하게 출력해 봤습니다.

단어 수집


 

에러 메세지


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

  - 학습 시간도 관리 해주는 온라인 독서실 

 

온라인 강의 주소

https://bit.ly/37BpXiC

추천합니다 . 👍 (e)

 

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

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

fastcampus.co.kr

 

02. Object 클래스의 메서드 활용


정리 해 봅시다 .😘

hashCode는 인스턴스가 저장되어 있는 주소를 불러(리턴)옵니다.

  • 동일한 대상의 주소값이 다르게 출력되는 상황을 볼수 있습니다 :
    • hashCoce 메소드 : 10진수로 출력
    • to String 메소드 : 16진수로 출력
    • 예시 코드 )

(10진수 : hashCode )1131316523 는 (16진수 : to String)436e852b과 같습니다.

10진수 16진수HASH 타입

10 진수: 0 1 2 3 4 5 6 7 8 9

16 진수: 0 1 2 3 4 5 6 7 8 9 A B C D E F

HASH : 하나의 key와 하나 이상의 value값을 ;으로 구분하여 데이터를 저장할수 있습니다.

  • 예) A = A;B;C;D
  • IT분야의 암호 알고리즘과 데이터 전송분야의 정보 변조 판단(CRC32등) 부분에서 활발하게 사용중 입니다.
  • 자바에서는 힙 메모리에 저장되는 인스턴스의 값이 일 = 다수 형식으로 hash형식으로 저장 됩니다.
    • 불러오는 상황에서는 주소값을 10진수 integer 형식으로 불러옵니다.
  • equals 메소드는 각각의 인스턴스(key)의 hash(주소)값이 같은경우 ture 를 리턴 합니다.
    • 인스턴스(오브젝트)내부의 맴버변수 주소는 오브젝트(this).hashCode 내부에서 다시 hashcode를 사용하여 주소를 찾으려는 맴버변수의 변수명을 key값으로 전달하여  (메소드=변수명 = key) = index(주소값)으로 불러옵니다.

<hashCode> 활용_ 재정의

  • Equals 매소드를 재정의 할때 함께 재정의 하여 사용하게 되는 경우가 높은 메소드가 Equals 입니다.
    • 예 ) student 의 name값을 비교할 경우 this의 name의 hash값을 리턴하도록 합니다.
      • 예) “0101”학번을 갖고 있는 학생의 각 과목의 이름과 성적을 합산하시오.
package TEST1;

public class EqualsTest {
	public static void main(String[] args) {
		Student S1 = new Student(100, "정");
		Student S2 = new Student(100, "정");
		System.out.println(S1.equals(S2));
		System.out.println(S1.hashCode());
		System.out.println(S2.hashCode());
	}
}
package TEST1;

public class Student {
	private int studentNum;
	private String studentName;
	
	public Student(int studentNum , String studentName) {
		this.studentName = studentName;
		this.studentNum = studentNum;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return studentName + ":"+studentNum;
	}

	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Student) {
			Student S = (Student)obj;
			if(this.studentNum == S.studentNum) 
				return true;
			else return false;
		}
		return false;
	}

	@Override
	public int hashCode() {
		return studentNum;
	}
	
	
}
  • 그렇다면 hashCode로 특정 속성값을 불러오도록 재정의 해버린다면 . 그 속성을 갖고 있는 오브젝트의 hash값을 재정의 되기 이전 기능처럼 불러오는 방법은 무엇일까요?

주소란 무엇일까요?

  • 사실 여기에서 불러오는 integer타입의 hash코드는. 물리적인 주소가 아니라 JVM에서 관리되는 가상 주소 입니다.

단어 수집


 

에러 메세지


학습 시간

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

  - 학습 시간도 관리 해주는 온라인 독서실 

 

온라인 강의 주소

https://bit.ly/37BpXiC

추천합니다 . 👍

 

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

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

fastcampus.co.kr

 

02. Object 클래스의 메서드 활용


정리 해 봅시다 .😘

  • equal의 기능
    • "="은 주소에 담겨 있는 값을 비교. equal은 인스턴스의 주소를 비교.
  • 이 기능을 재정의 하여 인스턴스 내의 속성값을 비교하여 boolean값을 리턴하도록 변경함으로서 얻어지는 이점은 이렇습니다.
    • 특정 조건을 만족하는 맴버번수를 갖고있는 인스턴스를 검색할수 있습니다.
      • 예 ) 같은 이름값을 갖고 있는 학생의 점수 객체를 검색후 정리하여. 합산하거나 통합 데이터 작성


기초 1. 재정의 하는 방법

1. equals는 lang페키지의 object 클레스에 준비되어있고. 이 두가지는 기본적으로 로드되는 요소(정확히는 모든 클레스가 object를 상속받습니다)이기 때문에 임포트 하거나 상속하지 않고도 바로 재정의 하시면 됩니다.

2. instanceof로 this의 타입이 검색하려는 속성이 있는 대상의 타입과 일치하거나 상속관계인지 확인합니다.

3. 2번의 조건이 true일경우 상속관계일 경우를 대비하여 this를 대상의 타입으로 변환(업스캐일)시킨후 대상과 this의 비교하려는 값이 일치하는지 확인합니다. 

package TEST1;
class Human{
	private String name ;
	Human(String name){
		this.name = name;
	}
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Human) {
			Human H = (Human)obj;
			if(this.name == H.name)
				return true;
			else return false;
		}
		return false;
	}
	
	
}
public class TEST_A {
	public static void main(String[] args) {
		Human A = new Human("A");
		Human B = new Human("B");
		Human C = new Human("A");
				
		System.out.println(A.equals(B));
		System.out.println(A.equals(C));
				
	}
}

단어 수집


에러 메세지


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

  - 학습 시간도 관리 해주는 온라인 독서실 

 

온라인 강의 주소

https://bit.ly/37BpXiC

추천합니다 . 👍

 

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

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

fastcampus.co.kr

 

02. Object 클래스의 메서드 활용


정리 해 봅시다 .😘

Object Class에는 어떤 메서드 들이 들어 있는지 궁금하시죠?

  • 모든~! 클레스는 Object 클레스를 상속하고 있기 때문에(Object가 모든 클레스의 부모 입니다) Object클레스의 메소드는 공짜(아무런 조치를 취하지 않아도) 사용할수 있는 편리한 메소드들 이라는점에서 관심이 생기지 않으시나요? ^^

[ equals() ]

두개의 인스턴스의 주소값이 같을때 true값(boolean형)을 리턴 해요.

  • 여기에서 주소값이란 아래에서 hashCode로 얻어진 값을 가르켜요.(정확히는 주소값이 아니에요. 아래에서 자세히 설명)
  • 하지만 equal의 제정의를 통해서 주소가 다르더라도 내부의 값이 같은(논리적으로 동일 하다고 표현) 경우에도 true가 리턴되도록 변화 시켜놓고 사용하는 경우가 많아요.(아래 보너스 편에서 자세히 설명)
    • 재정의 방향 : 참조변수의 주소가 아니라 참조변수가 갖고 있는 맴버 변수간의 비교를 하게 만들면 됩니다.ㅎㅎ

[ hashCode() ]

  • system.out.println()으로 참조변수(배열,인스턴스,오브젝트)를 넣어서 출력하면 나오는 @뒤의 정체불명의 문자들이 이 메소드를 통해서 불려오는 JVM에서 관리하는 hash방식의 데이터 주소(위치) 이에요.
  • JVM에서는 주소값을 Key값(참조변수 명) = index값(hash타입)으로 저장하고 있어요.
    • 아참 . 물리적(메모리)인 실제 위치를 가리키는것은 아닙니다. 물리적인 위치는 컴파일 되서 돌아가면 알수 있는데 알수 있는 방법이 따로 있습니다.

보너스편

equals를 재정의하여 참조변수의 해쉬주소 다르더라도 내부의 값이 같은경우 true가 출력되도록 바꿔 볼까요 .^^

보너스로 만약 타입을 상속받는 ( 상속받은 클레스로 만들어진 인스턴스) 클레스 일 경우에도 내부의 속성은 같은 의미를 갖고 있기 때문에. 인스턴스의 기반이 상속관계(혈연관계?ㅎㅎ)일 경우에도 내부의 속성값을 비교할수 있도록 더 좋은 코드를 만들어 봅시다.

package test_a;

public class Test {

	String A;

	Test(String a){
		this.A=a; 
	}
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Test) {
			Test T = (Test)obj;
			if(this.A==T.A) 
				return true;
			else return false;
		}
		return false;
	}
	
}
package test_a;

public class TestTEst {
	public static void main(String[] args) {
		Test A = new Test("A");
		Test B = new Test("A");
		System.out.println(A.equals(B));
		
	}
}

 


단어 수집


 

에러 메세지


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

  - 학습 시간도 관리 해주는 온라인 독서실 

 

온라인 강의 주소

https://bit.ly/37BpXiC

추천합니다 . 👍  

 

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

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

fastcampus.co.kr

 

 

이클립스의 탭매뉴에서 window > preferences > editor > Content Assist

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=

1. 오라클의 공식 다운로드 페이지에서 페키지 탭을 선택합니다. ( 바로가기 )

2. 페키지 다운로드 영역에서 자신의 조건에 맞는 버전을 다운로드후 압축(ZIP)를 풀어주세요.

 

자세하게 들여다 볼까요?

이클립스내에는 플러그인으로 개발용 키트(JDK)와 실행용 환경JRE(+JVM)가 포함 되어 있습니다.

이클립스 외부에서 JAVA를 작동시키거나. 특정 하위 버전의 모든 기능을 온전히 사용하기 위해서는 오라클의 JAVA 아카이브 페이지에서 버전을 따로 다운받고. 이클립스에서 다운받은 버전의 폴더를 연결 해주시면 다른 버전에서 혹시나 생길수 있는 오류를 해결할수 있기도 합니다.

 

 

 


3:1:16 ~ 3:1:17


이론 정리

복습해 봅시다.

3쳅터에서 공부한 내용이 전부 접목되어 있는 좋은 소드 코드 입니다. ^^

새로운 느낌~!

  • 무려 다이아몬드의 화살표
  •  

질문하는데 시간을 소모하지 않고 일단 . 강의대로 받아들이자 ^^!

A에 B의 인스턴스를만드는것이지만. 화살표의 방향으로 인해 상속의 계념과 햇갈릴수 있지만 가리키는 대상이 반대로 A가 주어로 작동한다. 화살표의 방향 보다 마름모의 방향이 주어가 된다.

마름모의 내부가 검은색이면 생명주기가 같고. 비어있으면 연관이없다.

정확화게는 static 이나 final 등으로 static 메모리에 B의 인스턴스를 올렸을 경우에 해당한닥 볼수도 있겠다.

슈도 코드 방식의 암기결과 : 정상 작동

package TEST2;

public class AdvancedLevel extends PlayerLevel {

	@Override
	public void run() {
		System.out.println("빨리 달립니다");
		
	}

	@Override
	public void jump() {
		System.out.println("점프합니다");
		
	}

	@Override
	public void turn() {
		System.out.println("턴 하였습니다");
		
	}

	@Override
	public void showLevelMessage() {
		System.out.println("-------- 중급자 레벨 --------");
	}

}
package TEST2;

public class BeginnerLevel extends PlayerLevel {

	@Override
	public void run() {
		System.out.println("천천히 달립니다");
	}

	@Override
	public void jump() {
		System.out.println("점프할수 없습니다");
	}

	@Override
	public void turn() {
		System.out.println("턴 할수 없습니다");
	}

	@Override
	public void showLevelMessage() {
		System.out.println("-------- 초급자 레벨 --------");		
	}

	
}
package TEST2;

public class Mainboard {
/*
Player가 있고 Player는 PlayerLevel 속성을 가집니다. 각 PlayerLevel 단계 마다 run(), jump(), turn() 세 가지 기능이 업그레이드 됩니다.
초보자 레벨 : 천천히 달립니다. run() 만 가능
중급자 레벨 : 빠르게 달리고, 점프할 수 있습니다. run(), jump() 가능
고급자 레벨 : 엄청 빠르게 달리고, 높게 점프하고, 턴할 수 있습니다. run(), jump(), turn() 가능
Player는 한번에 하나의 레벨 상태만을 가질 수 있습니다.
Player가 play() 중에 레벨에 있는 go(int count) 라는 메서드를 호출하면 run() 하고 count 횟수 만큼 jump() 하고 turn() 합니다. 다음 클래스 다이어그램을 참고하여 각 레벨에서 go() 가 호출 될때 다음과 같이 출력 되도록 하세요
 * 
 * */
	public static void main(String[] args) {
		Player player = new Player();
		player.playerlevel.showLevelMessage();
		player.playerlevel.go(1);
		AdvancedLevel Alevel = new AdvancedLevel();
		player.upgradeLevel(Alevel);
		Alevel.go(2);
		SuperLevel Slevel = new SuperLevel();
		player.upgradeLevel(Slevel);
		Slevel.go(3);
		
	}
}
package TEST2;

public class Player {
	PlayerLevel playerlevel ; 
	Player(){
		playerlevel = new BeginnerLevel() ;
	}
	void upgradeLevel(PlayerLevel level) {
		this.playerlevel = level;
		level.showLevelMessage();
	}
}
package TEST2;

public abstract class PlayerLevel {
	public abstract void run();
	public abstract void jump();
	public abstract void turn();
	public abstract void showLevelMessage();
	
	public void go(int count) {
		run();
		
		for (int i = 0; i < count; i++) {
			jump();			
		}
		
		turn();
		
		
	}
	
}
package TEST2;

public class SuperLevel extends PlayerLevel {

	@Override
	public void run() {
		System.out.println("아주 빠르게 달립니다");
		
	}

	@Override
	public void jump() {
		System.out.println("높이 점프 합니다");
		
	}

	@Override
	public void turn() {
		System.out.println("턴 하였습니다");
		
	}

	@Override
	public void showLevelMessage() {
		System.out.println("-------- 고급자 레벨 --------");
		
	}

}

인터페이스를 활용한 정책 프로그래밍

  1. 같은 메소드를 하위에서 필요에 따라 다르게 작동시키게 하는방법
  2. 상담원의 데이터가 어디있는지 명시가 되어있지 않다.
    1. 이런경우 이전 코드를 생각해보면. 단순히 콘솔아웃의 코드일경우가 있다.
  3. 고객의 데이터를 수기로 입력해서
  4. 여기에서 사용되는 3가지의 인터페이스를 활용하는 정책이 전부 스케듈링의 방식을 따르고 있기 때문에 좋은 복합적 이지만 재미있는 기회이다.
    1. RoundRobin(둥근 로빈): 시간 순서대로 일장한 양의 작업을 배분
    2. leastJob(리스트잡 :최소 작업) : 최소의 작업을 갖고있는 직원에게 배분
    3. PriorityAllocation(우선순위할당 방식) : 등급대 등급으로 배분

    새로운 문법

    int ch = System.in.read();
    • ch에는 정말 char타입의 한글자만 입력을 받을수 있다.

예제코드

package TEST3;

public class LeastJob implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("다음 작업 오라 오라 !YES!");
		
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("가장 잡업의 량이 적은 상담사에게 배분 됩니다.");
	}

}
package TEST3;

public class PriorityAllocation implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("다음 작업 오라 오라 !YES!");
		
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("우선순위배분 : 작업의 우선순위 등급에 맞는 프로세서(상담사)에게 배분됩니다");
	}
// 우선순위 할당
}
package TEST3;

public class RoundRobin implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("다음 작업 오라 오라 !YES!");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("시간순으로 일정하게 작업이 배분되는 순서대로 상담사에게 배분 되었습니다. ");
		
	}

}
package TEST3;

public interface Scheduler {
	void getNextCall();
	void sendCallToAgent();
}
package TEST3;

import java.io.IOException;

public class SchedulerTest {
	public static void main(String[] args) throws IOException {

		System.out.println("전화 상담원 할당 방식을 선택하세요");
		System.out.println("R : 한명씩 차례대로");
		System.out.println("L : 대기가 적은 상담원 우선");
		System.out.println("P : 우선순위가 높은 고객우선 숙련도 높은 상담원");
		
		int ch = System.in.read();
		Scheduler scheduler = null;
		
		if ( ch == 'R' || ch =='r') {
			scheduler = new RoundRobin();
		}
		else if ( ch == 'L' || ch =='l') {
			scheduler = new LeastJob();
		}
		else if ( ch == 'P' || ch =='p') {
			scheduler = new PriorityAllocation();
		}
		else {
			System.out.println("지원되지 않는 기능입니다.");
			return;
		}
		
		scheduler.getNextCall();
		scheduler.sendCallToAgent();
	}

}

이제 선생님께서 과제를 제출하시고 교육시키시는 시스템에 어느정도 익숙해진것 같다.


전문 용어


 

에러 메세지


 

 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


3:1:15 ~ 3:1:16 

공부할때 바로 복습을 한 학습정보가 장기기억으로 남을 가능성이 높다고 합니다^^

채계적으로 속도를 붙여서 공부한것을 복습하는 방법을 연구해보는것이 좋겠습니다.

학습할떄마다 속도가 붙지 않는 원인이 있습니다. 바로 언제나 궁금증이 폭발 한다는 점인데요.

이번 코드에서는 문법적인 부분은 이해하지만 구조적으로 왜 인터페이스와 클레스가 쓰일수 밖에 없었는지 같은 점들이 많은 궁금증을 갖게 합니다.

개인적으로 아직 소계되지 않은 내용에 대해서는 차근 차근 나중에 공부할수 있는 기회가 있다고 자신의 호기심을 다독이며 진행 해야 할것 같습니다 ^^

오늘부터 새로 도입한 방법은

키보드를 타이핑한 수와 . 시간을 재서 평균을 내는것입니다.


이론 정리

 

14 챕터 library코드 구조 해석.

현제 듣고 있는 강의의 class shelf에서 ArrayList A를 protected로 만드는데.

get set을 사용하지 않고 접근할수 있는것은 좋은데. 정보 은닉도 되면서 get set을 사용하지 않아도 된다면 매우 편하게 코딩할수 있겠다. 정확하진 않지만 더 궁금증을 해결하는데 시간을 낭비하지말고 우선은 이 코드의 형태로 코드작성법을 고착 시키고 진도를 나간후 천천히 공부할 기회가 찾아 올것을 기다리자.

  • BookShelf 는 인터페이스와 클레스를 상속받아서. 인스턴스로 객체 가 만들어 지면서 사용된다.
  • ArrayList의 자료가 비어있을때 remove를 하면 에러가 발생한다.
  • 메소드에 하위에서 구현될 메계변수의 데이터 타입까지 구현해야 한다.
  • 객체의 작동을 태스트 할때 객태TEST로 명명한다.
  • Shelf와 BookShelf의 관계에 대해서는 아직 잘 모르겠다. 그냥 BookShelf만 만들고 Queue를 상속받으면 해결되는것이지만 문법을 공부하기 위한 코드라고 이해하고 의미부여를 하지 말고 넘어가자.
  • 자료 구조 에서 큐로 만들어진 자료가 몇개가 있는지 나타낼때 큐가 몇개가 있다는 표현을 사용한다.
  • 왜 상위 인터페이스인 Queue 타입 참조변수에 BookShelf를 넣는걸까?
  • 아무튼 큐 타입 이니까 큐 타입으로 업스케일을 하는데. 질문이 가능하다면 당장 물어보고 싶지만. 이 교육 플랫폼에서 감히 학생이 교사에게 질문을 할수 있는 무료 강의에도 있는 기능이 없기 때문에 다음에 알수 있는 기회가 오기를 기다려야 겠다.

# 챕터 14 도서관 코드 암기용 복습

package TEST2;

public class BookShelf extends Shelf implements Queue {
	
	@Override
	public void enQueue(String BookName) {
		shelf.add(BookName);
	}

	@Override
	public String deQueue() {
		return shelf.remove(0);
	}
	
}
package TEST2;

public class BookShelfTest {
	public static void main(String[] args) {
		BookShelf bookshelf = new BookShelf();
		bookshelf.enQueue("백귀야행");
		bookshelf.enQueue("인간의증명");
		bookshelf.enQueue("우부메의 여름");
		bookshelf.enQueue("황혼색의 명영사");
		System.out.println(bookshelf.getCount());
		System.out.println(bookshelf.deQueue());
		System.out.println(bookshelf.deQueue());
		System.out.println(bookshelf.deQueue());
		System.out.println(bookshelf.deQueue());
		
	}
}
package TEST2;

public interface Queue {
	void enQueue(String Bookname);
	String deQueue();
}
package TEST2;

import java.util.ArrayList;

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

16 복습해 봅시다.

추상 클레스와 틈플릿 메소드의 활용

package TEST3;

public class SuperLevel extends PlayerLevel {

	@Override
	void run() {
		System.out.println("엄청 빠르게 달립니다.");
		
	}

	@Override
	void jump() {
		System.out.println("아주 높이jump 합니다.");
		
	}

	@Override
	void turn() {
		System.out.println("turn 합니다.");
		
	}

	@Override
	void showLevelMessage() {
		System.out.println("고급자 레벨 입니다.");
		
	}

}
package TEST3;

public class BeginnerLevel extends PlayerLevel {

	@Override
	void run() {
		System.out.println("천천히 달립니다.");
		
	}

	@Override
	void jump() {
			System.out.println("Jump 하지 못합니다.");
	}

	@Override
	void turn() {
		System.out.println("Turn 하지 못합니다.");
		
	}

	@Override
	void showLevelMessage() {
		System.out.println("초급자 레벨 입니다.");
		
	}

}
package TEST3;

public class MainBoard {
	public static void main(String[] args) {
		Player player = new Player();
		player.play(1);
		
		AdvancedLevel aLevel = new AdvancedLevel();
		player.upgradeLevel(aLevel);
		player.play(2);
		
		SuperLevel sLevel = new SuperLevel();
		player.upgradeLevel(sLevel);
		player.play(3);
	}
}
package TEST3;

public class Player {
	private PlayerLevel levelB;
	Player(){
		levelB = new BeginnerLevel();
		levelB.showLevelMessage();
	}
	public PlayerLevel getLevel(){
		return levelB;
	}
	public void upgradeLevel(PlayerLevel level){
		this.levelB = level;
		level.showLevelMessage();
	}
	public void play(int level) {
		levelB.go(level);
	};
}
package TEST3;

public abstract class PlayerLevel {

	abstract void run();
	abstract void jump();
	abstract void turn();
	abstract void showLevelMessage();
	
	
	
	
	final void go(int level) {	
		run();
		for (int i = 0; i < level; i++) {
			jump();
		}
		turn();
	}
	
}
package TEST3;

public class SuperLevel extends PlayerLevel {

	@Override
	void run() {
		System.out.println("엄청 빠르게 달립니다.");
		
	}

	@Override
	void jump() {
		System.out.println("아주 높이jump 합니다.");
		
	}

	@Override
	void turn() {
		System.out.println("turn 합니다.");
		
	}

	@Override
	void showLevelMessage() {
		System.out.println("고급자 레벨 입니다.");
		
	}

}

복습 & 실무적인 사용방법


전문 용어


 

에러 메세지


캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 

+ Recent posts