이 문서의 내용
논리형 Flag
논리형 boolean에 대한 정보를 갖는 Flag입니다. 토글 기능을 사용하여 논리적인 흐름을 처리하고 제어합니다.
더보기
논리형 Flag는 true | false 두 개의 값을 가지게 됩니다.
Boolean 타입은 Null을 표현 할 수 있으므로 primitive에 해당하는 boolean 타입을 사용합니다.
Flag를 토글하려면 논리 연산자 !을 사용합니다.
boolean flag = true;
// switch true to false
flag =! flag;
// switch false to true
flag =! flag;
코드 | 비고 | |
Flag를 true로 초기화합니다. | ||
Flag를 토글합니다. |
비트 연산자 Flag
비트 연산자를 사용한 Flag는 여러 개의 상태가 동시에 켜질 수 있는 스위치입니다.
Flag에서 사용하는 상태 값은 다음과 같이 정의합니다.
final static int FLAG_APPLE = 1;
final static int FLAG_TOMATO = FLAG_APPLE << 1;
final static int FLAG_PINEAPPLE = FLAG_APPLE << 2;
final static int FLAG_CARROT = FLAG_APPLE << 3;
코드 | 비고 | |
여러 상태를 정의하는 시작 값은 2진수 반드시 1부터 시작해야 하는 것은 아니며 최대한 많은 상태를 표현하기 위함입니다. |
||
시작 값에서 << 1 비트 연산합니다. 두 번째 상태는 2진수 |
||
시작 값에서 << 2 비트 연산합니다. 두 번째 상태는 2진수 |
||
시작 값에서 << 3 비트 연산합니다. 두 번째 상태는 2진수 |
아무런 상태도 갖지 않았다면 0으로 정의합니다. 0은 2진수 0000 0000입니다.
final static int FLAG_NONE = 0;
Flag에 새로운 상태를 추가하려면 OR 비트 연산합니다.
int flags = FLAG_NONE;
// append apple status
flags |= FLAG_APPLE;
// append carrot status
flags |= FLAG_CARROT;
코드 | 비고 | |
Flag를 0으로 초기화합니다. 현재 상태는 2진수 |
||
FLAG에 상태를 추가합니다. 현재 상태는 2진수 |
||
FLAG에 상태를 추가합니다. 현재 상태는 2진수 |
Flag에서 상태를 제거하려면 XOR 비트 연산합니다.
int flags = FLAG_ALL;
// remove pineapple status
flags ^= FLAG_PINEAPPLE;
// remove apple status
flags ^= FLAG_APPLE;
코드 | 비고 | |
Flag를 ALL로 초기화합니다. 현재 상태는 2진수 |
||
FLAG에 상태를 제거합니다. 현재 상태는 2진수 |
||
FLAG에 상태를 제거합니다. 현재 상태는 2진수 |
Flag의 상태를 검사하려면 AND 비트 연산합니다.
int flags = FLAG_ALL;
flags ^= FLAG_APPLE;
if (0 != (flags & FLAG_APPLE)) System.out.println("Apple status on");
if (0 != (flags & FLAG_TOMATO)) System.out.println("Tomato status on");
if (0 != (flags & FLAG_PINEAPPLE)) System.out.println("Pineapple status on");
if (0 != (flags & FLAG_CARROT)) System.out.println("Carrot status on");
복합적인 Flag 상태를 정의하여 사용 할 수도 있습니다.
final static int FLAG_ALL = FLAG_APPLE | FLAG_TOMATO | FLAG_PINEAPPLE | FLAG_CARROT;
final static int FLAG_APPLE_TOMATO = FLAG_APPLE | FLAG_TOMATO;
int flags = FLAG_ALL;
flags ^= FLAG_PINEAPPLE;
flags ^= FLAG_CARROT;
if (FLAG_ALL == (flags & FLAG_ALL)) System.out.println("All status on");
if (FLAG_APPLE_TOMATO == (flags & FLAG_APPLE_TOMATO)) System.out.println("Apple & Tomato status on");
정리 및 복습
논리형 Flag는 boolean 타입으로 정의하며 상태를 토글하려면 논리 연산자!를 사용합니다.비트 연산자 Flag는 비트 연산을 사용하며동시에 여러 개 상태가 On/Off 될 수 있는 스위치입니다.상태는 1부터 시작하며 다음 상태는이전 상태 기준으로 << 1비트 연산하여 left shift합니다.- Flag에 새로운 상태를 추가하려면
|=(OR)비트 연산합니다. - Flag에서 상태를 제거하려면
^=(XOR)비트 연산합니다. - Flag의 상태를 비교하려면
&(AND)비트 연산합니다.
'Java > Design patterns' 카테고리의 다른 글
객체 생성 코드를 단순화 하는 메소드 체이닝 패턴(Method chaining pattern) (0) | 2023.08.29 |
---|---|
객체 생성을 위한 패턴 - 빌더(Builder), 점층적 생성자(Telescoping constructor), 자바빈(JavaBeans) 패턴 (0) | 2023.08.29 |