본문 바로가기

자격증 및 기타 활동/부스트캠프 베이직

[네부캠/And] 네이버 부스트캠프 베이직 1주차 후기

728x90

지난 2주 간 네이버 부스트캠프 베이직 과정에 입과하여 미션을 수행하였다. 마지막 그룹미션까지 무사히 마치고, 토요일에 2차 문제 해결력 테스트를 봤다. 그리고 조금 한숨 돌리고 늦게나마 쓰는 베이직 후기..😅 미션을 하는 도중에 틈틈이 쓰고 싶었지만 그럴 여력이 없었기에(...) 미션 내용은 유출할 수 없기 때문에 내가 새로 배운 점, 공부한 내용을 중심으로 작성해보겠다!

 

👀 새로 알게 된 점

디버거로 브레이크 포인트 설정하기

1주차 미션을 진행하면서 Intellij에서 왼쪽 빨간 점으로 디버깅 시 브레이크 포인트를 나타낼 수 있다는 것을 처음 알게되었다. 디버깅을 할 때 거의 로그를 찍어 확인해오기도 했고, 사실 지금까지 그 빨간 점을 수정할 코드를 표시하는 용도로 사용왔는데, 이런 용도였다니! 스텝 오버, 스텝 인도 처음 들어봤기 때문에 검색해보았다.

왼쪽부터 Step Over, Step Into, Step Out

스텝 오버(Step Over)

현재 줄의 코드를 실행하고, 해당 줄에서 호출된 메서드를 실행한 후 다음 줄로 이동한다.

스텝 인(Step Into)

현재 줄의 코드를 실행하고, 만약 메서드 호출이 있는 경우 그 메서드 내부로 진입하여 첫 번째 줄부터 디버깅을 계속한다.

스텝 아웃(Step Out)

현재 디버깅 중인 메서드의 실행을 마치고, 메서드를 호출한 지점으로 돌아간다.

💻 다시 공부해본 것들

미션을 하는 동안 가장 많이 검색해본 것이 코틀린 문법인 것 같다. 코틀린이 아직 익숙하지 않아서 사용해봤어도 계속 까먹는다.

코틀린 문법

List

코틀린에서 List는 수정할 수 있는 가변 리스트(Mutable List)와 수정할 수 없는 불변 리스트(Immutable List)로 나뉜다.

  • 불변 리스트(Immutable List)
// 리스트 생성
val immutableList = listOf("Apple", "Banana", "Cherry") 
// 리스트 요소 접근
val firstItem = immutableList[0]  // "Apple"
// 리스트 요소 출력
for (item in immutableList) { 
    println(item)
}
  • 가변 리스트(Mutable List)
// 리스트 생성
val mutableList = mutableListOf("Apple", "Banana", "Cherry")
// 비어있는 리스트 생성
val emptyList = emptyList<String>()
val emptyMutableList = mutableListOf<String>()
// 리스트 요소 추가
mutableList.add("Mango")
// 리스트 요소 제거
mutableList.remove("Banana")
// 리스트 요소 수정
mutableList[0] = "Pear"
  • 리스트를 정렬할 때 sort()를 사용하면 리스트 자체를 변경하여 정렬하는 반면, sorted()를 사용하면 원본 리스트를 변경하지 않고 정렬된 새로운 리스트를 반환한다.

Map

코틀린에서 Map 역시 수정할 수 있는 가변 맵(Mutable Map)과 수정할 수 없는 불변 맵(Immutable Map)으로 나뉜다.

  • 불변 맵(Immutable Map)
// 맵 생성
val immutableMap = mapOf("key1" to "value1", "key2" to "value2", "key3" to "value3")
// 맵 요소 접근
val value1 = immutableMap["key1"]  // "value1"
val value2 = immutableMap["key4"]  // null, key가 없으면 null 반환
// 맵 반복하여 출력
for ((key, value) in immutableMap) {
    println("$key -> $value")
}
  • 가변 맵(Mutable Map)
// 맵 생성
val mutableMap = mutableMapOf("key1" to "value1", "key2" to "value2")
// 맵 요소 추가
mutableMap["key3"] = "value3"
mutableMap.put("key4", "value4")
// 맵 요소 수정
mutableMap["key1"] = "newValue1"
// 맵 요소 제거
mutableMap.remove("key2")

data class

데이터 클래스(data class)를 이용해 데이터를 더 효율적으로 다루는 방법을 다시 복습하는 계기가 되었다. 또한 미션을 통해 나에게 필요한 데이터 구조를 생각해보고 결정하는 경험을 많이 해본 것 같다. 이전에는 '이거 쓰면 될 것 같은데?' 하고 깊게 생각하지 않고 결정했다면 이번에는 내가 왜 이런 데이터 구조를 결정했는지에 대해 생각해보고, 그 생각을 글로 옮기는 과정을 통해 조금 더 성장할 수 있었다.

 

데이터 클래스는 다음과 같이 정의할 수 있다. 미션에 사용한 데이터 클래스는 보여줄 수 없는 관계로 간단한 예시를 가져왔다.

data class User(val name: String, val age: Int)

 

이렇게 데이터 클래스를 정의하고 난 후 간단하게 객체를 생성해 사용할 수 있다.

val user = User("Alice", 30)
println(user)  // 출력: User(name=Alice, age=30)

 

이 포스팅을 작성하기 위해 데이터 클래스에 대해 다시 검색해보니 몰랐던 부분을 알게 되었다.데이터 클래스의 기본 특성은 다음과 같다.

  •  주 생성자에 정의된 모든 프로퍼티에 대해 equals() 함수와 hashCode() 함수가 자동으로 생성된다.
  • toString() 함수가 자동으로 생성되어 객체의 내용을 문자열로 쉽게 확인할 수 있다.
  • copy() 함수가 자동으로 생성되어 객체를 쉽게 복사할 수 있다.
  • componentN() 함수가 생성되어 각 프로퍼티를 순서대로 반환할 수 있다.

💡느낀 점

  • 코틀린 공부를 더 열심히 하자.
  • 미션에서 요구하는 사항을 꼼꼼히 읽고 나의 방식으로 해석하는 연습을 하자.
  • 귀찮더라도 실수한 것, 에러가 난 부분 등을 적어놓고 어떻게 해결했는지 기록하자.
  • 내가 모르는 것, 알았는데 까먹은 것 등을 기록하자.(기록의 중요성!!)