Kotlin과 함께하는 Joe의 쇼핑 여정
능숙한 Android 개발자 Joe는 그가 꿈꾸는 PC를 위해 전자 제품 매장
앞에 섰습니다
그에게는 계획과 리스트가 있었는데 매장에서 한 걸음을 뗄 때마다
Kotlin을 사용해 그의 쇼핑 리스트를 정리하고 있었습니다
중요한 부품을 하나라도 빠뜨리지 않기 위해 적어둔 리스트를 시각화하기도 했습니다
둘러보던 중 고급 쿨링 시스템에 발길이 멈춥니다
이는 그의 초기 리스트에는 없었지만 이것도 중요하다고 판단하여 추가하기로 합니다
또 둘러보다 보니 그가 처음 고른 것들보다 더 좋은 그래픽 카드들이 보입니다
기존 리스트에 있던 것들을 새로운 것들로 대체했습니다
그의 신나는 쇼핑이 끝나고 그가 필요했던 부품들뿐 아니라 쇼핑 중 그의 결정에 따라
조정된 Kotlin 리스트도 함께 생겼습니다
이 이야기는 Kotlin 리스트의 유동성과 기능성을 실제 상황에 대입해 보여드린 것입니다
그럼 Kotlin으로 돌아가 비슷한 리스트를 만들어 봅시다
제가 시작할 것은 굉장히 기본적인 Kotlin 코드입니다
그럼 쇼핑 리스트를 만들어 보겠습니다
val shoppingList(쇼핑리스트)입니다
우선 이 shoppingList는 listOf()여야 하고 item(항목)을 추가할 수 있습니다
그러면 예를 들어 processor(프로세서)가 필요하다고 해봅시다
그리고 RAM(램)도 필요합니다
Graphics Card(그래픽 카드)도 필요합니다
SSD도 필요할 것 같습니다
물론 컴퓨터엔 이것보다 더 많을 것들이 필요하겠지만 우선 이것으로 시작해 보겠습니다
이것이 우리가 가진 list(리스트)입니다
이런 식으로 Kotlin에서 리스트를 생성합니다
이는 immutable(불변하는) 리스트입니다
그렇습니다
Immutable list(불변하는 리스트)
이제 문제는 추후 이 리스트에 아무것도 추가할 수 없다는 것입니다
바꿀 수 없습니다
이 val의 문제가 아닙니다
이는
listOf()가 바뀔 수 없다는 점 때문입니다
좋습니다
그럼 이제 만약 shoppingList.add를 해보면 아무것도 추가할 수 있는 것이 없습니다
이 add 메소드 또는 함수는 항목을 추가할 때 사용됩니다
그럼 이것을 어떻게 mutable(변할 수 있는) 리스트로 만들까요?
한 번 시도해 봅시다
하지만 이번에는 mutableListOf()를 사용할 것입니다
좋습니다
mutableListOf()를 사용하면 listOf()의 데이터 종류를 정의할 수 있으며
이 홑화살괄호 안에 정의할 수 있습니다
하지만 그냥
이전에 사용한 것을 그대로 전달해 넣을 수도 있습니다
이 쇼핑리스트는 그저 보여드리기 위함이었으니 지워주겠습니다
아무튼 Immutbale list는 이후에 항목을 추가할 수 없습니다
정확히는 초기화 이후입니다
이 리스트가 한 번 생성되고 나면 그 후에 아무것도 추가할 수 없습니다
하지만 이 mutable list는
나중에 항목을 추가하거나 수정할 수 있습니다
두 가지 다 이상적입니다
가끔은 무언가를 추가할 수 없는 리스트가 필요할 때도 있습니다
한 번 생성되고 나면 다시는 바뀌지 않는 것입니다
하지만 우리 쇼핑 리스트의 경우 아마 나중에 항목을 바꿔야 할지도 모릅니다
항목을 추가하거나 제거할 수 있어야 합니다
지금 우리 쇼핑 리스트에서 빠진 게 무엇인지 아십니까?
누군가는 쿨링 시스템이라고 할 수도 있겠습니다 이전에 Joe가 매장에서
이것을 추가하고 싶어 했기 때문입니다
그러면 어떻게 리스트에 항목을 추가할 수 있을까요?
그건 그저 리스트의 이름을 호출한 다음
.을 붙히면
사용할 수 있는 메소드들이 많이 보입니다
저는 이것들을 메소드라고 부릅니다
보시다시피 m 표시가 있습니다
메소드는 쉽게 말해서 객체의 맥락에서 작동하는 함수입니다
그리고 앞서 말했듯 Kotlin 내 모든 것은 객체이며 적어도 그게 공식 문서의 설명
이었습니다
아무튼 우리는 이 메소드 혹은 함수를 사용할 수 있습니다
내부적으로는 함수라고 할 수 있습니다
함수는 함수인데 객체 환경에서 동작하는 것입니다
그러니까 메소드라고 불러도 괜찮습니다
적어도 Kotlin에서는 괜찮습니다
다른 프로그래밍 언어에서는
해당되지 않을 수도 있습니다 특히 JavaScript의 경우 그렇습니다
좋습니다
여기 add 메소드가 있는데 사용해 보겠습니다
매개변수들도 보입니다
우리가 전달해야 하는 것들입니다
index(인덱스)와 element(요소), 혹은 element만 전달할 수도 있습니다
그러면 add를 입력해서 이 add 메소드를 사용해 보겠습니다
그 다음 추가하고 싶은 항목을 입력해야 합니다
Cooling System(쿨링 시스템)입니다
좋습니다
그러면 이제 5개의 항목을 가진 쇼핑 리스트가 생겼으며
프로세서, 램, 그래픽 카드, SSD가 포함되어 있습니다
그러면 이제 이 그래픽 카드가 우리가 처음에 생각해둔 그래픽 카드라고 해봅시다
예를 들어 RTX 3060였다고 가정을 해보고 매장을 둘러보다 보니
세상에나 RTX 4090을 발견했고 예산도
충분합니다
그럼 기존 항목은 지워야 합니다
그럴 땐 shoppingList.remove를 사용합니다
이런 식으로 항목을 제거할 수 있습니다
그리고 이는 index(인덱스)를 사용해 제거할 수도 있는데
인덱스는 리스트 내 위치를 의미합니다
아니면 이름으로 특정 항목들을 제거할 수 있습니다
아니면 특정하게 첫 번째 혹은 마지막 항목을 제거할 수도 있습니다
이것도 매우 유용하지만 이는 나중에 살펴보도록 하겠습니다
그러면 어떻게 그래픽 카드를 제거할 수 있을까요?
그건 괄호 안에 여기 쓴 것과 똑같은 이름을 입력해 주는 것입니다
그러면 그 항목이 제거된 것입니다
자
이제 쇼핑리스트에 새로운 그래픽 카드를 추가할 수 있습니다
이번에는 4090이 될 것입니다
그러면 갑자기 우리 PC가 고성능 게이밍 PC가 되었습니다
여기까지가 리스트의 간단한 소개였습니다
그러면 이 쇼핑 리스트를 출력해보고 IDE가 어떻게 보여주는지
확인해 봅시다
그러므로 Basics.kt를 실행하고 오늘의 첫 실행이므로
Gradle이 구축되고 다시 처음부터 시작됩니다
이제 리스트에 무엇이 있는지 보입니다
프로세서, 램, SSD, 쿨링 시스템, 그래픽 카드 RTX 4090이 있습니다
하지만 보시다시피 순서가 바뀌었습니다
다시 살펴보면 그래픽 카드의 위치는 세 번째였습니다
index(인덱스)는 2여야 하는데 그건 다음 영상에서 다뤄볼 것이고 아무튼 그것이 이 그래픽 카드의
위치여야 합니다
하지만 결과를 살펴보면 마지막에 있습니다
그 이유는 우리가 이것을 제거하고 나서
새로운 이름의 새로운 항목이 리스트 끝에 추가되었기 때문입니다
우리가 했던 것처럼 인덱스 없이 .add()를 사용하면 리스트 마지막에 추가됩니다
인덱스가 무엇인지는 다음 영상에서 살펴보도록 합시다
이번 영상에서 알아두셔야 할 것은 여러 개의 정보를 저장할 수 있다는 것입니다
Strings로만 이루어져 있을 수도 있고
Int일 수도 있고 모든 종류의 데이터일 수 있습니다
클래스를 기반으로 우리가 생성한 객체일 수도 있으며 혹은
Kotlin이 생성한 클래스 기반 객체일 수도 있습니다
이해되셨나요?
그러니까 리스트는 간단한 데이터 종류들에 국한되지 않습니다
리스트는 더 복잡한 데이터 종류를 다룰 수 있습니다
좋습니다
그럼 인덱스를 살펴볼 다음 영상에서 뵙겠습니다