
ItemDTO는 어떻게 만들어? 상품 Field를 만들어야 하는데 어떡하지?
-> 데이터베이스 모델링을 통해 '데이터베이스'를 먼저 설계한다.
우리 이제 데이터를 이렇게 저장할거야! -> 상품정보는 어떻게 저장하고 고객정보는 어떻게 저장하고...


전자정부 프레임 : 프레임을 비슷하게 유지하면서 성동구, 광진구 등 각 구청에 맞게 조금 수정하여 이용.
interface는 추상메소드의 기능만 정의되어 있고, 필요에 따라서 디폴트 메소드, 정적메소드도 이용할 수도 있다.(비교적 최근에 추가된 사항이라, 예전부터 만들었던 프로그램에는 거의 없다)

인터페이스 내에서 상수 값을 지정할 수도 있다.

인터페이스 내에서 디폴트 메소드도 선언할 수 있다.(잘 안씀)
아래와 같이 사용됨.

하나의 시스템에 동시에 접속을 하고 있다는 것은 close가 안된것이다.
아무리 큰 서버도 ex) 배틀그라운드(100명이 함께하는 게임)에는 200명 접속이 안되는 것이다. 프로그램이 끝나면 반드시 close를 해줘야 한다!
인터넷뱅킹도 close를 안하면 서버 접속자수가 점점 많아지다가 서버가 터진다.
지마켓도 sysout을 모르고 넣었다가 구매 행위가 이루어질 때 sysout이 계속 출력되어 서버가 터진다.

인터페이스 내에서 추상함수를 작성할 때, abstract가 생략되어 있는 것이다.
search기능을 넣고싶어. 어디다 넣어야지?
service interface에 넣을까? 그럼 다른 클래스들도 수정해야 하는데? Itemservice에 넣을까? 그럼 다형성 구현이 어려운데?

Itemservice에 함수 하나 추가.
기존처럼 service.search를 입력하면 안돼.

이렇게 변경하여 선언해줘야 .search를 쓸 수 있다.
그러나 service와 itemservice의 연결고리가 너무 단단해져서 교체하기가 힘들다. 다형성 구현이 어렵다.
이는 interface 뼈대를 구성하는 의미가 퇴색됨.

service 인터페이스에 search함수를 추가해볼까?


근데 이러면 service 인터페이스를 구현한 모든 클래스에 method추가를 해줘야 한다.
또 다른 방법을 해볼까?

그럼 search기능만 넣은 인터페이스를 추가로 만들어서

ItemService에서 인터페이스 두개를 임플리먼트 하여 만들고

App내에 추가로 선언하여 사용하게 된다.

편의성, 유지보수성, 확장성을 생각해서 어떤 방법을 쓸지 결정을 해야한다.(보통 3번을 많이 씀)
(Shape 인터페이스 예시)
Shape shape; shape = new rectangle;
= 인터페이스 변수; 변수 = 구현객체;
Shape shape = new rectangle;
= 인터페이스 변수 = 구현객체;
로 대입해주어야 한다.
rectangle shape = new rectangle로 선언을 하게 되면,
shape는 rectangle만 그릴 수 있는 그림판이 된다.

package remote;
public interface Remote {
public void turnOn();
public void turnOff();
}
package remote;
public class Tv implements Remote {
@Override
public void turnOn() {
System.out.println("turn on tv");
}
@Override
public void turnOff() {
System.out.println("turn off tv");
}
}
package remote;
public class Audio implements Remote{
@Override
public void turnOn() {
System.out.println("turn on audio");
}
@Override
public void turnOff() {
System.out.println("turn off audio");
}
}
package remote;
public class Human {
public static void main(String[] args) {
//Remote remote = null;//여기 뭐가 탑재되는지에 따라서 tv를 킬수도 있고, 오디오를 킬수도 있다. 다형성 구현 가능
Remote remote = new Tv();// Tv를 킬수도 있고 Audio를 킬수도 있다.
//Remote remote = new Audio();// 일일히 바꿔줘야 하잖아요 -> spring에서 바꾸는 것 구현 가능.
remote.turnOff();
remote.turnOn();
}
}
