Java의 정석 인터페이스 그리고 내부 클래스

김민석·2026년 2월 25일

인터페이스

추상 메서드의 집합

  • 선언과 구현의 분리 가능
  • 추상메서드 + 상수

인터페이스 작성

interface 인터페이스 이름 {
	public static final 타입 상수이름 =;
    pbulic abstract 메서드이름(매개변수);
}

메서드 항상 public sbstract라서 생략해도 됨.

인터페이스 상속 - 다중상속도 가능

class는 단일 상속만 가능하지만 인터페이스는 다중 상속도 가능하다는 점

인터페이스 구현 - implements

구현하는 인터페이스의 추상 메서드 몸통을 만들어주기
상속이랑 비슷한 개념 인터페이스를 상속받는다 생각하면 될듯.

class Fighter implements Fightable {
	public void move(int x, int y)
    public void attack(int u)
}

이 경우 만약 인터페이스에 추상화 메서드가 더 많은 경우에 다 사용하지 않는다면
class 앞에 abstract를 붙여 추상화 클래스로 만들어줘야함.

인터페이스와 추상 클래스

  • 인터페이스 : 완전 미완성(최소한의 표준 제시)
  • 추상 클래스 : 일부 미완성
    인터페이스는 인스턴스 변수를 가질 수 없음.

인터페이스 장점

  • 개발 시간 단축. 구현과 사용을 동시에 할 수 있어서
  • 서로 관계 없는 클래스들을 관계 맺어주기가 가능함.
  • 공통 표준을 만드는 것 가능함.

관계없는 클래스 관계 맺어주기


위 사진과 같이 Unit에 자손으로 여러 클래스들이 있다. 그중에 오른쪽에 있는 3가지의 class만 repair 함수를 적용하려면 어떤 방법이 좋을까?? repair 함수에 Unit을 넣어주면 3가지 클래스 말고도 다 적용이 되기 때문에 인터페이스를 활용하여 만들 수 있음.

interface Repairable {
}

class SCV extends GroundUnit implements Repairable
class Tank extends GroundUnit implements Repairable
class Dropship extends AirUnit implements Repairable

위와 같이 interface를 새로 만들어 3가지의 클래스가 repairable 을 implements를 해주면 3가지 클래스는 공통점을 갖게됨. 즉 새로운 관계가 형성됨
3가지 클래스의 부모로도 볼 수 있음.

void repair(Repairable r) {
}

위와 같이 repair 함수를 만들어 Repairable 을 넣어주면 repairable을 구현한 클래스들만 접근할 수 있음. 즉 이렇게 구현하게 되면 원하는 Unit들만 repair 함수를 접근할 수 있게됨.

인터페이스 이해

  • 두 대상사이의 중간 역할.
  • 추상 메서드 집합
  • 변경에 유리한 설계가 가능함.


위 사진은 interace를 이용한 코드이다. A는 B를 모르지만 B의 메서드를 사용하고있다. interface I는 method라는 메서드를 가지고 있고 B는 I를 implements를 하고있다. 그래서 method 메서드를 구현함. 그것을 A 클래스에서 I를 배개변수로 받아 사용하면 A가 B의 메서드를 사용할 수 있음.
이러한 방법으로 구현할 경우 변경에 용이하며 개발속도가 빨라질 수 있음.
A는 B에서 C로 바껴도 모름. 즉 바껴도 상관이 없음. B와 C는 I를 구현하고 A는 I를 사용하기 떄문에 상관X

디폴트 메서드

인터페이스에는 추상 메서드만 사용이 가능한데 디폴트 메서드를 사용할 경우 몸통을 제공함.

interface I {
	void method();
	default void newMethod() {}
}
  • 여러 인터페이스의 디폴트 메서드 간의 충돌
    • 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야함.
  • 디폴트 메서드와 부모 클래스의 메서드 간의 충돌
    • 부모 클래스의 메서드가 상속되고, 디폴트 메서드는 무시됨.

내부 클래스

클래스 안에 선언된 클래스

  • 내부 클레스에서 외부 클래스에 쉽게 접근할 수 있음.
  • 코드의 복잡성 줄일 수 있음. (캡슐화)
  • 클래스 영역과 메서드 영역에 내부 클래스 선언 가능

클래스 멤버와 인스턴스 멤버

인스턴스 멤버는 클래스 멤버(static)을 항상 접근가능.
클래스 멤버는 인스턴스 멤버 접근 X
접근하려면 직접 생성해서 접근해서 사용해야함.

클래스(static) 메서드에서 인스턴스 변수 접근 불가. 클래스 변수만 접근 가능.
또한 내부 클래스에서 메서드의 상수만 접근이 가능함.

인스턴스 내부 클래스는 외부 클래스의 인스턴스에 종속되므로, 내부 클래스 객체를 생성하려면 먼저 외부 객체를 생성해야 한다.
반면 스태틱 내부 클래스는 외부 객체와 무관하므로, 외부 클래스의 인스턴스를 생성하지 않고 Outer.Inner 형태로 바로 객체를 생성할 수 있다.

익명 클래스 - 일회용 클래스

클래스의 정의와 객체 생성을 동시에함

profile
나만의 기록장

0개의 댓글