20220819 수업기록
1. Interface
인터페이스란 ? interface = inter(~사이 between) + face(대상)
한마디로 추상메서드의 집합이다 이것이 인터페이스의 본질.
+ 부수적으로 static메서드 , 상수, 디폴트메서드가있지만 그것은 핵심이아니다.
구현된것이 전혀 없는 미완성설계도, 껍데기 (모든 멤버의 접근제한자 키워드는 전부 public)
객체들 간에 변수들을 접근하려면 꼭! 메서드를 통해서 접근해야한다. (캡슐화)(필드 보호)
data를 메서드가 감싸고 있다.
interface의 역활
두 대상(객체)간의 '연결, 대화, 소통'을 돕는 '중간역활'을 한다
인터페이스의 역활을 이러하다. 예를들어 사람이 컴퓨터와 직접 소통을 한다면 기계언어를 배워야한다.
기계언어는 사람이 쓰는 언어가 아니라 숙지하기 어렵다. 그런데 컴퓨터언어를배웠는데 다른 컴퓨터2로 교체해야한다면?
다른 기계언어를 다시 배워야한다. 소통이 어려워진다는 얘기이다. 하지만 중간에 인터페이스가낀다면?
인터페이스가 중간에서 컴퓨터와 사람의 소통을 객체가 알아들을수있게 전달하며 두 객체가의 소통을 돕게된다.
객체A | 인터페이스 | 객체B |
사람 | 음료자판기 | 기계 |
사람 | OS / GUI / 예:윈도우 | 컴퓨터 |
사람 | 게임디바이스 | 기계 |
interface의 장점 1
인터페이스는 두객체간의 소통을 돕는 중간역활이다.
만약 인터페이스가없이 객체들끼리 소통하고 객체B를 객체C로 바뀌었을때
프로그래머는 객체A를 객체B에 맞게 작성한 코드를 객체C에 맞게끔 다시 수정해야한다.
인터페이스가없으면 객체변경할때 소통이어렵고 변경작업또한 어렵다.
하지만 인터페이스가 있다면 객체B가C로 바뀌어도
interface는변환되지않으니 변경에유리하며 소통과대화과 원할해지고 개발시간이 단축된다.
![]() |
![]() |
interface의 장점 2
껍데기: 선언(설계)와 알맹이 : 구현을 분리시킬수 있게한다.
인터페이스덕분에 알맹이가변경되도 껍데기는 안바꿀수있게된다(느슨한결합)
유연한 코드설계 가능
interface 없을때.
public class A{
void method1(B b){
b.method1
}
}
class B{
void method1(){
System.out.prinln("B class method1호출")
}
}
//B랑 연결되게 코드를 작성했던 Class A는 C와 연결되게끔 다시 코드수정을한다.
public class A{
void method1(C c){
c.method1
}
}
class C{
void method1(){
System.out.prinln("C class method1호출")
}
}
interface를 접목시킬때
public interface I{
void method1(I i){};
}
public class B implement I {
@Override
void method1(I i){
System.out.println("B method1호출");
}
}
class A{
public static void main(String[] args){
I i = new B();
i.method1
}
}
//interface 코드는 변환 되는것이 없다.
public interface I{
void method1(I i){};
}
public class C implement I {
@Override
void method1(I i){
System.out.println("C method1호출");
}
}
//A class는 B와 C를 인스턴트객체변환만하며 편하게 다른 메소드를 호출할수있다.
class A{
public static void main(String[] args){
I i = new C();
i.method1
}
}
interface의 장점 3
다양한언어들의 표준화가 가능하다.(JDBC - 인터페이스의 집합)
서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
추상calss 와 Interface
추상클래스 | 인터페이스 |
추상클래스는 일반클래스인데 추상메서드를 가지고 있다. | 추상메서드만 가지고 있지만 구현된것이없는 껍데기이다. |
생성자, 멤버변수,추상메서드를 가지고있다. | 추상메서드만 가지고있음 (부수적인건 중요하지x) |
객체를 만들수 없다. | 객체를 만들수없다 |
상속을통해서 만들어 사용한다. (추상클래스구현) 추상메서드를 완성하는것 (구현하는것) |
상속을통해서 만들어 사용한다. (인터페이스구현) 추상메서드를 완성하는것 (구현하는것) |
extends(상속) | implement (구현이라는뜻) |
Interface 생성하기
1. class선언이 아닌 interface로 입력해서 선언해야한다.
2. 인터페이스의 모든 멤버의 접근제한은 public 메소드는 전부 추상메서드
3. 마찬가지로 메소드는 public abstract 추상메소드 로 인식된다.
4. public static final 생략 가능 : 항상 인터페스의 필드는 예외가 없다면 public static final 상수 로 인식된다.
5. abstract 생략 가능 : 항상 인터페이스의 모든 멤버는 public이고 abstract니까 안써도 JVM에서 추상메서드로 인식함
public interface RemoteControl{
public static fianl int MAX_VOLUME = 10;
public static final int MIN_VOLUME = 0;
public abstract void turnOff();
public abstract void turnOn();
public abstract void SetVolume(int volume);
}
public interface RemoteControl{
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
void turnOff();
void turnOn();
void SetVolume(int volume);
}
Interface자식클래스 생성하기
1. 상속class와 다르게 interface는 implements키워드를 사용하여 상속받는다.
2. 추상메서드 하나만 구현한다면 그 구현클래스는 추상클래스로 선언해야함. (abstract class)
Interface를 return하는 method생성하기
인터페이스를 반환하는 데이터타입의 메소드는 무슨뜻이냐
인터페이스의 추상메소드를 구현한 클래스객체들을 반환한다는뜻이다~~
Annoymous Instance (익명객체)
Interface를 implement(상속)한 인스턴스를 의미하며 자식 class를 공식적으로 만들지 않고 1회성으로 사용할 자식클래스를 만들기를 원할 때 사용한다. Android mobile app프로그래밍에서 많이 사용한다.
Annoymous Instance 생성하기
1. 자동으로 생성된 블럭안에 추가적인 field선언과 메소드선언도 가능하다. this. 도 사용가능.
2. 단, 익명객체 안에서만 사용 가능하다.
public class Test{
public static void main(String[] args){
//interface를 implement한 익명객체생성선언
RemoteControl rc = new RemoteControl() {
//선언할때 이클립스에서 자동으로
//interface에 선언된 추상메소드구현코드가 생성됨
@Override
public void turnOn() {
// TODO Auto-generated method stub
}
@Override
public void turnOff() {
// TODO Auto-generated method stub
}
@Override
public void setVolume(int volume) {
// TODO Auto-generated method stub
}
};
}
}
default, static method
자바 1.8ver이후부터 추상메소드만 가능했던 interface에서 default, static method선언이 가능하게 되었음
1.Interface의 static method는 implement한 자식클래스라도 상속되어있지않음. (Override안됨)
1.기능적 공부일뿐 실무에서는 자주 사용하는 기능이 아님.
2. 실무에서 interface제작은 실무에서 많이안함 ( interface는 다른회사에 배포하는 파일이기떄문.?뭔소리)
interface 형변환
interface inheritance (인터페이스상속)
인터페이스의 조상은 Object가 최고조상이 아니다.(extends Object) 가아님.
인터페이스의 조상은 오직 인터페이스만 가능하다.
다중 상속이 가능하다 (추상메서드는 충돌해도 문제가 없다). extends interface1, interface2, .....
자바는 클래스끼리 단일상속을한다. 메서드의 충돌때문에 하지만 INTERFACE는 추상메서드집합체이기때문에 충돌의문제가없어서 다중상속가능