D+13::인터페이스/래퍼(Wrapper)클래스/오토박싱

Am.Vinch·2022년 7월 13일
0

202200713 Tue
프로젝트명 : InterfaceProject

  • 인터페이스

기능이 있는데, 기능의 내용은 없다.(커피자판기 버튼기능은 있지만 안에 내용은 잘 모른다.)
메소드가 있는데, 내용은 없다.
클래스와 동일한 방법으로 앞글자는 대문자로 이름짓는다.

(중요) 클래스와 인터페이스의 차이점
클래스의 구성요소 : 맴버변수, 매소드의 정의, 생성자
인터페이스 : 맴버변수x,생성자x,메소드의 정의(몸통(중괄호)은 없다)
인터페이스는 객체를 생성할 수 없다.생성자가 없기때문에 당연하다.
인터페이스는 설계도의 설계도.

public interface Printable {
	//int a;
	
	//public Printerabld(){}

	//출력기능의 메소드(내용이없는것을 출력함)
	 void print();
	// 소괄호만 있고 중괄호는 삭제한다. 세미콜론으로 마무리.
	//public 생략 가능.
	//인터페이스의 메소드 접근 제한자는 public만 올 수 있다.
	//생략하면 원래 default 이지만 인터페이스이기때문에 아니다. 
}
//Printable 인터페이스를 구현해서 MyPrinter 클래스를 만들겠다.
//인터페이스를 사용한다는 것은
//클래스를 만들 때 인터페이스에서 정의된 몸통이 없는 
//메소드를 다 구현하겠다는 의미이다.
public class MyPrinter implements Printable{

	@Override
	public void print() {//MyPrinter인터페이스에 있던 매소드 가져옴.
		// TODO Auto-generated method stub
		
	}

}

public class PrinterTest {
	public static void main(String[] args) {
//		Printable p = new Printable; //인터페이스는 객체를 생성할 수 없다.생성자가 없기때문에 당연하다.
		
		MyPrinter p1 = new MyPrinter();// 클래스는 객체생성 가능
		Printable p2 = new MyPrinter();// ***중요한 부분*** 앞으로 이렇게 만들 것!
	
	
	
	}
}


public class LgTv implements Tv {

	//	[1.자동방법]
	// lgTv 클릭 후 구현하기 클릭하면 자동완성
	
	@Override // 오버라이딩 할거니까 틀린거있는지 체크해라
	public void powerOn() {
		System.out.println("Lgtv - 전원을 켬");
		
	}

	@Override
	public void powerOff() {
		System.out.println("Lgtv - 전원을 끔");
		
	}

	@Override
	public void volumeUp() {
		System.out.println("Lgtv - 소리 올림");
		
	}

	@Override
	public void volumeDown() {
		System.out.println("Lgtv - 소리 내림");
		
	}
	
//     [2. 수동 방법]	
//	   -기능 만들기-
//		//전원을 켠다
//		public void turnOn() {
//			System.out.println("Lgtv - 전원을 켬");
//		}
//		//전원을 끈다
//		public void turnOff() {
//			System.out.println("Lgtv - 전원을 끔");
//		}
//		
//		//소리를 올린다
//		public void volumeUp() {
//			System.out.println("Lgtv - 소리 올림");
//		}
//		//소리를 내린다
//		public void volumeDown() {
//			System.out.println("Lgtv - 소리 내림");
//		}
}



public class SamsungTv implements Tv {
	
    // [2. 수동 방법]	
	// SamsungTv 클릭 후 구현하기 클릭하면 자동완성
	
	@Override // 오버라이딩 할거니까 틀린거있는지 체크해라
	public void powerOn() {
		System.out.println("삼성tv - 전원을 켬");
		
	}

	@Override
	public void powerOff() {
		System.out.println("삼성tv - 전원을 끔");
		
	}

	@Override
	public void volumeUp() {
		System.out.println("삼성tv - 소리 올림");
		
	}

	@Override
	public void volumeDown() {
		System.out.println("삼성tv - 소리 내림");
		
	}
	
//  [2. 수동 방법]	
//	//기능 만들기
//	//전원을 켠다
//	public void powerOn() {
//		System.out.println("삼성tv - 전원을 켬");
//	}
//	//전원을 끈다
//	public void powerOff() {
//		System.out.println("삼성tv - 전원을 끔");
//	}
//	
//	//소리를 올린다
//	public void soundUp() {
//		System.out.println("삼성tv - 소리 올림");
//	}
//	//소리를 내린다
//	public void soundDown() {
//		System.out.println("삼성tv - 소리 내림");
//	}
}


```java
public class TvUser {
	public static void main(String[] args) {
		//인터페이스형으로 객체를 만들 수 있다.
		//인터페이스를 구현한 클래스의 생성자를 호출해서 객체를 생성.
		Tv tv = new LgTv();//방법1 - 인터페이스형 (samsungtv 도 가능) 
		 LgTv tv1 = new LgTv();//방법2 - 일반적 클래스명

		tv.powerOn(); //Lgtv - 전원을 켬
		tv.volumeUp();//Lgtv - 소리 올림
		tv.volumeDown();//Lgtv - 소리 내림
		tv.powerOff();//Lgtv - 전원을 끔
		
//		<클래스 하나하나 모두 작성했을 때: 시간오래걸림&복잡>
//		>>>인터페이스를 사용하는 이유:클래스명만 바꾸면 간단함.
		
//		맨 처음 삼성티비 구매 후 기능 사용한다.
//		SamsungTv st = new SamsungTv();
//		st.powerOn();//삼성tv - 전원을 켬
//		st.soundUp();//삼성tv - 소리 올림
//		st.soundDown();//삼성tv - 소리 내림
//		st.powerOff();//삼성tv - 전원을 끔
//		
//		
//		//시간이 지나 삼성티비가 오래되어 엘쥐티비로 바꾸어 사용함.
//		LgTv tv = new LgTv();
//		tv.turnOn(); //Lgtv - 전원을 켬
//		tv.volumeUp();//Lgtv - 소리 올림
//		tv.volumeDown();//Lgtv - 소리 내림
//		tv.turnOff();//Lgtv - 전원을 끔
		
		
}
}
//앞으로 티비만들때마다 모두 다 적용되는 기능의 규약(인터페이스)을 만들자
public interface Tv {
	void powerOn();
	void powerOff();
	void volumeUp();
	void volumeDown();
}

<콘솔창>
Lgtv - 전원을 켬
Lgtv - 소리 올림
Lgtv - 소리 내림
Lgtv - 전원을 끔

///////////////////////////////////////

public class MyArray implements MyArrayUtil {

	@Override
	public double getTwoArrayAvg(int[] arr1, int[] arr2) {
		double sum1 = 0;
		double sum2 = 0;
		for (int i = 0; i< arr1.length; i++ ) {
			sum1 += arr1[i];
		}
		for (int j = 0; j< arr2.length; j++ ) {
			sum2 += arr2[j];
		}
		return (sum1 + sum2)/(double)(arr1.length+arr2.length);
	}

	@Override
	public boolean isEvenArray(int[] array) {
		int cnt =0;//홀수의 갯수
		for(int k = 0 ; k< array.length; k++){
			if(array[k] %2 == 1) {//홀수
				cnt++;
			}
		}
		
		//[방법 1] 삼항연산자 이용시
		return (cnt <0 ) ? false : true;
		
		//[방법 2] If문
//		if(cnt == array.length-1 ) {
//			return true;
//	    }
//		else {
//			return false;
//		}
	}
}

	

//해당 인터페이스를 구현하는 MyArray 클래스를 만들어서 
//메소드를 구현하시오.
public interface MyArrayUtil {
	//매개변수로 들어온 두 배열의 모든 요소의 평균을 리턴
	double getTwoArrayAvg(int [] arr1,int[]arr2);
	
	//매개변수로 들어온 배열의 모든 요소의 값이 
	//짝수면 true리턴, 그렇지 않으면 false리턴 
	boolean isEvenArray(int[] array);
}

public class MyArrayTest {

	public static void main(String[] args) {
		MyArray a = new MyArray();
//		MyArrayUtil a = new MyArray(); << 이것도 가능
		
		int[] arr1 = {1,2,3,4,5};
		int[] arr2 = {6,7,8,9,10};
		
		
		//자료형(실수) 맞추기
		double avg=  a.getTwoArrayAvg(arr1,arr2);
		System.out.println(avg);
		
		System.out.println();
		
		
		int[]aaa = {2,6,8,10};//true
		
		//자료형 주의
		boolean value = a.isEvenArray(arr1);
		System.out.println(value);
	}

}
  • 클래스형 자료형
package test;

public class PersonInfo {
	
	private String name;
	private int age;
	private String addr;
	
	//생성자
	public PersonInfo() {}

	//setInfo 메소드
	public void setInfo(String name, int age, String addr) {
		this.name = name;
		this.age = age;
		this.addr = addr;
	}
	
	
	public void displayInfo() {
		System.out.println("이름 : "+ name);
		System.out.println("주소 : "+ addr);
		System.out.println("나이 : "+ age);
	}

}
package test;

public class WorkInfo {

	private String company;
	private String dept;
	private int salary;
	
	public void setWorkInfo (String company, String dept, int salary) {
		this.company = company;
		this.dept = dept;
		this.salary = salary;
	}
	
	public void displayInfo() {
		System.out.println("회사명 : "+ company);
		System.out.println("부서명 : " +dept);
		System.out.println("급여 : "+ salary);
	}
}
package test;

public class Worker {
	//선언
	private PersonInfo personInfo;// 클래스형 자료형 사용
	private WorkInfo workInfo;// workInfo 클래스도 String처럼 클래스형 자료형이기때문에 기본값 null값으로 초기화.

	//매개변수 없는 생성자 생성.
	public Worker() {
		 personInfo = new PersonInfo();
		 workInfo = new WorkInfo();
	}
	
	//이름,나이,주소를 변경하는 메소드
	public void setInfo(String name, int age , String addr) {
		personInfo.setInfo(name, age, addr);
	}
	//회사명 부서명 급여 변경하는 메소드
	public void setWorkInfo(String company, String dept, int salary) {
		workInfo.setWorkInfo(company, dept, salary);
		
	}
	public void displayWorker() {
		personInfo.displayInfo();//이름 나이 주소 모두 출력함
		workInfo.displayInfo();//회사명 무서명 급여 모두 출력함.
	}
}
package test;

public class WorkerTest {
	public static void main(String[] args) {
		Worker w = new Worker();
		w.setInfo("홍길동", 30, " 울산시 " );
		w.setWorkInfo("삼성", "무선사업부", 1000);
		w.displayWorker();
	
	}
}

<콘솔창>
이름 : 홍길동
주소 :  울산시 
나이 : 30
회사명 : 삼성
부서명 : 무선사업부
급여 : 1000
profile
Dev.Vinch

0개의 댓글