Language/Java

[Java]Flag이용하기.

out of coding 2014. 9. 19. 11:23

Flag를 사용하여서, 값을 한꺼번에 합쳐서 보낼수도 있고, 조작하여서 사용할 경우가 존재하게 된다.


비트 연산에 대한 생각을 하게 되면 쉽게 해결이 되지만. 막상 또 하려고 하면 정리가 안된다.


그래서 정리를 하여둠.


public class FlagTest {

	private static final int NONE = 0;
	private static final int ONE = 1;
	private static final int TWO = ONE << 1;
	private static final int THREE = ONE << 2;
	private static final int ALL = ONE | TWO | THREE;
	
	public static void main(String[] args) {

		System.out.println("NONE = " + NONE);
		System.out.println("ONE = " + ONE);
		System.out.println("TWO = " + TWO);
		System.out.println("THREE = " + THREE);
		
		// Flag의 합침값
		int flags = ONE | THREE;
		System.out.println("ONE | THREE = " + flags);
		
		// 특정 Flag 값을 확인
		System.out.println("THREE = " + ((flags & THREE) != 0));
		
		// 특정 Flag값을 추가
		System.out.println("TWO = " + ((flags & TWO) != 0));
		flags |= TWO;
		System.out.println("TWO = " + ((flags & TWO) != 0));
		
		// 특정 Flag값을 제거
		flags &= ~THREE;
		System.out.println("THREE = " + ((flags & THREE) != 0));
		
		// 특정 Flag값을 반전 (제거랑 비슷함)
		flags ^= TWO;
		System.out.println("TWO = " + ((flags & TWO) != 0));
		
		// Flag 모두 제거
		flags = NONE; // 1번방법
		System.out.println("flags = " + flags);
		flags |= TWO;
		System.out.println("flags = " + flags);
		flags &= ~flags; // 2번방법
		System.out.println("flags = " + flags);
		
		// 모든 플래그 적용
		flags = ALL;
		System.out.println("ONE = " + ((flags & ONE) != 0));
		System.out.println("TWO = " + ((flags & TWO) != 0));
		System.out.println("THREE = " + ((flags & THREE) != 0));
		
		// 몇개빼고 적용
		flags = ALL ^ ONE;
		System.out.println("ONE = " + ((flags & ONE) != 0));
		System.out.println("TWO = " + ((flags & TWO) != 0));
		System.out.println("THREE = " + ((flags & THREE) != 0));
	}
}