반응형
Java에서 파라미터로 여러 타입을 받을 수 있도록 설계하려면 다음과 같은 방법들을 사용할 수 있습니다. 각 방법은 특정 상황에 적합하므로, 필요에 따라 적절한 방법을 선택하세요.
1. Object
타입 사용
가장 단순한 방법은 파라미터 타입을 Object
로 선언하는 것입니다. 하지만 호출 시 적절한 타입으로 캐스팅해야 합니다.
public void processParameter(Object param) {
if (param instanceof String) {
System.out.println("Received a String: " + param);
} else if (param instanceof Integer) {
System.out.println("Received an Integer: " + param);
} else if (param instanceof List) {
System.out.println("Received a List: " + param);
} else {
System.out.println("Unknown type: " + param.getClass().getName());
}
}
호출:
processParameter("Hello");
processParameter(42);
processParameter(List.of("A", "B", "C"));
2. 제네릭 사용
제네릭을 사용하면 타입 안정성과 유연성을 동시에 확보할 수 있습니다.
public <T> void processParameter(T param) {
if (param instanceof String) {
System.out.println("Received a String: " + param);
} else if (param instanceof Integer) {
System.out.println("Received an Integer: " + param);
} else {
System.out.println("Unknown type: " + param.getClass().getName());
}
}
호출:
processParameter("Hello");
processParameter(42);
3. 가변 인자 (Varargs) 사용
가변 인자는 여러 값을 받을 수 있도록 설계된 문법입니다.
public void processParameters(Object... params) {
for (Object param : params) {
if (param instanceof String) {
System.out.println("String: " + param);
} else if (param instanceof Integer) {
System.out.println("Integer: " + param);
} else {
System.out.println("Unknown type: " + param.getClass().getName());
}
}
}
호출:
processParameters("Hello", 42, List.of("A", "B", "C"));
4. @SafeVarargs
와 제네릭 가변 인자 사용
제네릭과 가변 인자를 함께 사용할 수 있습니다.
@SafeVarargs
public final <T> void processParameters(T... params) {
for (T param : params) {
System.out.println("Type: " + param.getClass().getName() + ", Value: " + param);
}
}
호출:
processParameters("Hello", 42, List.of("A", "B", "C"));
5. 다형성 활용 (인터페이스 또는 부모 클래스)
공통된 부모 클래스나 인터페이스를 활용하여 여러 타입을 지원할 수 있습니다.
interface Processable {
void process();
}
class StringProcessor implements Processable {
private final String value;
public StringProcessor(String value) { this.value = value; }
@Override
public void process() {
System.out.println("Processing String: " + value);
}
}
class IntegerProcessor implements Processable {
private final Integer value;
public IntegerProcessor(Integer value) { this.value = value; }
@Override
public void process() {
System.out.println("Processing Integer: " + value);
}
}
public void process(Processable param) {
param.process();
}
호출:
process(new StringProcessor("Hello"));
process(new IntegerProcessor(42));
6. Record 또는 DTO 사용
다양한 타입의 값을 하나의 컨테이너로 묶어서 전달하는 방법입니다.
public record MultiTypeParam(String strValue, Integer intValue, List<String> listValue) {}
public void process(MultiTypeParam param) {
if (param.strValue() != null) {
System.out.println("String: " + param.strValue());
}
if (param.intValue() != null) {
System.out.println("Integer: " + param.intValue());
}
if (param.listValue() != null) {
System.out.println("List: " + param.listValue());
}
}
호출:
process(new MultiTypeParam("Hello", 42, List.of("A", "B", "C")));
요약
- 간단한 경우:
Object
또는Object...
. - 타입 안정성이 필요한 경우: 제네릭 사용.
- 다양한 처리 논리를 통합: 인터페이스 또는 다형성 활용.
- 구조화된 데이터: Record 또는 DTO.
어떤 방법을 선택할지는 애플리케이션의 요구사항과 코드의 복잡성에 따라 결정하면 됩니다.
반응형
'개발 > JAVA' 카테고리의 다른 글
Java 로그 설정과 사용법 완벽 가이드: 안정적인 로깅 시스템 구축하기 (0) | 2025.01.25 |
---|---|
Java 예외 처리 완벽 가이드: `try-catch`로 안정적인 프로그램 만들기 (0) | 2025.01.24 |
Java에서 Object의 특정타입인지 확인하기 (0) | 2025.01.16 |
Java로 파일들을 압축하여 다운로드 받을 수 있는 예제 (0) | 2025.01.14 |
특정 웹사이트를 내 웹사이트에 표시하기 (0) | 2025.01.06 |