까마귀코딩.log
백기선 자바스터디 11주차 본문

<< 총 15주차 까지 진행되며 주어지는 키워드를 가지고 블로그에 정리하며 공부하는 스터디 입니다 ! >>
목표
인용의 나열형에 대해 알아내세요.
학습할 것 (필수)
- 열거형을 정의하는 방법
- 열거형이 제공되는 경우 (values()와 valueOf())
- java.lang.Enum
- 열거형 집합
열거형을 정의하는 방법 ( 이넘 정의하기 )
이넘 타입이란 뭘까 ?
관련이 있는 상수들을 묶어놓은것이다.
자바에서는 final 로 String 과 같은 문자열이나 숫자들을 나타내는 기본 자료형의 값을 고정할수 있다.
이렇게 고정된 값을 상수라고 한다 !
enum 으로 상수정의하기 !
열거형인 enum 은 서로 연관된 상수들의 집합이라고 할수 있습니다. !!
enum 생성자는 왜 private 인가요 ?
-> java에서 enum 타입은 열거형을 의미하는 특별한 클래스입니다.
그렇기 때문에 일반 클래스와 같이 생성자가 있어야 합니다.
물론 생성자를 만들어 주지 않아도 java가 default 생성자를 만들어 주긴하지만,
enum 의 경우에는 다른 클래스들과 달리 일반적으로 생성자의 접근제어자를 private으로 지정해야합니다.
enum 타입의 생성자를 접근제어자 일반클래스의 생성자와 같이 public 이나 protected로 하면 에러발생 !!!
어떤 에러가 발생 ?
이넘써서 좋은이유 ??
1. 문자열과 비교했을때, IDE의 적극적인 지원을 받을 수 있다 !
-ex) 자동완성, 오타검증, 텍스트리펙토링 등등
2. 허용가능한 값들을 제한할수 있다 !
3. 리팩토링시 변경범위가 최소화된다 !
-ex) 내용의 추가가 필요하더라도, enum코드 외에 수정할 필요가 없다 ~
자바의 Enum은 완전한 기능을 갖춘 클래스이다!
1. 데이터들간의 연관관계 표현
매일 배치돌면서 하나의 테이블에 있는 내용을 2개의 테이블에 등록하는 기능이 있다.
문제가 됐던것은 origin테이블 값은 "Y" , "N"인데
table1, table2는 "1"/"0", true/false 형태인것이다.
그러다보니 구 정산시스템에선 이를 분류하는 메소드를 만들어 사용해왔습니다.
기능상의 문제는 없지만, 몇가지 문제가 있었습니다.
"Y" , "1" , "true" 는 모두 같은 의미라는것을 알수 없습니다. !
그걸 확인하려면 항상 위에서 선언된 클래스와 메소드를 찾아야 함 !!!
불필요한 코드량이 많습니다.
위의 3개 이외에 R, S 등의 추가값이 필요한 경우 ??
if문을 포함한 메소드 단위로 코드가 증가하게 된다 !
동일한 타입의 값이 추가되는것에 비해 너무 많은 반복성 코드가 발생하게 됩니다 !
빨간색 네모부분에서 확인할수 있는것 ?
"Y" , "1" , "true" --> 한묶음이다.
"N", "O", "false" --> 한묶음이다.
추가 타입이 필요한 경우에도 Enum 상수와 get메소드만 추가하면 된다 !
(만약 lombok의 @Getter을 사용하신다면 Enum의 get 메소드까지 제거가 되어 더욱 깔끔한 코드가 됩니다.)
이를 사용하는 곳에서도 역시 깔끔하게 표현이 가능합니다
1. 코드가 단순해져서 가독성 조아저
2. 인스턴스 생성과 상속을 방지해 ! 그럼 상수값의 타입안정성이 보장돼.
3. enum class를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입이외의 타입을 가진 데이터값을 컴파일 할때 체크해
4. 키워드 enum 을사용하니가 구현의도가 열거이구나~ 하고 알수있어
이넘이 제공되는 메소드 ( 열거형의 메소드 )
values() 메서드 :
열거형의 모든 상수를 선언한 순서대로 배열을 만듦 ! 그리고 리턴함 !
ValuesOf() 메서드 :
열거 상숫값을 조사하여 리턴하는데,
사용자가 직접 입력한 문자열이나 db의 값으로부터 열거상수를 받을때 필요하다 !
string name() : 열거값의 이름 문자열을 조사한다.
int ordinal() : 열거값의 순서값을 조사한다. 0 부터 시작한다.
int compare To( E o ) : 순서값을 비교한다. 호출객체가 더 앞ㄷ쪽이면 음수, 뒤쪽이면 양수가 리턴된다.
java.lang.Enum
모든 enum 은 해당 클래스를 상속받고있으며
Enum.class 의 메서드들은 다음과 같다.
Enum.class 의 메서드들은 다음과 같다.
열거형 집합 : EnumSet
Set 자료구조를 구현하고 있음으로 Set 이 가지고 있는 특성을 그대로 가지고 있다.
말 그대로 열거타입의 set자료구조이며
열거타입에 set 자료구조가 필요할때 ?? -- HashSet 보다 EnumSet이 훨씬 좋아 !!!
'백기선 자바스터디' 카테고리의 다른 글
백기선 자바스터디 10주차 (1) | 2023.02.02 |
---|---|
백기선 자바스터디 08주차 (0) | 2023.01.31 |
백기선 자바스터디 09주차 (0) | 2023.01.31 |
백기선 자바스터디 07주차 (0) | 2023.01.31 |
백기선 자바스터디 06주차 (0) | 2023.01.30 |