일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- java thread 예제
- 변수
- 디자인 패턴 예제
- Kotlin
- edittext 연결
- hilt error
- 안드로이드 스튜디오 커스텀 다이얼로그
- 안드로이드 디자인패턴
- 안드로이드 스튜디오 인터넷 연결 확인
- 안드로이드 스튜디오 style
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- 안드로이드 스튜디오 custom dialog
- 자바 스레드 예제
- LifeCycle
- recyclerview item recycle
- 아파치란
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- 이중for문 사용 안하기
- 리사이클러뷰 아이템 재사용
- dagger error
- 안드로이드 스튜디오 tts
- apache란
- 아파치 엔진엑스
- 다른 객체 리스트의 비교
- savedinstancestate
- Thread
- 객체지향 프로그래밍 5가지 원칙
- apache nginx
- AAC
- java
- Today
- Total
Sam Story
JAVA - 인터페이스 본문
오늘은 인터페이스에 대해 포스팅 해보려 한다.
객체 지향 프로그래밍의 추상화를 배우고 추상 클래스를 접해봤다면
그 다음 접해보는 것이 인터페이스(Interface) 일 것이다.
인터페이스는 간단히 말하자면 프로그램을 설계하고 조금 더 유연한 프로그램을 만드는 기법을 말한다.
인터페이스는 추상화와 상속과 더불어 다형성이라는 객체 지향의 특징을 구현하는 핵심이다.
인터페이스(Interface) 라는 용어는 꼭 자바(java)에만 있는 것이 아니다.
사용자가 기기를 쉽게 동작시키는데 도움을 주는 상호작용 시스템을 의미한다.
우리가 자주 사용하는 단어인 UI도 (User Interface)의 약자이다.
핸드폰으로 보는 화면도 인터페이스가 될 수 있고
컴퓨터로 보는 아이콘들도 인터페이스가 될 수 있다.
그렇기 때문에 우리가 별도로 프레임워크를 공부하지 않아도 이런 장치들을
편하게 이용할 수 있다.
왜 인터페이스를 사용해야 하는가?
우리가 반복되는 코드들을 줄이기 위해 for문 이나 while문을 사용하듯이,
인터페이스를 사용하는 목적은 설계상 이점을 위해 사용하는 클래스라고 말할수 있다.
설계 관점에서 프로그래밍을 할 때는 큰 틀을 볼 수 있어야 한다.
이유없는 설계는 없기 때문에 큰 틀이 있기에 이렇게 짜여져 있구나 하는 접근이 필요하다.
인터페이스 정의
인터페이스는 추상클래스와 마찬가지로 자체적으로는 인스턴스를 생성할 수 없다.
추상클래스가 상속을 통해 완성되듯이 인터페이스도 구현부를 만들어주는 클래스에 구현되어야 한다.
해당 클래스에 implements 키워드를 쓴 후에 구현할 인터페이스를 나열하면 된다.
인터페이스에 가장 큰 특징은 다중 상속이 가능하다는 것이다.
ex ) 자식클래스에 extends 와 implements는 동시에 가능하며
implements에 여러 인터페이스를 나열 할 수 있다.
인터페이스에서 정의할 수 있는건 4가지 이다.
Human Interface
public interface Human {
// 염색체 수 모든 인간은 46개의 염색체를 갖는다.
int CHROMOSOME_COUNT = 46; // 상수 (제공해주는 값만 참조 가능)
// 먹기 메서드
abstract void eat(); // 추상메서드 (틀 자체는 있고 추상메서드를 구현부에서 무조건 재구현 해야함)
// 말하기 메서드
default void speak() { // 기본메서드 (인터페이스에서 기본적으로 제공해주지만 재구현 가능)
System.out.println("사람은 말을 한다.");
}
// 숨쉬기 메서드
static void breath() { // 정적 메서드 (변하지 않는 공통된 동작을 정의)
System.out.println("사람은 숨을 쉰다.");
}
}
1. 상수 : 말 그대로 변하지 않는 상수이며 값을 변경할 수 없고 제공해주는 값만 참조 가능하다.
2. 추상메서드 : 메서드 틀만 제공하며 구현부에서 무조건 구현해야하는 메서드.
3. 기본메서드 : 인터페이스에서 제공해주는 메서드이며 필요하다면 override해서 수정 가능하다.
4. 정적메서드 : static을 사용해 객체를 생성하지 않아도 호출할 수 있는 정적메서드 이다.
이러한 인터페이스를 지난번 예제에 적용해보자.
Character class
public abstract class Character {
abstract void skill();
abstract void useItem();
}
만드는 게임이 온라인을 지원하게 되었고 새롭게 온라인 유저가 갖는
속성들이 필요하게 되었다고 가정해보자.
OnlineUser Interface
public interface OnlineUser {
void userInfo();
void payment();
void sendMessage(Character character);
}
온라인 유저 인터페이스를 만들어
온라인 유저만 이용할 수 있는 기능들을 인터페이스로 구현할 수 있다.
Character class
public abstract class Character implements OnlineUser {
// 상위 클래스에서 작성했지만 경우에 따라서
// Character class 를 상속받는 하위 클래스에서 작성 가능
@Override
public void userInfo() {
System.out.println("유저 정보를 받아옵니다.");
}
@Override
public void payment() {
System.out.println("결제 정보를 받아옵니다.");
}
abstract void skill();
abstract void useItem();
}
위 코드처럼 기존 추상클래스로 작성했기 때문에
인터페이스를 통해 간단히 확장할 수 있다.
인터페이스에 선언해놓은 메서드는 Character class를 상속받는
class가 있다면 무조건 구현부에서 구현을 해줘야한다.
이렇게 인터페이스를 사용하게 되면 클래스의 선언과 구현을 분리시킬 수 있다.
실제 구현에 굉장히 독립적인 프로그램을 작성하는것이 가능해진다.
또한 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음
개발자들에게 인터페이스를 구현하여 프로그램을 짜도록 하다 보면
보다 일관되고 정형화된 프로그램의 개발이 가능하다.
'JAVA' 카테고리의 다른 글
Java - JVM 메모리 구조 , Stack, Heap (1) | 2024.12.04 |
---|---|
JAVA - Stack (1) | 2024.11.30 |
JAVA - 추상클래스 (0) | 2024.11.21 |
JAVA - 의존 역전 원칙 (2) | 2024.10.20 |
JAVA - 인터페이스 분리 원칙 (1) | 2024.10.16 |