새소식

반응형
Back-end/패스트캠퍼스 국비지원

[패스트캠퍼스] 자바 강의 - 2주차. 자바기초

2023.03.21
  • -
반응형

※ 패스트캠퍼스 포스팅들은 패스트캠퍼스 국비지원교육 'Java & Spring으로 시작하는 웹 프로그래밍'에 대한 내용을 정리하고 나름의 회고를 남겨놓은 글입니다.

 

이번 주차도 저번 1주차와 마찬가지로 자바기초에 대한 수업을 들었다. 예상과 다르게 내가 가지고 있던 자바 기초 지식 중에서 놓치고 있던 부분이 꽤 많이 있었고 그 부분을 채우니 조금 마음이 편해진 느낌이 들었다.

 

복합 대입 연산자와 비트 연산

다른 언어와 마찬가지로 자바에서도 복합 대입 연산자를 지원한다. 대부분이 아는 내용이었지만 내가 부족한 부분은 비트와 관련된 부분이었다. 사실 학교에서나 책을 보면서 프로그래밍 언어를 배울 때 되게 빠르게 그냥 슉 넘어가는 파트라 제대로 봤던 적이 한 번도 없었던 것 같다.

 

하지만 최근 코딩테스트를 준비하면서 비트와 관련된 지식을 활용하여 풀 수 있는 문제를 접하다 보니 해당 부분의 지식이 비어있던 것에 잘못됨을 느꼈었는데 이번기회로 한 번 짚고 넘어갈 수있어서 좋았다.

 

간단하게 정리를 해 보면 비트 연산자는 피연산자를 비트단위로 논리 연산을 한다. 즉 이진수(binary number)에 대한 계산을 하는 것인데 먼저 가장 기초가 되는 OR, AND, XOR 연산자에 대한 설명은 생략하겠다.

 

  • 간단한 비트 연산 규칙
    • ~a = ~a-1 (deximal)
    • a << b = a* 2^b
    • a >> b = (a/2^b)의 내림
      • ex) 2.766 -> 2

AND 연산 예시

이 비트 연산이 왜 필요한지가 더 중요한 것 같아서 해당 내용에 대해 더 공부한 내용을 조금 정리해 보겠다.

 

컴퓨터가 int형의 계산을 하는 것은 겉보기에 사람과 같이 계산한다고 생각할 수 있으나 컴퓨터는 결국 기계이기 때문에 0과 1로 된 데이터만 계산할 수 있다. 그렇기 때문에 사실상 우리가 시키던 모든 계산이 기존 자료형(int, char, float 등..)을 0과 1로 나타낼 수 있는 비트로 먼저 변환 후에 해당 값들을 계산하는 것이었다.

 

그렇기 때문에 아무래도 비트 연산을 컴퓨터에게 시키는 것은 그 중간 변환 작업을 사용자가 대신 해줌으로써 시간을 줄일 수 있기 때문에 사용한다고 볼 수 있다.

 

물론 간단한 연산 같은 경우 사실상 차이가 없겠지만 데이터가 굉장히 많거나 연산의 양이 많은 경우(높은 시간복잡도) 굉장히 우위를 가져올 수 있는 부분인 것이다.

 

그 밖에 컴퓨팅 시스템에서 오류 검출, 네트워크 시스템에서의 오류검출, 그리고 알고리즘에서의 state 저장 등에 사용된다.

 

알고리즘에서 사용되는 예시로 N개의 지점에 대해 0과 1로 그 지점의 상태를 저장할 때 굉장히 유용하게 사용할 수 있다.

예를 들어, N개의 도시를 한 번씩 방문하면서 순회하는 경우 각 도시들의 방문 상태를 저장할 때 일반적인 배열(보통 visited)을 사용하게 되면 N만큼의 int를 사용해야 하기 때문에 4Nbytes 만큼의 공간을 사용해야 하는데, N이 15인 경우 60bytes를 사용하는 반면 비트연산을 사용하면 2^15=32768 이기 때문에 1개의 int(약 -21억~21억) 저장공간, 즉 4byte 만 사용하여 처리가 가능하다.

 

위의 예시에서야 15였으니 얼마 차이가 나지 않았지만 보통 N의 제한은 천차만별로 100,000이 넘어가는 경우도 있기 때문에 이를 고려하지 않을 수가 없는 것이다.

 

또한 XOR 연산 같은 경우 key를 통해 값을 숨기고 찾을 수 있는 암호화, 복호화 기능 또한 존재한다고 한다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.