본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 22일차 -38

by oncerun 2020. 3. 24.
반응형

1. 코드란?

막상 코드가 무엇인지 물어봤을 때 선뜻 대답을 못했다.

코드가 무엇일까?

코드란 기호이다. 여러 가지 기호가 있는데 각 기호들만의 특징은 의미가 부여되어있으며 기호만으로 의미를 알 수 있다는 것이다.  어떠한 언어도 보았을 때 의미를 알 수 있어야 한다.

우리는 자바라는 코드로 프로그램을 작성하는데 작성된 코드를 보고 각 의미를 알 수 있어야 좋은 코드라 하는 이유인 거 같다. 

 

2. 비트 연산자의 활용 

8 방향에 대한 움직임을 연습하기 위해 배웠던 비트 연산자로 8방향에 대한 기본 로직을 작성한다.

 

    public static final int N = 1;  
	public static final int E = 2;
	public static final int S = 4;
	public static final int W = 8;'
    int d = 0;
        // 키를 눌렀을 때의 상태 정보를 저장
		// d는 int형 변수라서 32개의 비트를 가진다(이진수)
		// 각 비트는 0일 때 상태가 없고 1일 때 상태를 가진다
		// 각 키 입력에 대한 상태를 비트연산자를 통해 d에 저장
		// Dir.N은 1이고 Dir.E는 2인데 이는 각각 0011으로 저장됨
		addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				
				switch (e.getKeyCode()) {
				case KeyEvent.VK_UP:
					d |= Dir.N; //0000 |= 0001  : 0001
					break;
				case KeyEvent.VK_RIGHT:
					d |= Dir.E; //0000 |= 0010  : 0010
					break;
				case KeyEvent.VK_LEFT:
					d |= Dir.W; //0000 |= 1000  : 1000
					break;
				case KeyEvent.VK_DOWN:
					d |= Dir.S; // 0000 |= 0100 : 0100
					break;
				}
				
			}
 
			// 키에서 손을 뗄 때는 기존의 저장된 상태 정보를 제거해야 함
			// N 방향키와 E 방향키를 동시에 누르면 d에 0011이 저장된다
			// N 방향키에서 손을 떼면 N 방향키 상태 정보가 사라져야 한다
			// N 방향키의 상태 정보는 0001이므로 이것만 없앤다
			
			// 없애고자 하는 상태 정보인 Dir.N을 ~Dir.N으로 만든다.
			// Dir.N이 0001이므로 ~Dir.N은 1110이다.			
			// 0011인 d와 ~Dir.N를 &연산하면 다음과 같다.
			// 0011
			// 1110 &
			// ---------------
			// 0010이 된다. 0001이 지워졌다
			// E 방향키의 상태 정보만 저장됐다
			@Override
			public void keyReleased(KeyEvent e) {
				switch (e.getKeyCode()) {
				case KeyEvent.VK_UP:
					d &= ~Dir.N;
					break;
				case KeyEvent.VK_RIGHT:
					d &= ~Dir.E;
					break;
				case KeyEvent.VK_LEFT:
					d &= ~Dir.W;
					break;
				case KeyEvent.VK_DOWN:
					d &= ~Dir.S;
					break;
				}

			}
		});

 

반응형

댓글