소소한 일상과 잡다한 정보

APPLE/Swift 문법

[기초 문법] 컬렉션 타입

pandada 2022. 8. 4. 10:07
반응형

저번에 상수와 변수 / 데이터 타입에 대해서 알아봤다.

이번에는 컬렉션 타입에 대해서 알아보도록 하자.

기본적으로 컬렉션 타입은 C나 java에서 얘기하는 배열, ArrayList라고 생각하면 편할 것 같다.

 

처음 개발 언어를 Swift로 접근을 진행한 사람들을 위해서 배열의 간단한 내용을 작성하고 넘어가려고 한다.

 

배열

  • 1 묶음 이라고 생각하면 편함.
  • var a : Int = 10 / var b : Int = 20 / var c : Int = 30 이런 값들을 여러 개의 변수를 사용해야하니 불편하다..
  • 이를 위해 묶음으로 다루는 내용을 배열이라고 함
  • var a : [Int] = [10, 20, 30 ] 이렇게 한번에 표현을 할 수 있고, 넣다 뺐다 사용할 수 있다.

 

참고로 필자의 간략한 설명이 이해가 되지 않는다면 다른 글들을 참고하면 좋을것 같다.

 

 

배열이 뭔지 대략적으로 작성해봤다.

 

자 이제 Swift의 컬렉션 타입이 뭔지 대략적으로 확인을 해보자.

 

컬렉션 타입

  • 데이터들의 집합 묶음
  • Array : 데이터 타입의 값들을 순서대로 저장하는 리스트
  • Dictionary : 순서없이 키(key)와 값(value) 한 쌍으로 데이터를 저장하는 컬렉션 타입
  • Set : 같은 데이터 타입의 값을 순서없이 저장하는 리스트

대략적인 컬렉션 타입에 대한 정의와 Swift에서 제공하는 종류에 대해서 알아보았다.

 

그러면이제 순서대로 하나씩 정해서 진행을 해보도록 하자.

 

우선적으로 Array 즉, ArrayList라고 판단하면 되며, Array에 대해서 확알아보도록 하자.

 

< Array 선언 >

우선 기본적으로 Int형을 가지고 있는 test01 이라는 Array를 생성하였다.

필자처럼위에 아무것도 작성을 하지 않았을 경우에는 우측에 바로보기 화면에서 확인되는거처럼 비어있는 Array가 생성이된다.

즉, 비어있음으로 [] 표기가 된다.

 

그럼 이제 test01에 값을 넣어보자.

Array에 값을 넣을때에는 append라는 함수를 사용한다.

 

< test01.append >

append를 통해서 비어있는 test01의 Array에 1, 5, 4를 순차적으로 넣어줬다.

append는 기존에 Array에 들어있는 값의 뒤에 순차적으로 넣어주는 부분이다.

1이 먼저 들어갔고, 5, 4 가 순차적으로 들어갔음으로 인하여 [ 1, 5, 4 ] 가 들어갔다.

 

 

쉽게 그림으로 설명을 진행해보자.

< Array 순서 >

위의 그림이 현재 Array의 순서이다. 첫번재 넣었을때에 0번째 인덱스에 1의 값을 넣었다.

이후에 1번째 인덱스에 5의 값을 넣었다.

이런 순서로 진행된다. 위의 그림에서 빨간색은 인덱스의 번호이다.

컴퓨터는 0부터 시작임으로 인하여 0번째 부터 들어간다고 생각하면 된다.

 

그럼 이제 해당 인덱스의 값을 삭제해보도록 하자.

 

< remove 방법 >

1번째 인덱스의 값을 지웠다. 여기서 Array에서 값을 지우는 방법은 remove 함수를 사용하는 것이다.

test01.remove(at : 1 ) 을 사용하면 1번째 인덱스의 값을 지워라. 

따라서 현대 test01의 Array의 값은 [ 1, 4 ]가 되었다. 

해석한다면 0번째 인덱스에 1이 있고, 1번째 인덱스에 4가 있는 부분이다. 1이 삭제된다고 해서 해당 인덱스가 비어있는 내용이 아니라는 것을 알아두도록 하자.

 

 

추가와 삭제에 대해서 간략이 알아봤다. 이제 해당 Array를 간략하게 표기하는 방법에 대해 알아보도록 하자.

 

< var test02 : [Int] = [1, 2, 3, 4, 5 ] >

기존에는 

var test01 : Array<Int> = Array<Int>()

이렇게 사용하는 내용을

var test01 : [Int] = []

이렇게 활용할 수가 있다.

위 두 문장은 서로 같은 내용의 Array를 표기하는 부분이다.

 

편하는 부분을 사용하면 되지만 대부분의 사람들은 아래의 내용을 토대로 코딩을 하기 때문에 되도록 아래의 내용으로 진행을 하는 것을 추천드린다.

 

그럼 이제 값을 뒤에만 넣는 부분이 아닌 특정인덱스에 값을 넣어보자.

즉 Array의 사이에 한번 값을 넣어보도록 하자.

 

< insert >

insert 함수를 통하여 50의 값을 1번째 인덱스에 삽입을 하였다.

 

따라서 해당 값들이 50 이후에 뒤로 하나씩 미뤄진 부분이다.

 

이렇게 삽입과 삭제를 통해서 Array를 맘대로 늘렸다 줄였다 진행을 할 수 있다.

 

이제 Array에 대해서 알아봤으니 다들 한번씩은 실습을 통해서 진행해보는 것을 추천한다.

 

그럼 이제 Dictionary에 대해서 알아보도록 하자. 

 

위에서 언급했다 싶이 Dictionary는 키값을 가지고 활용하는 부분이다.

즉, Array에서 인덱스가 자동으로 증가하는 부분을 인덱스가 아닌 특정 키값으로 Array 처럼 만든다고 생각하면 편하다.

 

< Dictionary >

Dictionary 또한 함축적으로 사용할 수 있다.

가장 기본적인 Dictionary의 문법은 

var 변수이름 : Dictionary<키값 타입, 내용 타입 > = Dictionary<키값 타입, 내용 타입 >()

이렇게 사용을 한다.

 

하지만 이렇게 길게 사용할 경우에는 귀찮기 때문에.. 필자처럼 대부분 아래의 내용으로 활용을 한다.

 

이방법으로 알고 있도록 하자. 그렇다고 가장 기본적인 문법을 모르면 안된다. 개발자들마다 개발하는 방식의 차이가 있기 때문이다.

 

 

자 그럼 키값도 넣고, 빼고를 진행해보자.

 

Dictionary의 경우에는 Array처럼 앞/뒤에 넣을 필요가 없다. 왜냐면 특정 키값으로 값이 매칭이 되기 때문에 굳이 순서에 연연하지 않아도 되기 때문이다.

 

< Dictionary 값 대입 >

 

Dictionary의 값 대입은 키값을 선언하고 그 안에 값을 넣어주면 된다.

필자는 키값 1에 데이터 kim을 넣었고, 키값 3에 데이터 choi를 넣었다.

 

그럼 이상태에서 키값 2의 데이터 hong을 한번 넣어보자. 아까 필자가 얘기한 대로 순서는 상관없다고 했음으로 확인을 시켜주려는 내용이다.

< Dictionary 순서 >

필자가 아까 위에서 순서는 상관없다고 얘기했다. 하지만 키값 2의 순서를 넣은 결과 출력의 순서가 바뀐 내용을 확인할 수 있다.

 

원래대로 라면 [2 : "hong" , 3 : "choi" , 1 : "kim"] 이렇게 순서가 되어야 하지만 

[3 : "choi" , 2 : "hong" , 1 : "kim"] 이렇게 되어있다. 자 그럼 이제 왜 그런지 확인을 해보자.

 

Swift상에서 정렬은 딱히 상관이 없지만 키값에 대한 내용의 순서는 랜덤으로 들어간다. 이런 순서를 정렬하기 위해서는 별도의 키값이나 sorted 즉, 정렬을 사용하는데 이부분은 나중에 진행하도록 하자.

 

그럼 왜 위의 이미지는 정상적으로 잘 표기가 된걸까? 그건 모른다. 그거는 Swift상에서 랜덤으로 표기 하기 때문이다...

 

 

그럼 다시 한번 재생을 해보도록 하자.

 

< 순서가 바뀌어 있는 Dictionary 확인 >

이렇게 두 번째에 실행할때는 또 순서가 바뀌어져 있다. 이처럼 순서에는 상관이 없는 부분이라는 것을 알고 있으면 될 것 같다.

 

그럼 이제 삽입관련된 내용을 확인하였으니, 이제 값을 한번 삭제해보자.

 

< removeValue >

삭제를 하고 싶은 경우에는 removeValue 함수를 사용하여, 삭제를 원하는 키값을 입력한다.

키값 1에 들어있는 kim을 삭제하기 위해서 필자는 studen2.removeValue(forKey : 1 )을 사용했다.

 

자 그럼 이때에 또다른 의문이 생긴다. 테이블 처럼 키값 1개에 값이 여러개도 진행할 수 있지 않을까? 

이런 생각을 하는 사람을 본 경험이 있기 때문에.. 한번 진행을 해보도록 하자.

 

< 3개의 데이터 타입을 사용할 경우의 에러 내용 >

이렇게 3개의 데이터 타입을 사용할 경우 에러가 발생한다. 에러의 내용을 확인해보자.

 

Generic type 'Dictionary' specialized with too many type parameters (got 3, but expected 2)

 

Dictionary 타입에는 2개의 파라미터만 사용할 수 있다. 라는 에러가 나온다. 즉, 2개의 데이터 타입만을 사용할 수 있으며, 2개의 데이터 타입만 짝을 지어서 사용할 수 있다는 부분을 알고 넘어가자.

 

3개의 파라미터를 사용할 때는 그냥 Array로 만들어서 사용을 하면 된다. 

 

 

그럼 이제 Set에 대해서 알아보도록 하자.

 

Set은 위에서 언급했다 싶이 같은 데이터 타입의 값을 순서 없이 저장하는 리스트이다.

 

소스를 통해 내용을 확인해보자.

 

< var studen3 : Set = Set<Int>() >

Set을 사용하는 문법은 

변수타입 변수명 : Set = Set<데이터타입>() 이렇게 사용을 한다.

 

student3라는 리스트를 만들었다. 그럼 이 리스트에 값을 입력해보자.

 

< insert 내용 >

Set은 insert 함수를 사용하여 입력을 할 수 있다.

insert가 성공할 경우 옆의 자동 보기 창에 inserted true 로 표기가 된다.

그럼 마지막의 student3.insert(30)은 왜 입력이 되지 않았을까.

 

Set같은 경우에는 중복값을 허용하지 않는다.

 

따라서 30을 처음에 insert 했기 때문에 마지막 30을 다시한번 insert 할때에는 입력이 되지 않는 것을 알면 되겠다.

 

< Set은 순서가 없다. >

위에서 언급했다 싶이 Set은 순서도 없고, 키도 없는 값의 리스트이다.

Set의 값을 삭제할때에는 remove 함수를 사용하지만 위의 이미지에서 나오는 것 처럼 student3.remove(3)을 했을 경우에는 진행이 되지 않는다. 삭제를 하는 값이 nil 이다. 

 

여기서 nil은 sql이나 자바, C에서 얘기하는 null이다. null을 Swift에서는 nil 로 표기를 진행하는 부분이다.

 

Set을 사용하여 값을 삭제하고 싶은 경우에는 삭제하고자 하는 값을 넣어준다. 따라서 student3.remove(30)은 삭제가 정상적으로 되는 부분이다. 

 

Set이 순서가 없고, 중복값이 들어가지 않음으로 키값으로만 삭제가 충분히 되기 때문이다.

 

자 그럼 이번에는 Swift의 컬렉션 타입에 대해서 알아봤다.

 

공부를 하는 입장에서 따라서 실습을 해보는 것이 좋지만 다른 방향으로 직접 이것저것 해보는 것이 더 좋다는 것을 알려드리며..

 

다음에 또 포스팅을 진행하도록 하겠다.

 

반응형

'APPLE > Swift 문법' 카테고리의 다른 글

[ 기초 문법 ] 옵셔널  (0) 2022.08.08
[기초 문법] 반복문  (0) 2022.08.05
[기초 문법] If문과 Switch 구문  (0) 2022.08.05
[기초 문법] 함수 ( func )  (0) 2022.08.04
[기초 문법]상수와 변수 / 데이터 타입  (0) 2022.08.02