Java 개념

final, Enum(열거형)

ron_nie 2023. 7. 3. 14:28
728x90

1. final

final은 저번에도 한번 상수의 타입이라고 글을 작성한 적 있다. 상수라는 것은 값이 변경이 되지 않는 값을 이야기한다.

1-1. 사용

클래스를 하나 만들어 준다.

public class ActionCam extends Camera {
    public final String lens; // = "광각렌즈"; 1. 선언과 할당 동시에 할 수도 있고 // 값을 못바꾸게 해놨음

    public ActionCam() {
        super("액션 카메라");
        lens = "광각렌즈"; // 2. 나중에 선언할 수도 있음
    }

    public final void makeVideo(){
        System.out.println(this.name + " : " +  this.lens + "로 촬영한 영상을 통해 멋진 비디오를 제작합니다.");
    }
}

코드를 보면 클래스 변수를 선언할 때 final을 붙인 것을 알고 있다. 이렇게 상수로 만들면 값을 변경 할 수없다.

변수를 선언할 때 같이 값을 넣을 수도 있고. 메소드안에 넣은 것 처럼 나중에 값을 설정 할 수도 있다. 이외에 상속 자체를 못하게 하고 싶으면 부모 클래스를 아예 final로 선언해버리면 된다.

2. 열거형(Enum)

2-1. 정의

열거형은 상수들의 묶음이다.

2-1. 종류

  1. 달력 (월)
  2. 옷 사이즈
  3. OS 종류
  4. 해상도
  5. ...

2-2. 사용법

2-2-1. 열거형 선언방법

enum Resolution {
    HD, FHD, UHD;
}

클래스를 선언할때 앞에 enum을 붙이면 된다. 

2-2-2. 사용예제들

예제 1

Resolution resolution = Resolution.HD; // 열거형을 만들어주는 방법
        System.out.println(resolution);

        resolution = Resolution.FHD;

        // ⭐️ 사용예제1 (switch case)
        switch (resolution) {
            case HD:
                System.out.println("일반화질");
                break;
            case FHD:
                System.out.println("고화질");
                break;
            case UHD:
                System.out.println("초고화질");
                break;
        }

switch case문으로 사용 가능하다.

 

예제 2

valueOf를 사용해서 UHD라는 문자열을 열거형으로 바꿔주고 그 값을 출력함

resolution = Resolution.valueOf("UHD");
System.out.println(resolution);

 

예제 3

열거형에 어떤 요소가 있는지 모를 때 

for (Resolution myRes : Resolution.values()){
                System.out.println(myRes.name() + " : " + myRes.ordinal()); // 각각 이름과 순서를 뽑는 것들.
            }

        System.out.println("--------------------------------");

        // 값 가져오기
        for (Resolution myRes : Resolution.values()){
            System.out.println(myRes.name() + " : " + myRes.getWidth());
        }

foreach를 사용해서 열거형 클래스의 요소들을 쫙 꺼내올 수 있다.

 

예제 4

이게 좀 중요한데 상수는 건들면 안되는 값이기 때문에 값을 미리 정해주는것이 좋다.

enum Resolution {
    HD(1280), FHD(1920), UHD(3840);

    // 열거형들이 각각의 값을 가지게 하고 싶을 때
    private final int width; // 변수
    
    Resolution(int width){ // 값 넣어주기
        this.width = width;
    }

    public int getWidth(){ // private로 설정했으니 getWidth로 값 넘겨주기
        return width;
    }
}

 

반응형