Language/JAVA

JAVA 자바 활용 백엔드 개발 기초 연습 문제 - enum 문제

print(blue) 2024. 4. 25. 10:58
package enumtype;

enum Shoes {
	WALKING("워킹화"), RUNNING("런닝화"), TRACKING("트래킹화"), HIKING("등산화");
}

public class Quiz01 {

	public static void main(String[] args) {

		// field 에 저장된 값 
		System.out.println("<< 상수 출력 >>");
		
		// 서수(정수)
		System.out.println("\n<< 서수 출력 >>");
	}
}

 

enum 은 상수를 관리하기 위한 타입 !

 

WALKING 을 만들지만 ! 위킹화로 출력하기 위해

매개변수 1개를 받는 생성자를 받아야한다

상수값이니까 변경하지 않기 위해 final 로 해준다

private final String name; 

private Shoes(String name) {
    this.name = name;
}

 

하지만 외부에서 사용하고 싶으니까 getter 사용 !

public String getName() {
    return name;
}

 

그럼 생성자는 몇개 만들어졌을까 ? 4개 작성했으니 4개 ? 확인해보자

package enumtype;

enum Shoes {
	WALKING("워킹화"), RUNNING("런닝화"), TRACKING("트래킹화"), HIKING("등산화");
	
	private final String name;
	
	private Shoes(String name) {
		System.out.println("생성자 실행");
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
}

public class Quiz01 {

	public static void main(String[] args) {

		Shoes.values();
	}
}

# 실행 결과
생성자 실행
생성자 실행
생성자 실행
생성자 실행

 

그럼 이제 main() 에서 출력해보자

public class Quiz01 {

	public static void main(String[] args) {

		// field 에 저장된 값 
		System.out.println("<< 상수 출력 >>");
		System.out.println(Shoes.WALKING);
	}
}

# 실행 결과
<< 상수 출력 >>
WALKING

 

근데 우리는 WALKING 출력되는 걸 원하지 않고 워킹화 가 출력되게 하고 싶다

오버라이딩 해서 toString 해준다

package enumtype;

enum Shoes {
	WALKING("워킹화"), RUNNING("런닝화"), TRACKING("트래킹화"), HIKING("등산화");
	
	private final String name;
	
	private Shoes(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	@Override
	public String toString() { // toString 을 안하면 s.getName 에서 s 만 해도 됨
		return this.name;
	}
}

public class Quiz01 {

	public static void main(String[] args) {

		// field 에 저장된 값 
		System.out.println("<< 상수 출력 >>");
		System.out.println(Shoes.WALKING);
	}
}

# 실행 결과
<< 상수 출력 >>
WALKING

 

이제 for문 으로 돌려서 출력해보자

public class Quiz01 {

    public static void main(String[] args) {

        // field 에 저장된 값 
        System.out.println("<< 상수 출력 >>");
        for (Shoes s: Shoes.values()) {
            System.out.println(s);
        }
    }
}

 

 

서수도 비슷하게 하면 된다

enum 은 순서가 자동으로 부여가 된다

ordinal !!! 사용 !!!

public class Quiz01 {

    public static void main(String[] args) {
        // 서수(정수)
        System.out.println("\n<< 서수 출력 >>");
        for (Shoes s: Shoes.values()) {
            System.out.println(s.ordinal());
        }
    }
}

 

 

# 전체 코드

package enumtype;

enum Shoes {
    WALKING("워킹화"), RUNNING("런닝화"), TRACKING("트래킹화"), HIKING("등산화");

    private String name;

    private Shoes(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() { // toString 을 안하면 s.getName 에서 s 만 해도 됨
        return this.name;
    }
}

public class Quiz01 {

	public static void main(String[] args) {

		// field 에 저장된 값 
		System.out.println("<< 상수 출력 >>");
		for (Shoes s: Shoes.values()) {
			System.out.println(s.getName());
		}
		
		// 서수(정수)
		System.out.println("\n<< 서수 출력 >>");
		for (Shoes s: Shoes.values()) {
			System.out.println(s.ordinal());
		}
	}
}

# 실행 결과
<< 상수 출력 >>
워킹화
런닝화
트래킹화
등산화

<< 서수 출력 >>
0
1
2
3