3:1:15

<구조>

  • class Shelf :
    • ArrayList<String> shelf : 문자를 입력받을수 있다.
    • getCount : 입력받은 문자의 수를 셀수 있다.
    • getshelf : 문자 arrayList를 전송한다.
  • 인터페이스 Queue :
    • void enQueue(String 데이터) : 입력된 데이터를 ArrayList에 순서대로 입력한다.
    • String deQueue() : arrayList의 0번쩨 자료를 삭제하고 . 리턴한다 .
  • BookShelf : Shelf 와 Queue를 상속받는다.
    • 책을 입력하고 . 책을 출력&삭제 할수 있다.
    이번학습에서 얻을수 있는 지식
  • [자바] Queue (자료구조)
  • 출력될때의 메소드명: deQueue
  • 입력할때의 메소드명: enQueue

 

  • [자바] ArrayList
  • 입력받고 있는 상황 getSize로 확인ArrayList<String> 참조변수
  • ArrayList는 private 일때 get으로 접근만 가능하다면 값도 변화시킬수 있다.
  • package TEST1;
    
    public class BookShelfTest {
    	public static void main(String[] args) {
    		BookShelf B = new BookShelf();
    		B.enQueue("월요일");
    		B.enQueue("화요일");
    		B.enQueue("수요일");
    		B.enQueue("목요일");
    		System.out.println(B.getCount());
    		System.out.println(B.deQueue());
    		System.out.println(B.deQueue());
    		System.out.println(B.deQueue());
    		System.out.println(B.deQueue());
    	}
    }
    
    package TEST1;
    
    public interface Queue {
    	void enQueue(String Book);
    	String deQueue();
    }
    
    package TEST1;
    
    import java.util.ArrayList;
    
    public class Shelf {
    	private ArrayList<String> shelf;
    	
    	public Shelf() {
    		shelf = new ArrayList<>();
    	}
    	
    	ArrayList<String> getshelf(){
    		return shelf;
    	}
    	void setshelf(ArrayList<String> shelf){
    		this.shelf = shelf;
    	}
    	int getCount() {
    		return shelf.size();
    	}
    }
    
  • package TEST1; public class BookShelf extends Shelf implements Queue { @Override public void enQueue(String Book) { getshelf().add(Book); } @Override public String deQueue() { return getshelf().remove(0); } }

전문 용어


 

에러 메세지


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


3:1:15

package TESTA;

public class Sub implements SuperA,SuperB {
	public void Do() {
		SuperB.super.Do();
	};
}
package TESTA;

public interface SuperA {
	default void Do() {
		System.out.println("SuperA");
	}
}
package TESTA;

public interface SuperB {
	default void Do() {
		System.out.println("SuperB");
	}
}
package TESTA;

public class Do {
	public static void main(String[] args) {
		Sub S = new Sub();
		S.Do();
		
		SuperA A = (SuperA)S;
		A.Do();
		A.DoA();
//		A.DoB();
		
		
	}
}

extends 뒤에 여러개가 있으면 그 여러개는 인터페이스라고 알수 있다,

인터페이스와 상속의 코드 연습형의 .완.성.형

[ 실전 ] 도서관 대여 프로그램을 만들어 봅시다 ^_^.

학습목표 : 클레스와 인터페이스를 같이 갈아 넣는 방법을 익히다.

이렇게 쓰다(아이 써) : extends SuperClass implement InterfaceClass : 앞에 익스텐즈를 쓰고 뒤에 임플리멘츠를 쓰다.

구동 목표 : 책이 순서대로 대여 되는 도서관 프로그램.

계념의 구조 : 책장에 반듯이 가장 왼쪽에 책을 넣고 가장 오른쪽으로 책을 꺼낼수 있다.

책을 꽃고 맨 앞의 책만 꺼낼수 있다. Queue 구조.

  1. Shelf(선반)을 상속 받아서 BookShelf로 기능을 “확장”하여 사용하고. Queue에는 기능이 있다.

코드의 구조 :

  1. 책의 정보를 저장할 공간이 shelf를 기반으로 ArrayList 구조로 구현 .
  2. Queue(큐) 인터페이스를 구현.
    1. Queue란 FIFO(First Input First Out)구조로 저장되는 방식 : 선입선출
      1. 선입선출이란 먼저 입력된 데이터가 먼저 출력되는것을 말합니다.(오래된 데이터부터 출력)
  3. Shelf 클래스를 상속 받고 Queue를 구현합니다.
package library_A;

public class BookShelf extends Shelf implements Queue {

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

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

	@Override
	public int getSize() {
		return getCount();
	}

}
package library_A;

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());
	}
}
package library_A;

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

import java.util.ArrayList;

public class Shelf {
	protected ArrayList<String> shelf ; // 상속을 받을수 있어요.
	
	public Shelf() {
		shelf = new ArrayList<String>();
		// 생성자에서 맴버변수를 초기화 하듯이 aarrayList를 초기화 하는게 좋습니다 ^_^.
	}
	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

 

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

 

 


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

인터페이스의 다양한 형태의 상속 + 상속지식UP 정리

다중 인터페이스를 구현하는 클레스

형태 :

사용예시: 

  • 기능을 풍부하게 만들기 위해서 프레임워크를 사용하다 보면 프레임워크 내의 인터페이스를 가지고 와서 구현하기 때문에. 다중 상속을 자주 사용하게 됩니다.
    • 기본적으로 인터페이스에는 구현 코드가 없기 때문에. 여러개의 인터페이스를 상속할수 있습니다.
  • 그렇다면 인터페이스가 아닌 일반 클레스는 왜 다중상속을 하지 못하게 했을까요?

다이아몬드 문제(Diamond Problem) : 다중상속을 할수 없는 이유.

기존의 자바는 기능을 풍부하게 만드는것보다 안전성을 높이는 방향으로 발전해 왔다면

최근에는 기능을 풍부하게 만드는 방향으로도 발전하고 있습니다.

(내 생각) 다양한 JVM에서 동일한 바이너리로 돌아가게 하기 위한 호환성이 자바의 지향점이였기 떄문이였을수도 있겠네요.

(내 착각) 인터페이스의 default 메소드는 재정의가 가능해서 다이아몬드 문제를 일으킬수 있을것 같은데. 인터페이스가 인터페이스를 상속받을수 있을까?

  • implement한 일반 클레스에서는 재정의할수 있지만. interface끼리는 extends밖에 할수 없으며 extends한 클레스에서는 default메소드를 재정의할수 없네요.

인터페이스의 상속

    1. 인터페이스들을 상속 하는 클레스subClass 에서 다중구현 방법 : implements classA, classB
      • interfaceA와 interfaceB에 같이 있는 default method를 subClass에서 사용하는 방법.
        • interFaceA(선택 하려는 인터페이스).super(자신의 클레스의).method();
      package TEST1;
      
      public class Do {
      	public static void main(String[] args) {
      		sub_A S = new sub_A();
      		S.method();
      		S.method_A();
      		S.method_B();
      	}
      }
      
      package TEST1;
      
      public interface interface_A {
      	default void method() {
      		 System.out.println("interface_A");
      	 }
      	void method_A();
      }
      
      package TEST1;
      
      public interface interface_B {
      	default void method() {
      		System.out.println("interface_B");
      	 }
      	void method_B();
      }
      

전문 용어


 

에러 메세지


학습 시간


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


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


이론 정리

어제 해결하지 못했던 정리

  1. 타 버전의 JDK를 선택하여 개발하는 방법.
  2. 자바의 버전별 순서. 버전별 차이점에 대해서 학습하기.

결과 : 성공

타 JDK로 개발하는 방법 : ( 직접 알아낸 방법이라. 다른 좋은 밥법이 있을지도 모릅니다)

  1. 오라클 사이트에서 운영하고 있는 자바 아카이브(구버전) 자료실에서 필요한 JDK버전을 다운받아 설치한다.
  2. CLASS 를 생성할때. JDK를 직접 선택하는 옵션을 선택설치한 타 버전의 파일을 자바에서 인식할수 있도록 JDK파일의 주소를 넣어 새로운 버전을 추가하고 버전을 선택한다.

TEST CODE

package TEST1;

public class Do {
	public static void main(String[] args) {
		Super.static_B();
//		Super.static_A(); private는 static 으로 해도 당연히 다른 클레스에서 사용할수 없습니다.
	}
}
package TEST1;

public class Sub implements Super {

}
package TEST1;

public interface Super {
	private void myMethod() {
		System.out.println("private method");
	}
		
	private void mystaticMethod() {
		System.out.println("private static method");
	}
	private static void static_A() {
		System.out.println("A");
	}
	static void static_B() {
		System.out.println("B");
	}

}
  • 재미있는점
    • 같은 인터페이스에서 메소드가 다른 메소드 내부에서 작동할때. 내부에서 작동 되야하는 메소드를 private static 메소드로 만들면. 메모리에 static이 먼저 탑제 되기 떄문에 이런 구조로 사용하는 강의의 예제가 편리하게 사용될수도 있을것 같다.

 

전문 용어


 

에러 메세지


학습 시간

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


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

<오늘의 목표>

어제 등장했던 아직까지 이숙하지 못한 명령어 들을 훌터보자.

<방법>

어제 정리한 블로그의 문서를 복습후 학습 시작


이론 정리

어제 등장했었던 명령어가 호출되는 순서 :

  1. 1) 파일을 검색 한다.
    1. 파일 이름을 인수로 보내면 참조 변수에 파일의 위치가 입력된다.
    2. 파일이 없으면 오류 FileNotFoundException가 출력되며. try로 오류대응을 하거나 , 처음에 NULL을 넣어서 NULL이 변하지 않으면 NULL일 경우의 조건식으로 처리하는 코드를 웹상에서 발견했다.
    3. fileinputstream 참조변수B = new fileinputstream(”파일이름”)
  2. 페어 구조(Key=Value)로 값이 입력될수 있는 영역을 갖고 있는 참조 변수와 인스턴스를 만든다.
    1. properties 참조변수A = new properties();
  3. 패어 구조를 입력 하기 위해 만들어진 공간에 file의 위치값를 입력해서 값을 불러와서 저장한다.
  • 참조변수A.load(참조변수B);
  1. key값을 넣어서 value값을 확인 한다.
  • String 참조변수C = 참조변수A.getProperty(”key 값”);

<CODE TEST>

파일 불러오기

  • fileinputstream을 사용하기 위해서 파일 이름을 인수로 보낼때. 파일이름에 프로젝트 루트 계층부터 파일 영역을 입력해 줘야한다.
    • 예로 들어 TEST(페키지)/A 일 경우 아래 코드와 같이 src/TEST/A파일 로 지정해주면 된다. 아니면 루트영역에 넣으면 파일이름만 입력하면 검색된다.
    package A_0217;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Properties;
    
    public class M {
    	public static void main(String[] args) throws IOException {
    		FileInputStream F = new FileInputStream("src/test/A");
    		Properties P = new Properties();
    		P.load(F);
    		System.out.println(P.getProperty("Key_A"));
    	}
    }
    
    Key_A=value_A
    

<14챕터>

모든 변수는static final이 붙는다. static 이 붙으면 하부에서 구현된 클레스들에서 오직 하나의 인스턴스에 접근할수 있게 막을수 있지만. 자바에서 단일상속만 기능한것 처럼. 모호성으로 인해 안전성이 낮아지는것을 막기위해 변수가 변하지 못하는 방법으로 사용됩니다.

자바 8 이후 부터 사용할수 있는 인터페이스 기능들

1) default method : 디폴트 메소드

default 키워드를 메소드 앞에 붙여서 구현하는 클레스들에서 반복적으로 구현해야하는 메소드를 인터페이스에서 기본적인 형태를 구현해 놓을수 있게 되었다.(필요에의해 implement한 클레스에서 재정의 할수 있다)

TEST 1 : default로 구현한 메소드는 구현하는 클레스에서 메소드를 정의하지 않아도 되는거?

태스트 결과 : YES

TEST 2 : default로 구현한 메소드는 구현하는 클레스에서 재정의(overide)할수 있는가?

태스트 결과 : YES

package TEST3;

public class Do {
	public static void main(String[] args) {
		Sub S = new Sub();
		S.method_A();
	}
}
package TEST3;

public class Sub implements Super {
	public void method_A() {
		System.out.println("SUB method");
	}
}
package TEST3;

public interface Super {
	default void method_A() {
		System.out.println("만약 이것이 보이신다면 오버라이드 되지 않는것입니다.");
	}
}

2) static method : 정적 메소드

default와 마찬가지로 구현하는 클레스들에서 반복적으로 구현해야하는 메소드를 미리 구현할수 있지만. 인터페이스 객체를 implement 하거나 인스턴스를 만들지 않아도 프로젝트 내에서는 어디서든 사용할수 있게 할수 있다.

package TEST4;

public class Do {
	public static void main(String[] args) {
		Super.method_A();
	}
}
package TEST4;

public class Sub implements Super {
	public void method_A() {
		System.out.println("SUB method");
	}
}
package TEST4;

public interface Super {
	static void method_A() {
		System.out.println("영차");
	}
}

자바 9 이후 부터 사용할수 있는 인터페이스 기능들

  1. private 메서드

구현한 클레스에서 재정의 불가능하다.

구현한 클레스에서 사용할수 없다. (진짜인지 테스트 코드 구현해보고 싶은에 이클립스 오류로 인해 연기하기로 함)

인터페이스 내부에서 static 이나 default를 사용하기 위해서 재공하는 메소드 이다.

  • 구현하는 클레스에서 사용하기 위한게 아닌. 인터페이스 내이서 사용하기 위한 기능이다.

이클립스에서 JDK의 다른 버전 선택에 대한 . 궁금증과 더불어 다음 정리에서 학습을 진행 하기로 하겠습니다.


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


13강 까지를 되돌아 보며,

<오늘의 목표>

  1. 13챕터까지 코드를 강의에 있는 대로 따라서 짜본다.
  2. 13챕터까지의 강의에서 소계된 새로운 기술들이 포함 되어있는 새로운 과제를 만들어서 코드를 작성한다.
  3. 인터페이스 강의가 2개정도 남았지만. 우선 이전의 기술을 어떻게 응용 할수 있는지에 대해서 고민하되 용도를 스스로 단정짖지 않는다.
  4. 개발의 영어 단어를 노트에 1차 암기해본다. 
  5. 1~13강의 까지의 이전강의들을 훌터보고 아직 미숙하다고 생각하는 계념을 뽑아서 확인해본다.

이론 정리

<13강 - 코드 카피>

이어서 13챕터의 코드작성 정리 글을 작성하고 있습니다.

  • 인터페이스 타입의 참조변수를 만들고. 상황을 인지하여 그 상황에 대비된 클레스들중 하나로 인스턴스를 만들면 그 인스턴스의 값과 명령으로 작동되게 됩니다.
    • 이래서 인터페이스를 쓰는군요 ㄷㄷ
  • momain에서는 인터페이스와 구현을 클라이언트에서는 자신의 환경과 그 인터페이스의 환경에 따라서 인스턴스를 생성하는 일을 한다.

조건

  1. DOMAIN 과 WEB의 영역으로 나뉘고 기능 아래에 환경 아래 코드가 있었다.
  2. 일단 똑같은 코드를 않보고 짜보면서 . 이 코드를 이해해보자.
  3. 코드 카피 방법론의 순서를 정리한다.
    1. 구조를 파악한다
    2. 구조를 제작한다.
    3. 내부의 파일을 제작한다.
    4. 실행 파일을 만든다.

테스트

페키지를 만들때

페키지 이름을"A.B.C.D"로 하나를 만들었을때

1)A와 2)A.B 와 3)A.B.C와 4)A.B.C.D가 같이 만들어질까?

태스트 결과 : 맞다.

만약 domain에 포함된 userinfo에 포함된 DAO에 포함된 oracle패키지를 만들때. 한번에 만들수 있는 방법을 이용해서 java파일을 이렇게 만들면 페키지가 자동으로 생성될까?

태스트 결과 : 아니다.

 

class를 입력할때 페키지를 정학히 지정 해야 하기 때문.

개인적으로는 이번 소드 코드 구조를 학습 하면서 마크다운 문서 제작 경험이 도움이 되었는데.

이런 소스 코드의 구조를 마크다운 문서에 임포트 되는 여러가지 파일의 구조로 사용했었기 때문이다.

<않보고 코드 입력. 성공!ㄱ>

package domain.userinfo.dao.mysql;

import domain.userinfo.dao.UserInfoDao;

public class userinfoMySqlDao implements UserInfoDao {

	@Override
	public void Method_A() {
		System.out.println("MySQl method");
		
	}

}
package domain.userinfo.dao.oracle;

import domain.userinfo.dao.UserInfoDao;

public class userInfoOracleDao implements UserInfoDao {

	@Override
	public void Method_A() {
		System.out.println("Oracle method");
	}

}
package domain.userinfo.dao;

public interface UserInfoDao {
	void Method_A();
}
package web.userInfo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import domain.userinfo.dao.UserInfoDao;
import domain.userinfo.dao.mysql.userinfoMySqlDao;
import domain.userinfo.dao.oracle.userInfoOracleDao;

public class UserInfoClient {
	public static void main(String[] args) throws IOException {
		FileInputStream FS = new FileInputStream("db.properties");
		Properties Pp = new Properties();
		Pp.load(FS);
		String DBtype = Pp.getProperty("DB");
//		System.out.println(DBtype);
		UserInfoDao userinfoDao = null;
		if(DBtype.equals("ORACLE")) {
			userinfoDao =new userInfoOracleDao();
		}else if(DBtype.equals("MYSQL")) {
			userinfoDao = new userinfoMySqlDao();
		}else {
			System.out.println("DB Type ERROR");
		}
		userinfoDao.Method_A();
	}
}
DB=ORACLE

어느정도 암기 완료 ^^;.. 아직까지 익숙하지 못한 명령어 정리 :

fileinputstream 참조변수B = new fileinputstream(”파일이름”)

properties 참조변수A = new properties();

참조변수A.load(참조변수B);

String 참조변수C = 참조변수A.getProperty(”값”);

파일에는 “”제외하고 값만 넣는다.

만 기억하면 될것 같다.


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


3:1:01 ~ 3:1:13

<인터페이스의 다형성>

하위 객체들에서 구현해야 하는 기능을 정리해 놓은것 ( 강제적인 규정임 )

주의: 이번 챕터의 내용은 읽는 분들을 위해 정리 되어 있는게 아닌. 제가 모르는 것 위조로 정리 해 놓았기 때문에. 읽다보면 맨탈이 위험 합니다 ^ω^! 

 

오류 : UserInfo cannot be resolved to a type :참조하려는 값이 같은 페키지가 아니기 때문에 . 오류가 발생함.

해결책 : import로 해당값이 있는 객체를 넣는다. 

 

DAO파일작성법

  • 접근하려는객채+접근하려는DB형태+Dao
  • 인터페이스를 구현하는 dao 라서 그런지 모르겠지만 구현하려는 DB형태의 페키지를 만들고 내부에 Dao작성함. 상위 클레스에 인터페이스 가 있는셈이다.
  • 이클립스에서는 인터페이스 파일 위에 i라는 글자 라는 벳지가 있다.
  • 인터페이스를 구현하는 객체에서 구현하지 않는 메소드가 있으면
  • The type UserInfoMySqlDao must implement the inherited abstract method userInfoDao.deleteUserInfo(UserInfo) 이라는 에러가 뜬다.
  • 에러가 뜨는 대상에게 ctrl+1을 선택하면
  • 어떤 메소드가 부족한지 코드 계층으로 표시 해준다.

 

  • protected는 상속관게 뿐만 아니라 다른 페키지에서 인스트된 된 객체에도 통한다.
  • MySQl DB로 userID를 보낸다 : insert into MySql DB userId
  • 파일 IO를 사용하기 위해 파일명으로 파일을 탐색하게 할때. 가장 먼서 프로젝트의 폴더 루트 영역부터 찾기 때문에 속도를 줄일떄는 루트 공간에 넣으면 좋다고 한다
  • 파일 IO
    1. FileInputStream 참조변수명A = new FileInputStream("파일명.확장자");
    2. import java.io.FileinputStream;
    3. import java.FileNotFoundException; →1번 타이핑후 빨간줄에서 쓰로우 선택. 1.
    4. properties 참조변수명B = new properties();
      1. 파일에 “값A”=”값B” 으로 페어로 입력되어 있는 값을 불러올수 있다.
      2. 값A는 key. 값B는 value 라고 하여 .key를 입력하면 value가 나온다.
    5. 참조변수명.load(참조변수명A)
      1. load코드의 빨간줄에서 throws 선택

package ch13.domain.userInfo.dao.mysql;

import ch13.domain.userInfo.UserInfo;
import ch13.domain.userInfo.dao.userInfoDao;

public class UserInfoMySqlDao implements userInfoDao {

	@Override
	public void insertUserInfo(UserInfo userInfo) {
		System.out.println("insert into MySQL DB userID = "+userInfo.getUserId());
	}

	@Override
	public void updateUserInfo(UserInfo userInfo) {
		System.out.println("update into MySQL DB userID = "+userInfo.getUserId());
		
	}

	@Override
	public void deleteUserInfo(UserInfo userInfo) {
		System.out.println("delete from MySQL DB userID = "+userInfo.getUserId());
	}

}
package ch13.domain.userInfo.dao.oracle;

import ch13.domain.userInfo.UserInfo;
import ch13.domain.userInfo.dao.userInfoDao;

public class UserInfoOracleDao implements userInfoDao {
	@Override
	public void insertUserInfo(UserInfo userInfo) {
		System.out.println("insert into Oracle DB userID = "+userInfo.getUserId());
	}

	@Override
	public void updateUserInfo(UserInfo userInfo) {
		System.out.println("update into Oracle DB userID = "+userInfo.getUserId());
		
	}

	@Override
	public void deleteUserInfo(UserInfo userInfo) {
		System.out.println("delete from Oracle DB userID = "+userInfo.getUserId());
	}
}
package ch13.domain.userInfo.dao;

import ch13.domain.userInfo.UserInfo;

public interface userInfoDao {
	void insertUserInfo(UserInfo userInfo);
	void updateUserInfo(UserInfo userInfo);
	void deleteUserInfo(UserInfo userInfo);
}
package ch13.domain.userInfo;

public class UserInfo {
	protected String userId;
	protected String password;
	protected String userName;
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}
package ch13.web.userInfo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import ch13.domain.userInfo.UserInfo;
import ch13.domain.userInfo.dao.userInfoDao;

public class UserInfoClient {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("db.properties");
		Properties prop = new Properties();
		prop.load(fis);
		String dbType= prop.getProperty("DBTYPE");
//		System.out.println(dbType);
		UserInfo userInfo = new UserInfo();
		userInfoDao userInfoDao = null; //why?
	}
}
DBTYPE=MYSQL

 


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

직장인인강, 직장인자기계발, 패스트캠퍼스, 패스트캠퍼스후기, 패캠챌린지, 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.강의


3:1:01 ~ 3:1:13

인터페이스의 다형성 구현 ( 코드작성 파트 )

<다형성을 언제 사용할까요?>

  1. 인터페이스의 메소드_A(배열을 정렬시키기)를 다양한 방향으로 하위 클레스마다 구현할수 있다.
    • 메소드A는 같은 기능을 정의하고 있지만 . 다양한 방법을 제공할수 있다.
    • 이런 방법을 strategy pattern(스트래티지 패턴)이라고 한다.

-

-

 

  1. 하나의 기능을 다양한 환경에서 작동 되도록 할수 있다.

<코드 구현을 해 봅시다.>

구현하려는 코드는 이런 코드 입니다.

필요한 사전 지식 : what is DAO + 인터페이스 다형성 + 파일 내용 읽기 + 소스 계층표현(source hierarchy)

  1. 파일(db.properties)에 저장되어있는 문자데이터로 DB종류를 인지하여 인터페이스를 구현한 하위 클래스 중에서 알맞은 클레스의 인스턴스를 생성해서 하위 클레스의 메소드를 작동 시킵니다.
    1. UserInfoWeb : DB의 종류, 명세가 저장되어 있는 영역입니다.
    2. UserInfoDao : DB에 사용자의 데이터를 넣고 뺴고 수정 할수 있습니다.
    3. UserInfoDao 하위 클레스 : DB의 종류를 인지하고 종류에 따라서 실행 시킵니다.
    4. db.properties : DB의 종류에 대한 내용만을 갖고 있는 파일 입니다.
    5. DB: 실제로는 만들지 않고 하위 클레스에서 콘솔로 메소드 입력결과를 출력합니다.
  2. 코드의 계층 구조는 이렇습니다

패키지 하이러키((source hierarchy) : 페키지 내의 코드를 파일 구조로 표현

하이러키 식으로 코드 계층 만드는 방법

# 페키지 생성 단축키: ctrl+N → pa;

  1. pakage 생성
  2. pakage.domain 생성
  3. pakage명.domain.userinfo 생성

결과


전문 용어


 

에러 메세지


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 

+ Recent posts