지난 2주 간 네이버 부스트캠프 베이직 과정에 입과하여 미션을 수행하였다. 마지막 그룹미션까지 무사히 마치고, 토요일에 2차 문제 해결력 테스트를 봤다. 그리고 조금 한숨 돌리고 늦게나마 쓰는 베이직 후기..😅 미션을 하는 도중에 틈틈이 쓰고 싶었지만 그럴 여력이 없었기에(...) 미션 내용은 유출할 수 없기 때문에 내가 새로 배운 점, 공부한 내용을 중심으로 작성해보겠다!
👀 새로 알게 된 점
디버거로 브레이크 포인트 설정하기
1주차 미션을 진행하면서 Intellij에서 왼쪽 빨간 점으로 디버깅 시 브레이크 포인트를 나타낼 수 있다는 것을 처음 알게되었다. 디버깅을 할 때 거의 로그를 찍어 확인해오기도 했고, 사실 지금까지 그 빨간 점을 수정할 코드를 표시하는 용도로 사용왔는데, 이런 용도였다니! 스텝 오버, 스텝 인도 처음 들어봤기 때문에 검색해보았다.
스텝 오버(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() 함수가 생성되어 각 프로퍼티를 순서대로 반환할 수 있다.
💡느낀 점
- 코틀린 공부를 더 열심히 하자.
- 미션에서 요구하는 사항을 꼼꼼히 읽고 나의 방식으로 해석하는 연습을 하자.
- 귀찮더라도 실수한 것, 에러가 난 부분 등을 적어놓고 어떻게 해결했는지 기록하자.
- 내가 모르는 것, 알았는데 까먹은 것 등을 기록하자.(기록의 중요성!!)
'자격증 및 기타 활동 > 부스트캠프 베이직' 카테고리의 다른 글
[네부캠/And] 네이버 부스트캠프 베이직 전체 회고📝 (0) | 2024.07.15 |
---|---|
[네부캠/And] 네이버 부스트캠프 베이직 2주차 후기 (0) | 2024.07.09 |