일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스프링
- devpi
- entity
- kotlin
- jpa repository
- 코틀린
- 이메일 본인인증
- ispresent
- email api 구현
- 자바
- JPA
- map
- javamailsender
- 복합 키
- 오블완
- 토큰
- Token
- 티스토리챌린지
- Spring Boot
- string.repeat()
- 스프링 부트
- java
- @embededid
- mutablemap
- 널 허용
- 객체지향
- JPQL
- string?
- embededid
- Spring
- Today
- Total
DeveloPiano
[Java] 인터페이스(Interface)와 구현 클래스의 상속 관계 본문
자바에서 인터페이스와 클래스 간의 상속 관계는 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 이를 이해하면 더 효율적이고 유연한 코드를 작성할 수 있습니다. 이번 글에서는 인터페이스와 구현 클래스 간의 상속 관계를 예제를 통해 자세히 살펴보겠습니다.
인터페이스와 클래스의 기본 개념
인터페이스는 클래스가 구현해야 하는 메서드의 시그니처(메서드 이름, 반환 타입, 매개 변수 목록)를 정의합니다. 인터페이스는 메서드의 구체적인 구현은 포함하지 않으며, interface 키워드를 사용하여 정의합니다.
클래스는 인터페이스를 구현할 때 implements 키워드를 사용합니다. 인터페이스를 구현하는 클래스는 해당 인터페이스에 정의된 모든 메서드를 반드시 구현해야 합니다.
인터페이스 정의와 구현
먼저, 하나의 인터페이스를 정의해 보겠습니다. Animal 인터페이스입니다.
public interface Animal {
void makeSound();
}
Animal 인터페이스는 동물이 소리를 내는 makeSound() 메서드를 정의합니다.
인터페이스 구현
다음으로, Cat 클래스와 Animal 인터페이스를 구현하여 작성해 보겠습니다.
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow");
}
}
이 경우, Cat 클래스는 Animal 인터페이스에 정의된 makeSound() 메서드만 구현하면 됩니다.
다중 인터페이스 구현
자바에서는 한 클래스가 여러 개의 인터페이스를 구현할 수 있습니다. 이를 통해 클래스는 여러 가지 행동을 정의할 수 있습니다. 이제 Animal 인터페이스 외에 Pet 인터페이스를 추가로 정의해 보겠습니다.
인터페이스 정의
public interface Animal {
void makeSound();
}
public interface Pet extends Animal {
void play();
}
Pet 인터페이스는 Animal 인터페이스를 상속받고 play() 메서드를 정의합니다.
인터페이스 구현
Cat 클래스가 Pet 인터페이스를 구현하게 되면, Animal 인터페이스와 Pet 인터페이스에 정의된 모든 메서드를 구현해야 합니다.
public class Cat implements Pet {
@Override
public void makeSound() {
System.out.println("Meow");
}
@Override
public void play() {
System.out.println("Play with yarn");
}
}
이 경우, Cat 클래스는 makeSound() 메서드와 play() 메서드를 모두 구현해야 합니다.
Cat 클래스가 Animal 인터페이스만 구현하는 경우
Cat 클래스가 Animal 인터페이스만 구현하면 makeSound() 메서드만 사용할 수 있고, Pet 인터페이스에 정의된 play() 메서드는 사용할 수 없습니다.
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow");
}
// 'play()' 메서드는 구현할 필요가 없습니다.
}
이 경우, Cat 클래스는 makeSound() 메서드만 구현하게 되며, play() 메서드는 사용할 수 없습니다.
요약
- 인터페이스: 메서드의 시그니처를 정의하며, 구현은 포함하지 않습니다.
- 클래스: implements 키워드를 사용하여 인터페이스를 구현하고, 인터페이스에 정의된 모든 메서드를 구현해야 합니다.
- 다중 인터페이스 구현: 한 클래스가 여러 개의 인터페이스를 구현할 수 있습니다.
- 인터페이스 상속: 인터페이스는 다른 인터페이스를 상속받을 수 있으며, extends 키워드를 사용합니다.
결론
자바에서 인터페이스와 구현 클래스 간의 상속 관계를 이해하면 코드의 유연성과 재사용성을 크게 높일 수 있습니다. 인터페이스를 통해 메서드의 계약을 정의하고, 클래스를 통해 구체적인 구현을 제공함으로써 모듈화된 코드 작성을 실현할 수 있습니다. 이를 통해 유지보수가 용이하고 확장성이 뛰어난 소프트웨어를 개발할 수 있습니다.
위의 예시처럼 Cat 클래스가 Animal 인터페이스만 구현하면 makeSound() 메서드만 사용할 수 있지만, Pet 인터페이스를 구현하면 play() 메서드도 사용할 수 있습니다. 이러한 유연성 덕분에 필요에 따라 다양한 인터페이스를 조합하여 클래스를 설계할 수 있습니다.
'Develop > Java' 카테고리의 다른 글
[Java] JPA 엔티티 : 외래키 설정 vs ID 저장 방식 비교 (1) | 2024.08.03 |
---|---|
[Java] @RequiredArgsConstructor와 @NoArgsConstructor : 생성자를 자동으로 관리하는 방법 (0) | 2024.07.31 |
[Java] Getter와 Setter : 편리함 속의 함정 (0) | 2024.07.08 |
[Java] Service Implement 와 Interface를 사용하는 이유 (0) | 2024.06.29 |
[JAVA] 제네릭 메소드(Generic Method) (0) | 2024.05.19 |