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