일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker
- 클라우드기초교육
- 만화철학
- 쿠버네티스기초
- spring mvc project
- si회사
- 성장마인드셋
- 슬래시24
- nhn cloud
- sm회사
- m1 sts3 설치
- 만화로보는3분철학
- 티스토리 야간모드
- 원씽
- Rectangle
- 다국어 입력전환
- Kubernetes
- nhn_cloud_console
- Mac m1
- 코딩 특수문자
- 도커
- 거래소 운영시간
- 일상의행복
- 쿠버네티스
- 교양철학
- 클라우드입문자
- 3분철학
- 미국채권
- sts3
- 다크모드
- Today
- Total
Good Morning
Java 내부 클래스 사용법과 최적화 방법 본문
Java에서 내부 클래스(Inner Class)를 사용할 때 발생할 수 있는 문제와 그 해결 방법에 대해 알아보겠습니다. 특히 static
메서드에서 내부 클래스를 사용할 때 주의해야 할 점과 다양한 해결 방법을 살펴보겠습니다.
문제 상황
다음과 같은 코드가 있다고 가정해 봅시다:
public class Ex7_8 {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv1());
b.buy(new Computer());
System.out.println("현재 남은 돈은" + b.money +"만원입니다");
System.out.println("현재 보너스점수는" + b.bonusPoint +"점입니다");
}
class Product {
// ... (생략)
}
class Tv1 extends Product {
// ... (생략)
}
class Computer extends Product {
// ... (생략)
}
class Buyer {
// ... (생략)
}
}
이 코드는 컴파일 오류를 발생시킵니다. 그 이유는 static
메서드인 main
에서 non-static 내부 클래스의 인스턴스를 직접 생성하려고 했기 때문입니다.
해결 방법
이 문제를 해결하기 위한 세 가지 주요 방법이 있습니다:
1. 내부 클래스를 static으로 선언
public class Ex7_8 {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv1());
b.buy(new Computer());
// ... (생략)
}
static class Product {
// ... (생략)
}
static class Tv1 extends Product {
// ... (생략)
}
static class Computer extends Product {
// ... (생략)
}
static class Buyer {
// ... (생략)
}
}
이 방법의 장점은 간단하고 직관적이라는 것입니다. 단점은 내부 클래스가 외부 클래스의 non-static 멤버에 접근할 수 없다는 것입니다.
2. 외부 클래스의 인스턴스를 통해 내부 클래스 생성
public class Ex7_8 {
public static void main(String[] args) {
Ex7_8 ex = new Ex7_8();
Buyer b = ex.new Buyer();
b.buy(ex.new Tv1());
b.buy(ex.new Computer());
// ... (생략)
}
class Product {
// ... (생략)
}
class Tv1 extends Product {
// ... (생략)
}
class Computer extends Product {
// ... (생략)
}
class Buyer {
// ... (생략)
}
}
이 방법의 장점은 내부 클래스가 외부 클래스의 모든 멤버에 접근할 수 있다는 것입니다. 단점은 코드가 약간 더 복잡해진다는 것입니다.
3. 내부 클래스를 외부로 이동
이 방법은 각 클래스를 독립적인 파일로 분리하는 것입니다.
// Ex7_8.java
public class Ex7_8 {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv1());
b.buy(new Computer());
// ... (생략)
}
}
// Product.java
public class Product {
// ... (생략)
}
// Tv1.java
public class Tv1 extends Product {
// ... (생략)
}
// Computer.java
public class Computer extends Product {
// ... (생략)
}
// Buyer.java
public class Buyer {
// ... (생략)
}
이 방법의 장점은 코드 구조가 명확해지고, 각 클래스의 재사용성과 유지보수성이 향상된다는 것입니다.
결론
각 방법에는 장단점이 있으며, 상황에 따라 적절한 방법을 선택해야 합니다. 일반적으로 실제 프로젝트에서는 세 번째 방법(클래스 분리)이 가장 좋은 선택일 수 있습니다. 하지만 학습 단계나 간단한 예제에서는 첫 번째나 두 번째 방법도 충분히 유용할 수 있습니다.
코드의 목적, 프로젝트의 규모, 팀의 코딩 스타일 등을 고려하여 가장 적합한 방법을 선택하는 것이 중요합니다. 어떤 방법을 선택하든, 코드의 가독성과 유지보수성을 항상 염두에 두어야 합니다.
'Back-End > Java' 카테고리의 다른 글
JPA Entity와 DTO: 깊이 있는 이해와 효과적인 사용법 (1) | 2024.10.01 |
---|---|
Java 인터페이스와 다형성 이해하기 (1) | 2024.09.28 |
System.out.printf() 이해하기 (0) | 2024.08.27 |
윤년의 이해와 Java에서의 구현 (1) | 2024.08.26 |
Java에서 데이터베이스 CRUD 작업 테스트하기: 사용자 정보 업데이트 예제 (0) | 2024.08.07 |