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

최근 글 👑

[Swift-Study] 기초 문법종합반 1주차 1일차 정리 - 연산자, 조건문과 반복문

2024. 3. 11. 20:48ㆍIOS/Swift-Study
SMALL

연산자

산술 연산자
덧셈 뺄셈 곱셈 나눗셈 나머지
+ - * / %
+= -=

 

var result = 1 + 2
print(result)
// 출력값: 3

result += 5
// result = result + 5
print(result)
// 출력값: 8

result = 10 - 6
print(result)
// 출력값: 4

result -= 3
// result = result - 3
print(result)
// 출력값: 1

result = 8 * 2
print(result)
// 출력값: 16

result = 12 / 5
print(result)
// 출력값: 2
result = 10 % 3
print(result)
// 출력값: 1
// result는 10을 3으로 나눈 후 나머지 이므로 1

 

비교 연산자

비교 연산자는 비교한 값을 truefalse로 반환

같다 / 같지 않다
크다 / 작다 크거나 같다 / 작거나 같다
같다
== b 크다 > b
(a가 b보다 크다)
크거나 같다 >= b
(a가 b보다 크거나 같다)
같지 않다 != 작다 < b
(a가 b보다 작다)
작거나 같다 <= b
(a가 b보다 작거나 같다)

 

var result = (1 == 2)
print(result)
// 출력값: false

result = (1 != 2)
print(result)
// 출력값: true

result = (1 > 2)
print(result)
// 출력값: false

result = (1 < 2)
print(result)
// 출력값: true

result = (1 >= 2)
print(result)
// 출력값: false

result = (2 <= 2)
print(result)
// 출력값: true

 

논리 연산자

논리 연산자는 비교한 값을 truefalse로 반환

논리 부정 NOT 논리 곱 AND 논리 합 OR
!a a && b a || b
논리 부정 연산자는 truefalse로,
falsetrue로 변환
논리 곱 연산자는
두 값(a, b)이 모두 true일 때 true를 반환

첫번째 값이 false라면
두 번째 값을 판단하지 않고 즉시 false를 반환
논리 합 연산자는
둘 중 하나가 truetrue를 반환

첫번째 값이 true라면
두 번째 값을 판단하지 않고 true를 반환

 

var A = false
A = !A
print(allowedEntry)
// 출력값: true

let B = true
let C = false
let D = B && C
print(D)
// 출력값: false

let enter = A || B
print(enter)
// 출력값: true

 

범위 연산자
(a…b) (a..<b) a... ...a
a 이상 b 이하 a이상 b 미만 범위의 시작 혹은 끝만 지정하여
사용하는 범위 연산자
X b는 범위에 포함 X a는 범위에 포함 O

 

(1...5)
// 1, 2, 3, 4, 5

(1..<5)
// 1, 2, 3, 4

(3...)
// 3, 4, 5, 6, 7 ...

let names = ["A", "B", "C", "D"]

for name in names[2...] {
    print(name)
}
// 출력값: 
// C
// D

for name in names[...2] {
    print(name)
}
// 출력값: 
// A
// B
// C

for name in names[..<2] {
    print(name)
}
// 출력값: 
// A
// B

 

삼항 연산자

a ? b : c

question ? answer1 : answer2

question의 답이 true이면 answer1을 사용, false이면 answer2 값을 사용

if-else 문을 간략히 표현했다고 보면 될 것 같습니다.

 

// 삼항연산자 예시 코드
let height = 150 // height 변수안에 150이라는 숫자를 넣어줍시다.

var A = (height > 185) ? "big" : "small" // 등호뒤에 삼항연산자를 계산을 하여서 값을 A에 넣어줍니다.
/* 
	height안에는 150이 들어가있으며 height이 185보다 큰지 물어보면 
	150은 185보다 작으니 "false" 이 나오는 것이고 "false"이 나오면 
    "small"이 A에 들어갑니다. 그리고 나서 print(A)를 하면 "small"이 나오는 것입니다.
*/

print(A)
// 출력값: small

// 위 삼항연산자 예시 코드를 if-else 문으로 표현 한다면 아래 코드와 같습니다.
var B = "" // 변수 "B"라는 곳에 빈문자열을 선언하고  
if height > 185 { // 만약 "height" 가 185보다 크면~
	B = "big" // "big"을 출력.
} else { // 그렇지 않다면~
	A = "small" // "small"을 출력.
}

/* 
	결론적으로 위 "if-else문"처럼 한번 쓸 것이라면 (계산된 값을 어떠한 변수에 할당할 것이라면...) 
	"삼항 연산자"로 간단히 나타내는 방법이 좋을 수 있습니다.
*/

 

주의할 점!

Swift는 띄어쓰기도 신경써야 하는 언어

ex)

a - b 와 a -b는 완전히 다른 의미이며

a - b는 a에서 b를 빼는 수식이고,

a -b 는 a와 -b를 의미


조건문

if 문

조건을 확인하는 문법으로 if 문에 작성한 조건이

true인 경우에만 구현부 코드를 실행

// if 뒤 "조건"은 Bool 타입 즉 true 혹은 false 이어야 합니다
if <#조건#> { // 조건이 충족이 된다면
  // 구현부 코드가 실행이 되는 것입니다.
}

// 조건문 간단 예시 1.
var A = 17 // 'A'라는 변수를 만들고 '17'을 넣어줍니다. (A=17)
if A <= 13 { // 'A'가 13보다 작거나 같냐? ('if문'은 항상 참, 거짓 값중에 '참'인지를 '우선적'으로 물어봅니다.)
/*
	현재 'A'는 '17'이고 '13'이라는 숫자는 '17'보다 작기 때문에 'false' 
    그렇기 때문에 다음 출력 문은 출력 되지 않습니다.
*/
    print("조건미달")
    
} else if A >= 22 { // 'if'에 충족이 안되면 "else"에 걸리게 됩니다. 'else'는 여집합의 개념입니다.
/* 
	현재 'A'는 '17'이 들어가 있고, 
    'A'가 '22'보다 크거나 같는지 물어보고 있지만,
	이것도 '거짓'이니 또다시 'else'를 줘야해요.
*/
    print("조건미달")
    
} else { // 위 두 조건도 아니니까 그냥 "else"
    print("조건달성") // 위 두 조건도 아니라면 '조건달성'을 표시하여라..
}
// 출력값: 조건달성..

// 조건문 간단 예시 2.
// 이렇게도 가능합니다.. 'true'는 '참'이기 때문에 실행되며 'false'는 '거짓'이기 때문에 실행이 안되죠..
if true {
		print("항상 실행됩니다")
}
// 출력값: 항상 실행

if false {
		print("항상 실행")
}
// 출력값: (없음) - if 뒤 조건문이 false이므로 중괄호 내부 코드가 실행되지 않습니다.
switch 문

switch 문은 가능한 여러 개의 일치하는 케이스와 값을 비교

그런 다음 일치하는 첫 번째 케이스를 기반으로 구현부 코드 블록을 실행

 

switch 문은 여러 잠재적 케이스에 대응하기 위해 if 문을 대신 사용가능

열거형(enum)과 함께 자주 사용

 

모든 케이스가 적용되지 않는 경우 "default"에 구현된 코드가 실행되며,

"default"는 항상 마지막에 표시되어야 함

(else와 비슷한 개념이라 보면 됩니다.)

 

특정 케이스에 실행 구문이 없을 경우 "break" 키워드를 반드시 사용

특정 케이스에 해당되어 실행 구문이 실행된 이후에

다음 케이스 블럭을 실행하려면 "fallthrough" 키워드를 사용

// switch문의 예시 (if 조건문과의 차이점)
// if 조건문 방식 = 조건이 들어가고 조건이 true면 그 값을 실행합니다.
if <#조건#> {
  // 구현부 코드
}

// switch문 예시 1
/* 
	switch문 방식 = 조건이 들어가고 그 값이 case1에 들어간다면 
    구현부 코드가 실행이 되고 값2 값3 case2에 포함이 된다면 
    case2 구현부가 실행이 되고 만약 두 case1, 2 둘다 걸리지 않았다면 
    default 부분이 실행이 되는 구조입니다.
*/
switch <#조건#> { // switch를 선언하고 그 안에 
case <#값 1#>: // 그 값이 case1에 구현부 코드가
    // 구현부 코드
case <#값 2#>,
    <#값 3#>:
    // 구현부 코드
default:
    // 모든 케이스가 적용되지 않는 경우
    // 구현부 코드
}

// switch문 예시 2 (간편설명)
let cookie = 62 // 쿠키가 62개가 있다..
let message: String // 메세지라는 문자열 변수가 있다..
switch cookie { // 쿠키는 불린값이 아니고 Int 타입이고 그 안에 '62'개의 쿠키가 들어 있다.
// 위 cookie의 개수가 어느 케이스에 해당하는지 알아야한다. 
case 0: // 쿠키의 개수가 0개냐? -> 쿠키의 개수가 62개이기 때문에 해당 안됨.
    message = "없음" // 조건에 부합하지 않아 출력안됨.
case 1..<5: // 쿠키의 개수가 1이상 5미만 개냐? -> 쿠키의 개수가 62개이기 때문에 해당 안됨.
    message = "아주 조금 있음" // 조건에 부합하지 않아 출력안됨.
case 5..<12: // 쿠키의 개수가 5이상 12미만 개냐? -> 쿠키의 개수가 62개이기 때문에 해당 안됨.
    message = "조금 있음" // 조건에 부합하지 않아 출력안됨.
case 12..<100: // 쿠키의 개수가 12이상 100미만 개냐? -> 쿠키의 개수가 62개이기에 해당됨.
    message = "꽤 있음" // 조건에 맞아서 출력됨.
case 100..<1000: // 위 조건이 맞기에 이 조건이 맞다 하여도 이 조건보다 위 조건에 해당되어 위조건을 실행
    message = "많음" // 위 조건이 맞기에 이 구문은 실행되지 않음
default: // 위 조건에 다 해당 안될 경우 실행
    message = "엄청 많음" // 위 조건이 맞기에 이 구문은 실행되지 않음
}
print(message) // 출력값: "꽤 있음"


// switch문 예시 3
let Animal = "시츄"
switch Animal {
case "말티즈" :
	print("말티즈입니다")
case "시츄":
	break // 내가 실행하고 싶은 구문이 없을때는 반드시 break를 써주어야 함
// break 구문이 없다면 에러가 표출, +
default: 
	print("강아지입니다")
}

// switch문 예시 4 (핵심:fallthrough-밑구문까지 실행)
// 기존에 5만 출력 되고 끝났어야 했지만, "fallthrough" 존재 하기에 밑 디폴트 값이 실행됨.
var number = 5

switch number {
case ..<5:
    print("under 5")        
    fallthrough
case 5:
    print("5")
    fallthrough // 해당 케이스의 구문이 실행된 이후에도 무조건 다음블럭을 실행
default:
    print("default")
}
// 출력 결과 
// 5
// default

// switch문 예시 4 (핵심:enum- .으로 표현)
// default를 사용하지 않는 예시
enum Day {
    case monday, tuesday, wednesday, thursday, friday, saturday, sunday
}

func activities(for day: Day) {
    switch day {
    case .monday:
        print("월요일: 회사 회의")
    case .tuesday:
        print("화요일: 운동 가기")
    case .wednesday:
        print("수요일: 책 읽기")
    case .thursday:
        print("목요일: 친구와 만나기")
    case .friday:
        print("금요일: 영화 보기")
    case .saturday:
        print("토요일: 쇼핑하기")
    case .sunday:
        print("일요일: 가족과 시간 보내기")
    }
}

activities(for: .monday) // 월요일 출력
activities(for: .friday) // 금요일 출력

 

반복문

For - in 반복문

for문은 순회할 수 있는 타입(배열, 딕셔너리 등)을 순회하거나

특정 횟수만큼 로직을 반복할 때 주로 사용

 

// for-in문 예시 1
for 각 value의 변수 이름 in 순회할 수 있는 타입 {
     // 내부 로직
}

let ios : [String] = ["a", "b", "c", "d"]

for character in ios {
  print(character) // 한번씩 출력이 됩니다.
}

// 출력값: 
// a
// b
// c
// d

// for-in문 예시 2
let students = ["A": 2, "B": 4, "C": 1]

for (name, grade) in students { // name에는 A, B, C가 grade에는 2,4,1이 들어갑니다.
  print("\(name) 은 \(grade) 학년이야")
}

// 출력값: 
// A 은 2 학년이야
// B 은 4 학년이야
// C 은 1 학년이야
while 문

while문은 특정 조건이 만족하는 동안 내부로직을 계속해서 실행하는 반복문

종결 조건(디폴트) 을 정해주지 않으면 무한루프가 생길 위험성이 있음

while문은 반복문의 각 패스가 시작할 때 조건을 평가

// while 뒤의 "조건"은 Bool 타입, 즉 true 혹은 false이고, true일때 중괄호 내부 코드 실행
while <#조건#> {
   // 구현 코드
}

// while 예시문 1
let lastName : [String] = ["송", "김", "박", "정" ]

var index : Int = 0
while index < 4 {
    print("옆집 \(lastName[index]) 씨네 \(index)번째 결혼식") // index가 0이고 0은 송입니다.
    index += 1 // index에 1씩 증가, 즉 다시 실행시켜 무한 반복을 시켜줌
} // 반복이 되어 += 4까지, 즉 4가 4보다 나은지 물어보는 문에서 종료됨
// 출력값:
// 옆집 송 씨네 0번째 결혼식
// 옆집 김 씨네 1번째 결혼식
// 옆집 박 씨네 2번째 결혼식
// 옆집 정 씨네 3번째 결혼식

while true {
		print("Hello") // Hello 가 계속 출력됨
}
728x90