Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 만화로보는3분철학
- 티스토리 야간모드
- nhn cloud
- 쿠버네티스
- 슬래시24
- Kubernetes
- Rectangle
- 클라우드입문자
- 클라우드기초교육
- 다크모드
- sts3
- 3분철학
- 거래소 운영시간
- 미국채권
- 원씽
- docker
- Mac m1
- m1 sts3 설치
- sm회사
- 코딩 특수문자
- 일상의행복
- si회사
- nhn_cloud_console
- spring mvc project
- 다국어 입력전환
- 만화철학
- 도커
- 쿠버네티스기초
- 성장마인드셋
- 교양철학
Archives
- Today
- Total
Good Morning
Java 인터페이스와 다형성 이해하기 본문
소개
Java 프로그래밍에서 인터페이스와 다형성은 객체 지향 설계의 핵심 개념입니다. 이 포스트에서는 간단한 예제를 통해 이 개념들을 살펴보고, 코드의 유연성과 확장성을 높이는 방법을 알아보겠습니다.
기본 예제
먼저, 인터페이스를 사용하지 않는 기본적인 코드 구조를 살펴봅시다:
class A {
public void method(C c) {
c.method();
}
}
class C {
public void method() {
System.out.println("C클래스의 메서드");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new C()); // A가 C를 사용(의존)
}
}
이 코드에서 클래스 A는 클래스 C에 직접적으로 의존하고 있습니다. 이는 코드의 유연성을 제한합니다.
인터페이스 도입
이제 인터페이스를 도입하여 코드를 개선해 봅시다:
interface I {
public void method();
}
class A {
public void method(I i) {
i.method();
}
}
class B implements I {
public void method() {
System.out.println("B클래스의 메서드");
}
}
class C implements I {
public void method() {
System.out.println("C클래스의 메서드");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new C()); // 또는 a.method(new B());
}
}
이 개선된 버전에서는:
I
인터페이스를 도입하여method()
를 선언합니다.- 클래스 A는 이제 특정 클래스 대신 인터페이스 I를 참조합니다.
- B와 C 클래스 모두 인터페이스 I를 구현합니다.
이 구조는 다음과 같은 이점을 제공합니다:
- 더 높은 유연성: A 클래스는 I 인터페이스를 구현하는 어떤 클래스와도 작동할 수 있습니다.
- 향상된 확장성: 새로운 클래스를 추가할 때 기존 코드를 수정할 필요가 없습니다.
- 느슨한 결합: 클래스 간의 의존성이 줄어듭니다.
다양한 구현 방식
a.method(new C());
를 대체할 수 있는 여러 방법이 있습니다:
- 객체 미리 생성:
C c = new C(); a.method(c);
- 익명 클래스 사용:
a.method(new I() { @Override public void method() { System.out.println("익명 클래스로 구현된 메서드"); } });
- 람다식 사용 (Java 8+):
a.method(() -> System.out.println("람다식으로 구현된 메서드"));
- 메서드 참조 사용 (Java 8+):
C c = new C(); a.method(c::method);
- 다형성을 활용한 다른 구현체 사용:
a.method(new B());
결론
인터페이스와 다형성을 활용하면 더 유연하고 확장 가능한 코드를 작성할 수 있습니다. 이는 소프트웨어의 유지보수성을 높이고, 새로운 기능을 쉽게 추가할 수 있게 해줍니다. Java 프로그래밍에서 이러한 개념들을 잘 이해하고 적용하는 것은 효과적인 객체 지향 설계의 핵심입니다.
'Back-End > Java' 카테고리의 다른 글
JPA Entity와 DTO: 깊이 있는 이해와 효과적인 사용법 (1) | 2024.10.01 |
---|---|
Java 내부 클래스 사용법과 최적화 방법 (2) | 2024.09.27 |
System.out.printf() 이해하기 (0) | 2024.08.27 |
윤년의 이해와 Java에서의 구현 (1) | 2024.08.26 |
Java에서 데이터베이스 CRUD 작업 테스트하기: 사용자 정보 업데이트 예제 (0) | 2024.08.07 |