본문 바로가기
백엔드/JAVA

JAVA 인터페이스

by SoonJae lee 2023. 3. 22.

인터페이스란?

JAVA에서 클래스들이 필수적으로 구현해야하는 추상 자료형이라고하며 객체의 사용방법을 가이드라인 해주는 것이라고 생각하면 된다.

인터페이스는 추상메소드와 상수만으로 이루어져있으며 일종의 알맹이 없이 껍데기만 존재하는 것이라고 보고있다.

인터페이스는 다중 상속처럼 사용할수 있는 기능을 가지고있고 구현소스를 생성할 수 없다. 또한 객체가 아니기 때문에 생성자를 사용하지 못하며 추상클래스처럼 메소드 오버라이딩이 필수로 이루어진다.

접근제어자 interface 인터페이스 이름{
    public static final 타입 상수이름 = 값;
    public abstract 반환타입 메소드이름(매개변수);
    ...
}

class 클래스이름 implements 인터페이스이름 {
    ...
}

위 코드에서 상수를 작성할때 final 이라는 키워드를 작성하는데 이는 데이터의 값 변경이 불가능한 변수라고 한다.

그아래 코드는 추상메소드로 이전시간에 배운 것과 같다.

인터페이스르 사용할 때에는 이전 상송할때 사용하는 extends를 사용하는 것이 아닌 implements를 사용한후 인터페이스이름을 작성하면 된다.

접근제어자 interface 인터페이스이름 {
    ...
}

접근제어자 class 클래스이름 {
    ...
}

class 클래스이름 extends 클래스이름 implements 인터페이스이름 {
    ...
}

동시사용으로 다중 상속과 같은 효과를 같는다고 설명했는데 먼저 인터페이스와 클래스가 있다면 맨아래 코드처럼 extends와 implements를 같이 사용하여 클래스를 상속받으면서 인터페이스의 내용도 가져올수 있게되는 것이다.

 

실습 해보기!

우선 앞서 설명한 인터페이스를 토대로 하나 만들었는데 School이라는 인터페이스를 만들고 그안에 상수로

학급을 뜻하는 MAX_CALSS 를 만들어 20을 할당해 주었고 또다른 상수인 MAX_PERSON_PER_CLASS는 학급당 학생수로 40을 할당해 주었다.

그리고 추상메소드인 printSchool()을 만들어 하나의 인터페이스를 구성했다.

이후 인터페이스르 받는 클래스 Student 하나를 만들어서 추상클래스인 printSchool을 재정의(오버라이딩)해주었고 이제 메인에서 객체를 만들어 printSchool과 상수들을 호출해 보았다

예상한 결과 그대로 잘 나온걸 확인할 수 있었다.

이제 다중상속처럼 사용하는 방법을 실습해 봤는데

위에서 설명한 방법대로 Person이라는 부모클래스를 상속받으며 인터페이스 School을 가져오는 다중상속형 클래스 Student2 를 만들었다 오버라이딩해줄 메소드가 있기 떄문에 printSchool()을 작성해주고 이번에 ZB가 아닌 ZIO로 변경해주었다. 그리고 생성자를 만들어 데이터를 받으면 부모클래스인 Person으로 넘기게 해주는 super를 작성했다.

이후 Main에서 객체를 만들어 name에 A라는 데이터를 넘겨주고 메소드를 호출했다.

부모클래스 뿐만 아니라 인터페이스도 끌어와서 사용하고 있기 때문에 printSchool 메소드를 호출할 수 있다.

 

간단한 Quiz 풀기

// 아래 GreenOrc 클래스와 NPCSystem, UserSystem 인터페이스를 이용하여
// OrkNPC1, OrkUser1 클래스를 만들어보세요.

이 문제는 게임프로그래밍에서 사용하는 방식을 약식으로 만든것을 사용하는데

추상클래스로 GreenOrc 가 존재하는데 게임요소들을 뜻하는 내용이 작성되어있다.

그리고 추상메소드로 반드시 구현해야 된다는 의미의 체력과 공격력 방어력을 뜻하는 메소드도 abstract으로 잡아놨다. 

두개의 인터페이스는 각각 npc와 user을 뜻한다는 의미의 내용을 담고있으며 추상메소드로 각각 2가지의 메소드를 담고있다. 이제 만들건 다중상속을 이용한 npcOrc 클래스 하나와 userOrc 클래스 하나를 먼저 만들어야하는데 지금껏 배웠던 내용을 따라서 만들면 되는 부분이라 어려움은 없었다.

다중상속을 받게 extends로 부모클래스를 상속받고 implements로 NPCSystem을 가져오게 만든후 앞서 설명한 추상메소드가 많을경우 하나하나 손으로 적기에는 시간이 오래걸리므로 마우스 우클륵을 통해 간편하게 모든 필수로 작성해야하는 메소드를 가져오는 방법을 사용해 만든후 필요한 내용을 작성했는데 실제 게임개발의 약식과정이지만 비슷하게 이루어진다고 해서 꽤나 재밌게 문제풀이를 진행한것 같다.

다음으로 만들건 OrkUser1을 만들건데

이전 방식과 동일하게 작성을 하면 되었고 다른점은 NPCOrc 보다 모든면에서 상승된 능력치나 파티시스템과 거래시스템을 간단하게 약식으로만 만들어 주었다 일단 이 Quiz의 본질은 지금배운 인터페이스에 익숙해지면서 이전시간에 배웠던 것들을 복습하는 의미로 quiz가 진행되므로 어려운 문제가 아니지만 나중에 도전해 보고싶은 게임개발과정을 약식으로나마 경험할수 있게 되어 정말 좋았다.

 

 

 

'백엔드 > JAVA' 카테고리의 다른 글

JAVA 입출력 #2  (0) 2023.03.26
JAVA 내부 클래스  (0) 2023.03.23
JAVA 추상 클래스  (0) 2023.03.22
JAVA 다형성  (0) 2023.03.21
JAVA 상속  (0) 2023.03.20

댓글