2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] 개발에 필요한 기초 지식 (정리편)

2024. 11. 15. 02:23ㆍIOS/Swift
SMALL

변수 - 값을 저장하고 다르는 방법

변하는 수라고도 한다.

변수 = 데이터가 저장되는 "공간"

변수의 쓰임은 어떻게 되는가?

 

변수의 선언

var place: String

 

var는 "이것이 변수이다" 를 나타내는 것

그 다음에는 변수에 이름이 따라 온다.

 

콜론(:)은 변수의 종류를 나타내기 위한 준비

이 변수를 String 라는 종류다.

 

변수에 값을 넣어주려면

대입 해줘야 한다.

 

외우기 보다는 익혀야 한다.

 

var = 변수임을 알려주는 키워드

place = 변수의 이름

: = 타입을 입력 준비

String = 타입


변수의 타입 - 데이터의 종류

냉장고에도 칸마다 용도가 있습니다

서로 다른 용도의 칸에 넣으면

어떻게 되는가?

 

Swift의 변수에도 종류, 타입이 있다.

"1+1 = 2" 가 맞나?

"super" + "man"은?

"super" - 1은?

String 문자열
int(integer) 정수 (-1, 0, 1, 2...)
Float 실수 (1.3, 4.23423...)
Double 더 긴 실수 (1.3, 4.2332452345....)
Bool 참과 거짓 (true, false)

 

타입이 중요한 이유

스위프트는 안전을 지향한다.

ex) 

2+2 = 4

"2"+"2"= "22"

2+2-2 = 2

"2"+"2"-"2" = 20 ?

 

사칙연산이 가능합니다.(계산기)

타입에 따라 지원하는게 다르다.


컬렉션 - 여러개의 변수를 만드는 방법

모음집을 이야기 한다.

어레이, 셋, 딕셔너리

기능은 엄청나게 많다.

 

주요 핵심 컬렉션

Array

같은 변수를 만드는 방법이다

재료를 넣는 공간, 변수가 많이 필요하다면 사용한다.

변수를 []로 감싸주기만 하면 된다.

let data:[String] = ["A","B","C"]

Array에 들어간 모든 변수는 String 이다.

인덱스로 접근한다.

 

data[0] 에는 무엇이 들어가 있을까요? 바로 Eggs가 들어 있다. 

 

Array(배열-같은 변수 만들기)
Indexes Values
0 Six Eggs
1 Milk
2 Flour
3 Baking Powder
4 Bananas

 

Set = 한국어로 집합이다.

Array와 비슷하다.

let musics: Set<String> = ["Rock","Jazz","Classical"]

부분집합, 교집합, 합집합 등등... 사용 가능 하다.

같은 요소들은 제거 (중복을 제거)

순서가 없습니다.

Set (집합 - 모임)
Values
Rock Jazz
Classical Hip Hop

Dictionary

키와 밸류를 가진 사전이다.

영한 사전을 생각해보면 쉽다.

Apple -> 사과

Desk -> 책상

var dict = [키 : 밸류]
// 혹은 아래와 같이 사용
var dict = ["XYZ":"Toronto Pearson"]
// 혹은 아래와 같이 사용
dict["XYZ"]
Dictionary (사전 - 키와 밸류)
keys   Values
YYZ -> Toronto Pearson
DUB -> Dublin Airport
LHR -> London Heathrow

 


조건문 - 조건에 따라 다르게 동작하는 방법

예/아니오를 가르는 방법

문법으로 변환

ex) if문을 이해 하였는가? 

 

위 이미지들을 코드로 해석해보면

if (if 문을 이해 했는가?) {
	다음으로 넘어간다
} else(아니라면) {
	if문을 다시 공부한다
   }

"if" 다음에는 "참/거짓"을 판별하는 문장.

"참"일 때에는 "if"다음의 "[]" 사이를 실행.

"거짓"일 때는 "else" 다음의 "[]" 사이를 실행.

"else"는 없어도 괜찮다.

간단정리 - 참일 경우만
간단정리 - 거짓일 경우
가드문 (가드문도 if 문과 비슷한 개념)


반복문 - 같은 코드를 반복하는 방법

코드를 반복해주는 문법

같은 코드를 반복하기도 하고

다른 용도로도 사용.

 

여러 데이터들(컬렉션)을

순회하는 용도로 사용.

 

for, while, forEach 등 여러가지가 존재

하나만 공부하고 나머지는

내가 알고있는 반복문이 불편할 때 공부.

 

실제 반복이 힘들어서 고민 후에

사용하는 것도 좋은 연습이다.


ForEach (폴 잇취)

- Array와 함께 많이 사용

- 데이터에는 반복이 될 데이터를 넣는다.

- 반복이 되려면 식별이 된다.

- array는 index가 있어서 식별이 된다.

데이터에서 꺼내서 item에 넣는다.

하나씩 하나씩 꺼내서 넣고 code를 실행한다.

let data = ["A","B"]
forEach (data, id:\.self){
	item in
    print(item)
}

A와 B 두개의 문자열이

들어간 배열을 반복할 예정이다.

 

그러기 위해

반복문임을 알려주는 키워드

forEach를 사용한다.

 

"data, id:\.self"이 내용중에

data는 무엇을 반복할 것인지

데이터를 넣어주는 부분이며,

보통은 컬렉션이 들어가며

", id:\.self" 반복을 하려면 순회를 해야 하는데,

위 컬렉션의 A 한번하고 B한번하고

계속 반복을 해야하는데,

달라보일 수 있다.

 

어쩌면 동명 2인이 존재 한다면

ex) A A A A 같은 스트링이 Array 안에

여러개가 들어가 있을 수 있다.

 

그렇다면 동명 2인은

어떻게 구별을 해야하는가?

 

배열은 index 라는 식별값이 있다.

배열자체에서 식별할 수 있는 값을

이미가지고 있다.

 

그래서 id는 이 반복을 하는 녀석을

"난 어떻게 구별 해야대 이 식별값의 id값은 뭐야?

아 이친구는 말이야 \.self 자기 자신이 이미 가지고 있어

이 배열은 이미 가지고 있는거야" 라는 의미

 

item in

forEach 라는 반복문은 데이터라는

여러개의 데이터 컬렉션에서 순회를 하면서 반복을 하는데

첫번째 바퀴에서는 A를 꺼내고,그 꺼낸 A를 item에 넣게된다.

 

그리고 우리는 아 아이템을 출력한다. print(item)

여기서 끝이 아니다.

데이터가 2개이니까 B라는 데이터도 있는데

데이터에서 이 B도 빼서 다시 item에 넣어준다.

그리고 출력을 하는 거다.

 

총 정리

forEach (데이터, 식별값) { item in
	code 
}

반복문임을알려주는 키워드 = "forEach"

반복에 사용 할 데이터 = (데이터, 식별값)

데이터에서 하나를 꺼내어 "item" 이라는 곳에 넣어준다.

item이 변수라는 것을 알려준다. = "in"을 통해서

* 반드시 item을 써야하는 것은 아니다.

다만 forEach문을 쓴다는것은 반복을 한다는 것이며,

반복을 한다는것은 어디선가 꺼내온

데이터를 쓴다는 뜻이기에 되도록이면 item을 쓸 수 있도록

로직을 짜야된다.

 

* 반복문의 경우는 많은 연습을 통해

알아갈 수 있으니 꼭 연습이 필요하다.


함수 - 같은 동작을 하는 방법

Input x -> FUNCTIONF: -> OUTPUT f(x)

 

아래에는 좀더 쉽게 풀어서 보자.

4 -> +5 -> 9

 

어릴때 부터 너무 괴로웠던 함수

입력값, 출력값, 그리고 함수내용

핵심 = 같은 동작을 하는 방법

 

함수는 입력값이 무엇이 들어오든 간에

가운데 있는 +5 는 같은 동작을 해준다.

1이 들어오던 2가 들어오던 +5를 해주는 거다.

 

단, 입력 값에 따라 출력값은 변하는건 사실이다.

 

함수만들기

사용방법은 아래와 같다.

func 함수이름 (매개변수 이름: 값) {
       실행 될 코드
}

추상적화 된 단계로부터 하나씩

실제 코드단계로 이행해보자면

아래와 같아진다.

func plusFive (매개변수 이름: 값) {
       실행 될 코드
}

이 함수는 어떤 동작을 하냐하면, 

plusFive 를 하는구나 라고 이해하면 된다.

이름이 그런것이다.

func plusFive (input: Int) {
       실행 될 코드
}

input이라는 녀석을 받는구나

그리고 input이라는 녀석은 정수이구나

라고 이해하면 된다.

 

func plusFive (input: Int) {
       print(input + 5)
}

함수의 이름은 plusFive,

그리고 정수를 입력을 받는데

그 받은 정수의 이름은 input이고,

다음에 함수가 호출 될 때 마다 input의 5를

더한것을 출력해 주는 녀석이구나 라고

이해하면 된다.

 

저 동작을 계속 할 수 있는 것이구나

라고 이해하면 쉽다.

 

자주 쓰는 코드에 변화를 시키고 싶은 것이

하나 있다면 함수를 사용하는 것이 좋다.

 

즉, 

4 + 9를 계속 하고 싶다면 반복문일 것이고,

무엇이 들어오든 간에 +5를 하고 싶다면

함수를 사용하면 되는것이다.

이 또한 많은 연습을 하는 것이 중요하다.

 

함수는 값을 반환할 수 있다.

func plusFive (input: Int) {
       print(input + 5)
       return input +5
}

 

* 정리 *

 

func 함수이름 (매개변수 이름: 값) {
       실행 될 코드
return
}

 

함수임을 알려주는 func 키워드

그 다음으로 함수이름이 오고

그 다음으로 입력값과 그 종류가 온다.

그 다음으로 "{" 으로 시작하여 "}"까지의

실행될 코드가 들어가며,

하나더 나아가 return 반환 할 값을 넣어주어야 한다.


구조체 - 하나의 동작을 하는 객체 만들기

구조체의 정의

 

구조체(Structures) 값을 전달하기 위한 데이터 타입을 정의하는 데 사용합니다.

구조체는 클래스(Class)와 유사하지만

몇 가지 중요한 차이점이 있는데,

구조체는 값 타입(Value Types)이며, 

클래스는 참조 타입(Reference Types)인 점이다.

이는 구조체 인스턴스가 복사되어 전달되고 할당될 때

별도의 인스턴스가 생성된다는 것을 의미한다.

 

간단히 정리를 해보겠습니다.

 

값 타입(Value Types): 구조체는 값 타입이므로 인스턴스를 전달할 때에는 복사가 된다.

구조체의 인스턴스가 독립적으로 존재하고 서로 영향을 주지 않음을 의미한다.

 

구조체 초기화(Initialization): 구조체는 자체적으로

멤버 초기화 이니셜라이저(Memberwise Initializer)를 가진다.

이니셜라이저를 통해 구조체 속성의 초기값을 설정할 수 있다.

 

값 변경(Mutability): 기본적으로 구조체 내의 속성은 상수로 선언되어 있기 때문에

메서드 내에서 속성을 수정하려면 mutating 키워드를 사용해야 한다.

 

상속 불가능(Non-inheritable)구조체는 다른 구조체로부터 상속받을 수 없습니다.

상속을 지원하는 클래스와 달리 구조체는 확장이 불가능하다.

 

스택에 할당(Stack Allocated)구조체 인스턴스는 스택에 할당된다

메모리 할당과 해제가 빠르고 효율적이지만,

크기가 큰 구조체를 사용할 때 주의해야 함을 의미다.

 

구조체는 "struct" 키워드를 사용하여 정의 한다.

각 구조체는 속성(Properties)과 메서드(Methods)를 포함할 수 있습니다.

구조체는 값의 일부로 사용되는 데이터 구조를 나타내는 데 자주 사용되며,

예를 들어 벡터, 점, 사각형 등을 표현하는 데 구조체를 사용할 수 있다.

 

작은 데이터 타입을 나타내거나

간단한 값의 집합을 포함하는 데 사용한다.

 

 

 


클래스 - 주소값으로 객체를 만들기

클래스(Class)는 객체지향 프로그래밍의 핵심 요소 중 하나이며,

데이터와 해당 데이터를 처리하는 메서드를 함께 묶어서

캡슐화하는 객체(Object)를 생성하는데 사용한다.

 

기능의 재사용성과 코드의 구조화를 촉진하며,

객체지향 프로그래밍에서 상속, 다형성, 캡슐화 등의

개념을 지원한다.


* 클래스의 특징 *

참조 타입(Reference Types):

클래스는 참조 타입이므로 인스턴스를 생성할 때에는

메모리에서 동적으로 할당되며,

변수나 상수에는 인스턴스의 참조가 저장된다.

즉, 여러 변수가 동일한 인스턴스를 참조할 수 있음을 의미한다.

 

상속(Inheritance)

클래스는 다른 클래스로부터 상속을 받을 수 있다.

상속을 통해 기존 클래스의 속성과

메서드를 재사용하고 확장할 수 있다.

 

다형성(Polymorphism)

스위프트는 상속을 통해 다형성을 지원합니다.

서브클래스는 슈퍼클래스의 메서드를 재정의(Override)할 수 있으며,

이를 통해 같은 이름의 메서드가 서로 다른 동작을 수행할 수 있다.

 

캡슐화(Encapsulation)

클래스는 데이터와 해당 데이터를 처리하는 메서드를

하나의 단위로 묶어서 캡슐화할 수 있습니다.

캡슐화를 통해서 클래스의 구현 내부를 숨기고

외부에 필요한 인터페이스만 노출할 수 있다.

 

참조 카운팅(Reference Counting)

스위프트는 ARC(Automatic Reference Counting)을 사용하여 메모리 관리를 합니다.

클래스 인스턴스는 참조 카운팅을 통해

메모리에서 자동으로 해제된다.

 

구조체와의 비교

클래스와 구조체는 모두 데이터와 메서드를 묶어서

사용할 수 있는 기능을 제공하지만,

클래스는 참조 타입이고 구조체는

값 타입이라는 중요한 차이가 있습니다.

또한 클래스는 상속과 참조 카운팅을 지원하며,

구조체는 상속을 지원하지 않고 값 복사를 통해

데이터를 전달한다.

 

클래스는 주로 복잡한 데이터 모델이나 

상속이 필요한 경우에 사용되며, 

객체지향 프로그래밍의 개념을 

구현하는 데 사용된다.

 

이상으로 개발에 필요한 기초 지식을 정리해 보았다.

기초지식인 만큼 개발자로 이직을 결심하거나

개발자로써 훗날 회사에 들어갈 때

면접에서도 도움이 되길 바란다.

728x90

'IOS > Swift' 카테고리의 다른 글

Swift 기초 문법 정리본  (0) 2024.02.24
Swift 연산자  (0) 2024.02.18
Swift 자료형  (0) 2024.02.18
Swift 변수와 상수  (0) 2024.02.18
Swift 간단 기초 문법  (0) 2024.02.18