변수 - 값을 저장하고 다르는 방법
변하는 수라고도 한다.
변수 = 데이터가 저장되는 "공간"
변수의 쓰임은 어떻게 되는가?
변수의 선언
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"는 없어도 괜찮다.
반복문 - 같은 코드를 반복하는 방법
코드를 반복해주는 문법
같은 코드를 반복하기도 하고
다른 용도로도 사용.
여러 데이터들(컬렉션)을
순회하는 용도로 사용.
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)을 사용하여 메모리 관리를 합니다.
클래스 인스턴스는 참조 카운팅을 통해
메모리에서 자동으로 해제된다.
구조체와의 비교
클래스와 구조체는 모두 데이터와 메서드를 묶어서
사용할 수 있는 기능을 제공하지만,
클래스는 참조 타입이고 구조체는
값 타입이라는 중요한 차이가 있습니다.
또한 클래스는 상속과 참조 카운팅을 지원하며,
구조체는 상속을 지원하지 않고 값 복사를 통해
데이터를 전달한다.
클래스는 주로 복잡한 데이터 모델이나
상속이 필요한 경우에 사용되며,
객체지향 프로그래밍의 개념을
구현하는 데 사용된다.
이상으로 개발에 필요한 기초 지식을 정리해 보았다.
기초지식인 만큼 개발자로 이직을 결심하거나
개발자로써 훗날 회사에 들어갈 때
면접에서도 도움이 되길 바란다.
'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 |