728x90

Obj. 자바의 패키지에 대해 학습.

Todo.

8-1. 인터페이스 정의하는 방법

8-2. 인터페이스 구현하는 방법

8-3. 인터페이스 래퍼런스를 통해 구현체를 사용하는 방법

8-4. 인터페이스 상속

8-5. 인터페이스의 기본 메소드(Default Method), 자바 8

8-6. 인터페이스의 static 메소드, 자바 8

8-7. 인터페이스의 private 메소드, 자바 9


8-1. 인터페이스 정의하는 방법

인터페이스란? 자바는 클래스를 하나만 상속이 가능한 특성이 있어서 이는 객체 지향 프로그래밍의 큰 제약이 된다. 인터페이스는 추상 메서드의 집합이라고 할 수 있다.  

  • 모든 메서드는 추상적이다.
  • 공용API를 정의하기 때문에 암시적으로 public을 생략하는 것이 일반적.
  • 인스턴스 필드를 정의할 수 없다.
  • 생성자가 필요 없다.
  • 중첩될 수 없음
  • java 8 부터 static, default 메소드를 정의할 수 있다.
  • java 9 부터 private 메소드를 정의할 수 있다.

추상 클래스와 인터페이스의 차이

자기 자신을 객체화 할 수 없으며 다른 객체가 상속(extends), 구현(implements)를 하여 객체를 생성하며, 하위 클래스에서 정의한 추상 매서드를 반드시 구현해야 한다.

단 추상 클래스는 일반 메소드를 포함할 수 있으며, 다중 상속이 불가능하고, 변수 필드를 포함할 수 있다.

하지만 인터페이스는 다중상속이 가능하며, 상수필드만 포함이 가능하다.

추상 클래스는  " is - a : ~는 ~이다"의 개념이고 인터페이스는 "has-a : ~는 ~할수 있다."의 개념이다.

 

인터페이스 사용 이유

1. 개발기간 단축 -> 각자 부분만 작선된 코드를 컴파일 할 수 있음

2. 클래스간 결합도 낮춤 -> 코드간 종속성을 줄이고 유지보수성 높임

3. 표준화가 가능하다.

public interface 인터페이스명{

	(public static final) 타입 상수;
    
    (public abstract) 타입 메서드명(매개변수, ...);
    
    }

8-2. 인터페이스 구현하는 방법

2가지 방법이 있다. implement 사용과 익명 구현 객체

public class 클래스 명 implements 인터페이스명{
	//추상 메소드 구현
    }
    
	인터페이스명 인터페이스 변수 = new 인터페이스명(){
    
    	// 추상 메소드 구현
        
        };

8-3. 인터페이스 래퍼런스를 통해 구현체를 사용하는 방법

인터페이스 타입의 참조 변수로 클래스의 인터페이스를 참조할 수 있고, 인터페이스 타입으로 형변환도 가능하다.

public interface Animal{
	void sound();
}

public class Dog implements Animal{
	
    @Override
    public void sound(){}
    
    public void eat(){}
}
public class Cat implements Animal{

	@Override
    public void sound(){}
    
    public void eat(){}
}
public class Main{
	
    private static void main(String[] args){
    Animal dog = new Dog();
    Animal cat = new Cat();
    
    dog.sound();
    cat.sound(); // 둘다 가능
    
    dog.eat();
    cat.eat(); // 둘 다 불가능, Anmial 인터페이스 인스턴스 이므로,
    
    ((Dog) dog).eat();
    ((Cat) cat).eat(); // 으로 캐스팅 가능
	}
}

8-4. 인터페이스 상속

인터페이스는 다중 상속이 가능하다.

8-5. 인터페이스의 기본 메소드(Default Method), 자바 8

디폴트 메소드 (Default Method) 는 인스턴스 메소드와 동일 하나, 그대로 사용 할 수 있으며, 필수로 재정의를 할 필요가 없다.

public interface Animal{
	dafault void sound(){
    		System.out.println("디폴트");
   	 }
}
public class Dog implement Animal{
    private static void main(String[] args){
    	Animal a = new Animal();
        a.sound();
        }
}

 

8-6. 인터페이스의 static 메소드, 자바 8

static 메소드는 이미 인터페이스 내에서 구현을 했지만, 구현 클래스에서 오버라이딩 할 수 없음.

8-7. 인터페이스의 private 메소드, 자바 9

다른 곳에서의 상속을 하거나, 접근하는 것을 막기 위해 private가 등장했음.

 

 

#Reference

blog.baesangwoo.dev/posts/java-livestudy-8week/

k3068.tistory.com/34

www.notion.so/4b0cf3f6ff7549adb2951e27519fc0e6

728x90

'Java > [Whiteship]자바스터디' 카테고리의 다른 글

10주차 과제 : 멀티쓰레드 프로그래밍  (0) 2021.01.27
9주차 과제 : 예외  (0) 2021.01.21
7주차 과제 : 패키지  (0) 2021.01.18
6주차 과제 : 상속  (0) 2021.01.17
5주차 과제 : 클래스  (0) 2021.01.09

+ Recent posts