상수 (Constant) 란?
· 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미한다.
하지만 상수가 변수와 다른 점은 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다는 점이다.
· 상수는 선언과 동시에 초기화해야 한다.
· 상수는 대문자로 사용한다.
· 상수를 정의할 때 언더스코어(_)를 사용한다 ex)MAX_VALUE
· final static 키워드를 사용한다.(변수명, 클래스, 메소드 앞에 사용할 수 있다.)
(변수 앞에 사용했을 때는 변수에 저장되어있는 초기값을 변경할 수 없다.)
· static 키워드가 지정되었을 때는 메모리에 로드되고 프로그램이 종료될때까지 사용할 수 있다.
· 코드의 가독성을 위해 사용한다.
예] PI (3.141592)
[상수(Constant)에 대한 예제1]
· 일반적인 기본 자료형은 값을 선언 및 초기화하고 프로그램이 실행되는 동안에도 값을 변경할 수 있다.
· 하지만, final 키워드를 사용하게되면 변수를 초기화하고 난 후 값을 변경할 수 없다.
[상수(Constant)에 대한 예제2]
· final 키워드는 값을 변경할 수 없기때문에 반드시 선언과 동시에 값을 초기화 해야한다.
· static 키워드를 사용한 클래스 변수는 main() 메소드 안에서 사용할 수 없다.(main() 메소드 안에서 사용하게 되면
로컬(지역) 변수이기때문에 클래스 내에서 사용할 수 있는 클래스 변수는 메소드 밖에서 선언해야한다.
[상수(Constant)에 대한 예제3]
· Test 클래스와 Test1 가 있는데, Test 클래스에 final 키워드를 사용했다면, Test1 클래스에 상속을 할 수 없다.
(서브 클래스에서 슈퍼 클래스의 메소드를 오버라이딩하지 못하도록할 때, final 키워드를 사용할 수 있다.)
열거형 (Enum) 이란?
· Enumeration 의 앞 글자로 열거라는 의미를 갖는다.
· 컴퓨터 프로그래밍에서 열거형, 이넘, 팩터는 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.
· 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다.
· 일부 열거자 자료형은 언어에 기본 소속되어 있을 수 있다.
※ 예시
· 계절의 경우 봄, 여름, 가을, 겨울 4가지 계절로 고정된다.
(값이 고정될 때, enum 을 활용한다.)
※ 열거형 선언 방법
※ 열거형 사용
※ 열거형 상수간 비교
· == 연산자를 사용하여 비교할 수 있다.
· >, <로는 비교할 수 없지만, compareTo() 메소드로는 비교가 가능하다.
· switch ~ case 문의 수식에도 사용할 수 있다.
[Enum에 대한 예제1] Enum 생성 및 Enum 사용에 대한 예제
· Enum을 사용하려면 class를 생성하듯이 Enum을 생성해야한다.
· Enum을 사용하기 위한 봄, 여름, 가을, 겨울을 아우르는 클래스명인 Season을 생성한다.
· Enum에 선언된 토큰들은 모두 상수이며, 값의 수정은 불가하다.
· 열거형 사용은 열거형이름.상수;로 사용할 수 있다.
[Enum에 대한 예제2] 열거형을 Switch ~ case 문에 사용한 예제
· switch ~ case 문에도 열거형을 사용할 수 있다.
· 수식에 Enum에 선언해놓은 상수들 중 하나를 Season형 변수 s에 저장한다.
· 수식의 값과 일치하는 case 값의 실행문을 실행하고 break 문을 만나 조건문을 빠져나온다.
[Enum에 대한 예제3] 인스턴스 변수, 인스턴스 생성 및 값 지정에 대한 예제
· Enum은 인스턴수 변수에도 사용할 수 있다.
· main() 메소드에서 인스턴스를 생성할 때, 값은 Enum에 선언된 상수안에서 사용이 가능하다.
[Enum에 대한 예제4] Enum 메소드 - ordinal()
· index는 0번부터 시작하기때문에 Enum에 지정된 상수명 WINTER는 인덱스 3번이라는 것을 알 수 있다.
(SPRING, SUMMER, FALL, WINTER)
[Enum에 대한 예제5] Enum 메소드 - name()
· 열거형 클래스 내에 정의한 상수 내에서만 문자열을 리턴한다.
· 상수가 문자열이기때문에 그걸 받는 변수 name의 자료형은 String 클래스형이다.
[Enum에 대한 예제6] Enum 메소드 - valueOf()
· String 값을 enum에서 가져오고, 값이 없으면 java.lang.IllegalArgumentException 예외가 발생한다.
[Enum에 대한 예제7] Enum 메소드 - values()
· Enum 에 선언된 모든 상수를 저장한 열거형 타입의 배열을 리턴한다.
[Enum에 대한 예제8] Enum 원소 추가 속성 부여
1. Enum 타입은 열거형을 의미하는 특별한 형태의 클래스이기 때문에 일반 클래스와 같이 생성자가 존재해야 한다.
2. 열거형 생성자는 접근 제어자를 private 으로 지정해야 한다.
[Enum에 대한 예제8] Enum 원소 속성을 가져올 수 있다.
1. Enum 클래스 내에 getter를 생성하여 메소드로 상수의 속성을 가져올 수 있다.
2. (Enum)클래스명.(인스턴스)변수명으로 선언된 상수값을 가져올 수 있다.
제가 찾아 본 이넘과 상수 설명 중에 가장 이해하게 쉬웠어요! 감사합니다!