기록해! 정리해!

자바 - TV 인터페이스 본문

JAVA

자바 - TV 인터페이스

zsuling 2022. 7. 7. 12:18

객체지향프로그램의 큰 틀을 연습해봅시다..

클래스 생성 사용 인터페이스 생성 사용

 

LG  / 삼성 ---->  회사 ----> TV

똑같은 기능을 만드는데 소스가 다 다름

회사 "얘들아, 이건 좀 아니지않냐? 우리 기준에 좀 맞춰줘"

기준 = 인터페이스

 

void 앞에 특별한 상황이 아니면 디폴트가 public이기 때문에 굳이 안써줘도 됨

 

[순서]

1. 각 기업의 소스 작성

2. 메인테스트 클래스 생성해서 출력

3. 인터페이스 생성

4. 각 기업의 소스, 메인테스트 수정

5. 빈팩토리 생성

6. 메인테스트 수정

7. arg 입력

 

1. LgTV 클래스 생성

package test0707;

public class LgTV {
  public LgTV(){
		System.out.println("LgTV 생성자");
	}
    public void powerOn () {
	    System.out.println("LgTV 전원을 켠다.");
  }
    public void powerOff() {
    	System.out.println("LgTV 전원을 끈다.");
    }
     public void volumeUp() {
    	System.out.println("LgTV 소리를 올린다.");
    }
    public void volumeDown() {
    	System.out.println("LgTV 소리를 내린다.");
    }
}

 

 

2. SamsungTV 클래스 생성

package test0707;

public class SamsungTV {

	public SamsungTV() {
		System.out.println("SamsungTV 생성자");
	}
	public void turnOn() {
		System.out.println("삼성 TV를 켜다.");
	}
	public void turnOff() {
		System.out.println("삼성 TV를 끄다.");
	}
    public void soundUp() {
		System.out.println("삼성TV 소리를 올린다.");
	}
	public void soundDown() {
		System.out.println("삼성TV 소리를 내린다.");
	}
}

3.  MainTest 클래스 생성해서 출력하기

package test0707;

public class MainTest {

	public static void main(String[] args) {
 /*
     LgTV tv = new LgTV();
     tv.powerOn();
     tv.volumeUp():
     tv.volumeDown();
     tv.powerOff();
   
 */
	
		SamsungTV tv = new SamsungTV();
	    tv.turnOn();
	    tv.soundUp();
	    tv.soundDown();
	    tv.turnOff();
	   
	}
}

4. Interface TV 생성하기

: 메소드를 정의하는 곳

: 매개변수 없다, 리턴값 없다(void니까)

package test0707;

public interface TV {
   void powerOn(); 
   void powerOff();
   void soundUp(); 
   void soundDown();
}

인터페이스에 있는 메소드는 무조건 다 사용해야함 (필수)

인터페이스메소드가 아닌 다른 메소드는 Lg나 삼성만의 고유 메소드 (추가)

 

implements 추가

메소드 추가

 

-LgTV

package test0707;

public class LgTV implements TV{
  public LgTV(){
		System.out.println("LgTV 생성자");
	}
    public void powerOn () {
	    System.out.println("LgTV 전원을 켠다.");
  }
    public void powerOff() {
    	System.out.println("LgTV 전원을 끈다.");
    }
   /* 
    public void volumeUp() {
    	System.out.println("LgTV 소리를 올린다.");
    }
    public void volumeDown() {
    	System.out.println("LgTV 소리를 내린다.");
    }
    */
	@Override
	public void soundUp() {
		System.out.println("LgTV 소리를 올린다.");
	}
	@Override
	public void soundDown() {
		System.out.println("LgTV 소리를 내린다.");
	}
}

-Samsung TV

package test0707;

public class SamsungTV implements TV {

	public SamsungTV() {
		System.out.println("SamsungTV 생성자");
	}
    /*
 	public void turnOn() {
		System.out.println("삼성TV를 켜다.");
	}
	public void turnOff() {
		System.out.println("삼성TV를 끄다.");
	}
	*/
	public void soundUp() {
		System.out.println("삼성TV 소리를 올린다.");
	}
	public void soundDown() {
		System.out.println("삼성TV 소리를 내린다.");
	}
	@Override
	public void powerOn() {
		System.out.println("삼성TV를 켜다.");		
	}
	@Override
	public void powerOff() {
		System.out.println("삼성TV를 끄다.");
		
	}
}

5. MainTest

부모의 형을 상속해서 사용 가능하다 

LgTV -> TV

package test0707;

public class MainTest {

	public static void main(String[] args) {

     //TV tv = new SamsungTV();
     TV tv = new LgTV();
     tv.powerOn();
     tv.soundUp();
     tv.soundDown();
     tv.powerOff();
   
	}
}

6. 디자인패턴(GoF) 싱글톤

 

객체를 리턴해주기위해서

BeanFactory 클래스 생성

package test0707;

public class BeanFactory {

  public Object getBean(String beanName){
	  if(beanName.equals("S")||beanName.equals("s")) {
		  return new SamsungTV();
	  }else if(beanName.equals("L")||beanName.equals("l")) {
		  return new LgTV();
	  }
	  
	return null; //if문 밖에있음
		
	}
}

 

7. MainTest

package test0707;

public class MainTest {

	public static void main(String[] args) {

     //TV tv = new SamsungTV();
     //TV tv = new LgTV();
		
		BeanFactory factory = new BeanFactory();
		//new SamsungTV나 new LgTV를 선택해서 리턴받을 수 있는 객체 생성
		//arg[0]는 외부에서 값을 넣겠다는 뜻
		TV tv =(TV) factory.getBean(args[0]); 
		//(object)를 (TV)로 강제형변환
   
     tv.powerOn();
     tv.soundUp();
     tv.soundDown();
     tv.powerOff();
   
	}
}

결과) 소스를 뜯을 필요없이 값만 입력하면 출력할 수 있게 되었다.

 

Comments