본문 바로가기

Language

(103)
[C++] 비트 연산 ※ int는 32bit (4byte)이지만, 이 게시물에서 편의상 8bit로 표현하였음 비트 연산자 a = 0b1110 / b = 0b0100 활용 & (AND) a & b = 0b0100 둘 다 1이면 켜짐 어떤 비트가 켜져 있는지 확인 | (OR) a | b = 0b1110 둘 중 1이 하나라도 있으면 켜짐 비트를 켤 때 ^ (XOR) a ^ b = 0b1010 서로 다르면 켜짐 비트를 끄거나 반전시킬 때 ~ (NOT) ~a = 0b0001 비트를 반전시킴 비트를 끌 때 (&와 함께 사용) (오른쪽 Shift) a >> n = a * (2 ^ -n) 비트 연산을 사용할 때 우선순위에 주의가 필요하다. 일반적으로 사칙연산(+, -, *, /)은 비교, 논리 연산자(==, >, && 등)보다 우선순위가 ..
[C++] advance 함수 std::advance(_InIt& _Where, _Diff _Off) 함수는 off만큼 반복자를 이동시킨다. vector v = { 1, 2, 3, 4, 5 }; auto it = v.begin(); advance(it, 1); cout
[Kotlin] 코루틴을 통한 비동기 처리 여러 개의 루틴을 동시에 실행하여 결과를 내고 싶다면 비동기처리를 지원하는 코루틴을 사용한다. 코루틴은 메인루틴과 별도로 진행이 가능한 루틴으로 개발자가 루틴의 실행과 종료를 마음대로 제어할 수 있는 단위이다. 코루틴을 사용할 때는 코루틴 extensions의 패키지를 모두 import 해야한다. import kotlinx.coroutines.* 코루틴의 Scope 코루틴은 제어범위 및 실행범위를 지정할 수 있다. GlobalScope : 프로그램 어디서나 제어, 동작이 가능한 기본 범위 CoroutineScope : 특정한 목적의 Dispatcher를 지정하여 제어 및 동작이 가능한 범위 CoroutineScope를 만들 때 적용가능한 Dispatcher Dispatchers.Default : 기본적인..
[Kotlin] 비트연산 비트연산: 정수형 변수를 10진법 대신 2진법 비트 단위로 연산할 수 있는 기능 실무에서 비트연산은 거의 계산에는 사용하지 않으며 (2진법을 이용한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부분!!) 정수형의 값을 비트 단위로 나누어 데이터를 좀 더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용된다. 예를 들어, 32비트인 Int 타입 안에 0과 1로 된 서로 다른 값을 넣는다거나 앞의 5비트와 뒤의 27비트에 서로 다른 값을 넣는 식으로 변수 하나에 여러 개의 값을 담아 사용할 수 있다. 다만 비트연산을 사용하는 부하도 무시할 수 없으므로 주로 플래그 값(여러 개의 상태값을 0과 1로 담는 방법)을 처리하거나 네트워크 등에서 프로토콜의 데이터 양을 줄이기 위해 자주 사용된다. ..
[Kotlin] 변수의 고급 기술 (상수, lateinit, lazy) 상수 val은 할당된 객체를 바꿀 수 없을 뿐이지 객체 내부의 속성을 변경할 수는 없는 것은 아니다. 그러나 ‘상수’는 절대 변경이 불가능하다. 컴파일 시점에 결정되어 절대 바꿀 수 없다. const val CONST_A = 1234 상수로 선언될 수 있는 값은 기본 자료형만 가능하다.(String 자료형 포함) 상수의 이름을 만들 때는 의례적으로 대문자와 언더바(_)만 사용한다. 이를 통해 변수가 아닌 상수라는 점을 알린다. 런타임에 생성될 수 있는 일반적인 다른 클래스의 객체들은 담을 수 없다. 상수는 클래스의 속성이나 지역 변수 등으로는 사용할 수 없으며, 반드시 companion object 안에 선언하여 객체의 생성과 관계없이 클래스와 관계된 고정적인 값으로만 사용하게 된다. 선언 class S..
[Kotlin] 컬렉션 함수 (2) associateBy : 아이템에서 key를 추출하여 map으로 변환하는 함수 name, birthYear 속성이 있는 객체들을 List에 넣어두었을 때 collection.associateBy{ it.name } 중괄호 안에 key로 사용할 속성의 이름을 넣어주면 자동으로 map으로 변환하여 반환한다. groupBy : key가 같은 아이템끼리 배열로 묶어 map으로 만드는 함수 collection.groupBy{ it.birthYear } partition : 아이템에 조건을 걸어 두 개의 컬렉션으로 나누어 줌 collection.partition{ it.birthYear > 2002 } 두 컬렉션은 두 객체를 담을 수 있는 Pair라는 클래스 객체로 반환되므로 각각의 컬렉션을 first, secon..
[Kotlin] 컬렉션 함수 (1) 여태까지 컬렉션을 for문으로 반복하여 포함된 아이템을 하나하나 꺼내어 사용했었다. 하지만 코틀린은 함수형 언어의 특징을 가지고 있기 때문에 좀 더 편리하게 컬렉션을 사용할 수 있다. 컬렉션 함수: list나 set, map과 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용하여 for문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 함수 forEach : 컬렉션에 포함된 모든 아이템을 it이라는 변수로 순서대로 참조 collection.forEach{ println(it) } filter : it에 조건을 걸어주면 조건에 맞는 객체만 collection으로 만들어서 반환 collection.filter{ it < 4 } map : it에 수식을 적용하여 값을 변..
[Kotlin] 컬렉션(2) Set과 Map https://winterflower.tistory.com/399 [Kotlin] 컬렉션(1) 리스트 리스트는 데이터를 모아 관리하는 컬렉션 클래스를 상속받는 서브 클래스 중 가장 단순한 형태로, 여러 개의 데이터를 원하는 순서로 넣어 관리하는 형태이다. 리스트에는 두 가지가 있다. List : winterflower.tistory.com 컬렉션 1탄에서는 컬렉션 중 List에 대해 알아보았다. 이번 게시물에서는 나머지 컬렉션인 Set과 Map을 알아보자. Set : 리스트와 달리, 순서가 정렬되지 않으며 중복이 허용되지 않는 컬렉션 인덱스로 위치를 지정하여 객체를 참조할 수는 없으며 contains로 객체가 set 안에 존재하는지를 확인하는 식으로만 확인한다. sampleSet.contains(”디모”..