본문 바로가기
Java(17+) 문법/Java 기본

[Java] 제네릭/Enum

by cogito21_java 2025. 1. 22.
반응형

제네릭

Generic

- Java는 강타입 언어로 모든 변수와 메서드의 리턴값은 타입을 가짐

- 제네릭(generic): 클래스에서 사용할 타입을 바꿀 수 있게 하는 기능. 처음부터 타입을 지정하지 않고 클래스의 인스턴스를 생성하거나 인스턴스를 구현할 때 메서드에서 사용할 매개변수의 타입과 리턴 타입을 지정

- 제네릭은 하나의 값이 여러 다른 타입을 가질 수 있게 함

- 타입 매개변수<T>는 제네릭을 이용하는 클래스나 인터페이스를 인스턴스할 때 개발자가 지정하는 타입을 받는 특수한 매개변수. 타입 매개변수를 통해 전달받은 타입을 인터페이스나 클래스 메서드에서 사용. 주로 <T>와 같은 형태로 사용

- 내장 인터페이스와 클래스에서 제네릭 사용: List와 Map

+) 컬렉션 인터페이스는 Java에서 묶음을 다룰 때 사용하는 인터페이스 중 기본이 되는 것

- 일반적으로 사용하는 타입 매개 변수

더보기

일반적으로 사용하는 타입 매개 변수

타입 매개변수 설명
<T> 타입 매개변수의 일반적인 표현. Type의 약자로 어떤 타입이든 사용
<E> Element의 약자로 컬렉션 클래스에서 요소 타입을 나타내는데 사용
<K,V> Key와 Value의 약자로 Map과 관련된 타입을 나타내는데 사용. K는 맵의 key, V는 value의 타입을 나타냄
<N>
Number의 약자로 숫자 타입을 나타내는데 사용
<R> Result의 약자로 메서드의 반환 타입을 나타냄
<A> Array의 약자로 배열 타입을 나타냄

 

더보기

제네릭 선언

접근제어자 class GenericClassName<type> {
}

접근제어자 interface GenericInterfaceName<type> {
}

접근제어자 class GenericClassName<type1, type2, ...> {
}

접근제어자 interface GenericInterfaceName<type1, type2, ...> {
}

인터페이스에 제네릭 적용

public interface GenericInterface<T> { // 제네릭 인터페이스 선언
    T method(T param1, ...);
}

public class ClassName implements GenericInterface<type> { // 제네릭 인터페이스 구현
    @Override
    public type method(type param1, ...) {
        return value;
    }
}

public interface GenericInterface<T,S> { // 제네릭 인터페이스 선언
    T method(T param1, S param2, ...);
}

public class ClassName implements GenericInterface<type1, type2> { // 제네릭 인터페이스 구현
    @Override
    public type1 method(type1 param1, type2 param1 ...) {
        return value;
    }
}

클래스에 제네릭 적용

public class ClassName<T> {
    type T memVar;
    
    public type method(T param1, ...) {
        this.memVar = param1;
    }
}

ClassName<type> className = new ClassName<>();
className.method(arg1, ...);

제네릭 인터페이스 예시

더보기
public interface Calculator<T> {
    T calculate(T x, T y);
}

public class FloatCalculator implements Calculator<Float> {
    @Override
    public Float calculate(Float x, Float y) {
        return (float) x + y;
    }
}

public class IntegerCalculator implements Calculator<Integer> {
    @Override
    public Integer calculate(Integer x, Integer y) {
        return (int) x + y;
    }
}

public class CalculatorTest {
    public static void main(String[] args) {
        Calculator<Float> cf = new FloatCalculator();
        float fResult = cf.calculate(5.0f, 3.0f);
        System.out.println(fResult);
        
        Calculator<Integer> if = new IntegerCalculator();
        int fResult = if.calculate(5, 3);
        System.out.println(iResult); 
    }
}

 

제네릭 클래스 예시

더보기
public class

 


Enum

Enum

- enum은 열거 타입(enumeration type)을 나타내는 특별한 유형의 클래스. 가독성 있게 작성하는데 사용

- enum은 상수의 집합을 표현

- enum은 클래스 선언시 맨 앞글자를 대문자로 표기하고 타입을 지정하지 않고 각 타입의 값을 대문자로 작성

- 열거 타입은 선언 후 인스턴스화시키지 않고 바로 사용 가능. 주로 역할을 지정할 때 사용

더보기

enum 선언 및 접근

접근제어자 enum EnumName {
    CONSTVARNAME1, ...
}

EnumName.CONSTVARNAME1;

enum의 상수에 값 지정

접근제어자 enum EnumName {
    CONSTVARNAME1(value1), ...; // 세미콜론(;) 필수
    private final type var;
    
    EnumName(type param1) {
        this.var = param1;
    }
    public type getValue() {
        return var;
    }
}

switch 표현식에 enum 사용

EnumName e = EnumName.A;
type varName = switch (e) {
    case A -> 1;
    case B -> 2;
    case C -> 3;
};

enum 예시

더보기
public enum Days {
    MON, TUE, WED, THU, FRI, SAT, SUN
}

public static DaysTest {
    public static void main(String[] args) {
        System.out.println(Days.MON);
    }
}

enum 상수값 예시

더보기
public enum Levels {
    ONE(1), TWO(2), THREE(3), FOUR(4);
    private final int value;
    
    Levels(int value) {
        this.value = value;
    }
    
    public int getValue() {
        return value;
    }
}

public class LevelsTest {
    public static void main(String[] args) {
        System.out.println(Levels.THREE.getValue());
    }
}
반응형

'Java(17+) 문법 > Java 기본' 카테고리의 다른 글

[Java] 람다표현식  (0) 2025.01.22
[Java] 예외처리  (0) 2025.01.22
[Java] 클래스 - 생성자/상속/추상클래스  (0) 2025.01.21
[Java] 클래스 - 메서드  (0) 2025.01.21
[Java] 제어문  (0) 2025.01.21