Book
-
[Kotlin In Action] 5장: 람다로 프로그래밍Book/Kotlin In Action 2021. 9. 11. 01:11
5장: 람다로 프로그래밍 람다와 컬렉션 사람들로 이뤄진 리스트가 있고 그 중에 가장 연장자를 찾고 싶은 코드를 작성해보겠습니다. data class Person(val name: String, val age: Int) fun findTheOldest(people: List) { var maxAge = 0 var theOldest: Person? = null for (person in people) { if (person.age > maxAge) { maxAge = person.age theOldest = person } } println(theOldest) } fun main() { findTheOldest(listOf(Person("Alice", 29), Person("Bob", 31))) } 위의 코..
-
[Kotlin In Action] 3장: 함수 정의와 호출Book/Kotlin In Action 2021. 8. 27. 16:42
3.1 코틀린에서 컬렉션 만들기 fun main() { val list = arrayListOf(1, 7, 54); println(list.javaClass) val set = hashSetOf(1, 7, 53) println(set.javaClass) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") println(map.javaClass) } class java.util.ArrayList class java.util.HashSet class java.util.HashMap 위의 결과를 보면 코틀린만의 컬렉션 기능을 제공하지 않는다는 것을 알 수 있습니다. 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스입니다. 하지만 코틀린에서는 자바보..
-
[Kotlin In Action] 2장: 코틀린 기초Book/Kotlin In Action 2021. 8. 20. 15:04
2장: 코틀린의 기초 2장에서 다루는 내용 함수, 변수, 클래스, enum, 프로퍼티를 선언하는 방법 제어 구조 스마트 캐스트 예외 던지기와 예외 잡기 2.1.2 함수 fun max (a: Int, b: Int): Int { return if (a > b) a else b } 함수를 선언할 때 fun 키워드를 사용합니다. 파라미터 이름 뒤에 그 파라미터 타입을 적습니다. 함수를 최상위 수준에 정의할 수 있습니다. 자바와 달리 꼭 클래스 안에 함수를 넣어야 할 필요가 없습니다. 배열도 일반적인 클래스와 마찬가지입니다. 코틀린에는 자바와 달라 배열 처리를 위한 문법이 따로 존재하지 않습니다. fun max (a: Int, b: Int): Int = if (a > b) a else b 처음에 보았던 코드를 간..
-
[MySQL] InnoDB 언두(Undo) 로그와 MVCC란 무엇일까?Book/Real MySQL 2021. 7. 29. 16:17
언두 영역이란? 언두 영역은 UPDATE 문장이나 DELETE 문장으로 데이터를 변경했을 때 변경되기 전의 데이터(이전 데이터)를 보관하는 곳입니다. UPDATE membere SET name='홍길동' WHERE member_id = '1'; 위 문장의 실행되면 트랜잭션을 커밋하지 않아도 실제 데이터 파일 내용은 홍길동으로 변경됩니다. 그리고 변경되기 전의 값이 Gyunny 였다면, 언두 영역에는 Gyunny라는 값이 백업되는 것입니다. 이 상태에서 사용자가 커밋하게 되면 현재 상태가 그대로 유지되고, 롤백하게 되면 언두 영역의 백업된 데이터를 다시 데이터 파일로 복구합니다. 언두의 데이터는 크게 두 가지 용도로 사용됩니다. 트랜잭션의 롤백 대비용 트랜잭션의 격리 수준을 유지하면서 높은 동시성을 제공 ..
-
[MySQL] Upsert 쿼리란 무엇일까?Book/Real MySQL 2021. 7. 22. 16:21
MySQL Upsert 사용법 이번 글에서는 MySQL에서 Upsert 쿼리를 사용하는 법에 대해서 정리해보겠습니다. Upsert는 이름에서 어느정도 유추할 수 있듯이 Update + Insert를 합친 말입니다. 즉, Upsert는 중복되는 값이 있다면 Update를 하고 중복되는 값이 없다면 Insert를 하는 쿼리입니다. 좀 더 정확히 말하면 Unique Key의 값이 중복된다면 Update를 하고, Unique 컬럼의 값이 존재하지 않는다면 INSERT를 하는 것입니다. 실제로 프로젝트를 하다 보니 이러한 쿼리를 사용해야 할 상황이 와서 이렇게 정리를 하게 되었습니다. Upsert 쿼리를 보면 아래와 같습니다. INSERT INTO user_refresh_token (user_id, refresh..
-
[MySQL] Distinct 사용할 때 알아두어야 할 것Book/Real MySQL 2021. 7. 10. 00:56
DISTINCT 정리하기 특정 컬럼의 유니크한 값을 조회하려면 SELECT 쿼리에 DISTINCT를 사용합니다. DISTINCT는 MIN(), MAX(), COUNT()와 같은 집합 함수와 함께 사용하는 경우와, 집합 함수가 없이 사용하는 경우 두 가지로 구분해서 알아보겠습니다. SELECT DISTINCT 중복된 값을 없애기 위해서 DISTINCT를 사용합니다. GROUP BY를 사용했을 때와 거의 동일한 방식으로 처리됩니다. 다만 DISTINCT는 정렬이 되지 않는다는 차이 정도가 있습니다. SELECT DISTINCT emp_no FROM salaries; SELECT emp_no FROM salaries GROUP BY emp_no; 그리고 DISTINCT를 사용하면서 많은 사람들이 헷갈리는 부분..
-
[MySQL] Inner JOIN과 Outer JOIN의 차이가 무엇일까?Book/Real MySQL 2021. 6. 25. 15:35
JOIN 정리하기 이번 글에서는 JOIN에 대해서 알아보겠습니다. (JOIN에 대해서는 아는데 INNER, OUTER 용어가 헷갈려서.. 정리를 해보려 합니다.) JOIN의 종류 JOIN의 종류는 크게 INNER JOIN과 OUTER JOIN으로 구분할 수 있고, OUTER JOIN은 다시 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분할 수 있습니다. 조인의 처리에서 어느 테이블을 먼저 읽을지를 결정하는 것은 상당히 중요하며, 그에 따라 처리할 작업량이 상당히 달라집니다. INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로 MySQL 옵티마이저가 JOIN의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있습니다. 하지만 OU..
-
[MySQL] 트랜잭션 고립 레벨이란 무엇일까?Book/Real MySQL 2021. 5. 25. 10:44
MySQL에서의 트랜잭션 MySQL의 동시성에 영향을 미치는 잠금(Lock), 트랜잭션, 그리고 트랜잭션의 격리 수준을 살펴보겠습니다. 트랜잭션은 작업의 완전성을 보장해 주는 것입니다. 잠금: 트랜잭션은 서로 비슷한 개념 같지만 사실 잠금은 동시성을 제어하기 위한 기능입니다. 트랜잭션: 데이터의 정합성을 보장하기 위한 기능입니다. 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨 MySQL의 격리 수준 트랜잭션의 격리 수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 특정 트랜잭션..