for-in 문법은 배열 또는 컬렉션의 항목에 접근할 때 사용됩니다. 예를 들어, 배열에서 각 항목을 출력하려면 다음과 같이 사용할 수 있습니다.
let names = ["A", "B", "C", "D"]
for name in names {
print(name)
}
continue 문은 반복문 내에서 사용되며, 조건을 충족하지 않는 경우 현재 반복을 건너뛰고 다음 반복을 시작합니다. 아래의 예제에서는 1부터 9까지의 숫자 중 5보다 큰 경우 반복을 건너뛰는 방법을 보여줍니다.
for i in 1..<10 {
if i > 5 {
continue
}
print(i)
}
Swift에서 if 문의 조건식에서 콤마(,)를 사용하면 여러 조건을 동시에 확인할 수 있습니다. 콤마는 AND 연산자(&&)의 역할을 수행합니다. 아래 예제에서는 변수 a가 b보다 작고 변수 d가 c보다 큰 경우에 "yes"를 출력합니다.
var a = 1
var b = 2
var c = 3
var d = 4
if a < b, d > c {
print("yes")
}
if-else 문은 조건에 따라 다른 코드 블록을 실행할 때 사용됩니다. 조건식이 참인 경우 if 블록이 실행되고, 거짓인 경우 else 블록이 실행됩니다. 예를 들어, 변수 x가 짝수인지 홀수인지 확인하는 코드는 다음과 같이 작성할 수 있습니다.
var x = 3
if x % 2 == 0 {
print("짝수입니다")
} else {
print("홀수입니다")
}
여러 가지 조건에 따라 다른 동작을 수행해야 할 때, 다중 if-else 문을 사용할 수 있습니다. 이러한 구조는 다양한 조건을 고려하여 프로그램의 흐름을 제어하는 데 유용합니다.
다중 if-else문 : BMI 계산 결과 판정 -> switch case 문으로 변경
let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body = ""
if bmi >= 40 {
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
body = "정상"
} else {
body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")
switch-case문
let weight = 60.0
let height = 170.0
let bmi = weight / (height * height * 0.0001) // kg/m*m
var body = ""
switch bmi {
case ..<18.5:
body = "저체중"
case 18.5..<25:
body = "정상"
case 25..<30:
body = "1단계 비만"
case 30..<40:
body = "2단계 비만"
default:
body = "3단계 비만"
}
print("BMI:\(bmi), 판정:\(body)")
break 문의 자동 추가: switch-case 문에서는 각 case 블록의 마지막에 자동으로 break 문이 추가됩니다. 이것은 해당 case에서 코드 실행을 종료하고 다음 case로 넘어가지 않도록 해줍니다. 따라서, 특별한 경우가 아니라면 break 문을 직접 추가할 필요가 없습니다.
default 블록: switch-case 문에서 default 블록은 어떤 case에도 해당하지 않을 때 실행되는 블록입니다. 모든 가능한 경우에 대한 처리가 없을 때 default 블록을 활용할 수 있습니다.
switch-case 문을 결합하려면 여러 case 블록을 함께 사용하여 복잡한 조건을 다룰 수 있습니다. 예를 들어, 다음과 같이 여러 case 블록을 함께 사용할 수 있습니다.
let dayOfWeek = "Monday"
switch dayOfWeek {
case "Monday", "Tuesday":
print("월요일 또는 화요일입니다.")
case "Wednesday", "Thursday":
print("수요일 또는 목요일입니다.")
case "Friday", "Saturday":
print("금요일 또는 토요일입니다.")
default:
print("나머지 날짜입니다.")
}
위의 코드에서는 dayOfWeek 값이 여러 가지 경우에 해당하는 경우를 처리하기 위해 case 블록을 결합하여 사용하였습니다.
switch-case 문에서 범위를 지정하여 매칭하는 것도 가능합니다. 이를 활용하면 특정 값이 범위 내에 속하는지를 검사할 수 있습니다.
let score = 85
switch score {
case 0..<60:
print("F")
case 60..<70:
print("D")
case 70..<80:
print("C")
case 80..<90:
print("B")
case 90...100:
print("A")
default:
print("점수 범위 밖입니다.")
}
위의 코드에서는 score 변수가 어떤 범위에 속하는지를 검사하여 해당하는 학점을 출력합니다. ..< 연산자와 ... 연산자를 사용하여 범위를 지정하였습니다.
이러한 방식으로 switch-case 문을 활용하면 다양한 조건과 값에 대한 처리를 간결하게 구현할 수 있습니다.
switch-case 문에서 where 절을 사용하면 특정 패턴에 대한 조건을 추가할 수 있습니다.
Copy code
let temperature = 25
switch temperature {
case ..<0:
print("아주 추운 날씨")
case 0..<10:
print("추운 날씨")
case 10..<20:
print("쌀쌀한 날씨")
case 20..<30:
print("적당한 날씨")
case 30...:
print("더운 날씨")
default:
print("온도 정보를 알 수 없음")
}
클래스 (Class): 클래스는 객체 지향 프로그래밍에서 사용되는 중요한 개념 중 하나로, 객체를 생성하기 위한 템플릿 또는 설계도 역할을 합니다. 클래스는 속성과 메서드를 포함하며, 객체를 생성할 때 이러한 속성과 메서드를 공유합니다.
메서드 (Method): 클래스 내부에 정의된 함수를 메서드라고 합니다. 이 메서드는 클래스의 속성을 조작하거나 특정 작업을 수행합니다. 메서드는 객체의 행동을 정의하며, 클래스의 인스턴스에 속합니다.
함수 (Function): 함수는 일련의 작업을 수행하는 코드 블록을 나타냅니다. 함수는 클래스 내부에 포함되지 않고 독립적으로 정의될 수도 있습니다. 함수는 입력 값을 받아서 결과를 반환할 수 있습니다.
객체 (Object): 객체는 클래스의 인스턴스를 의미합니다. 클래스를 기반으로 실제 데이터를 포함하고 있는 실체입니다. 객체는 클래스의 설계에 따라 생성되며, 해당 클래스의 속성과 메서드에 접근할 수 있습니다.
인스턴스 (Instance): 인스턴스는 클래스로부터 생성된 객체를 가리키는 용어입니다. 클래스의 설계에 따라 생성된 구체적인 개체로, 객체와 동의어로 사용되기도 합니다.
Swift에서 함수를 정의할 때, 함수의 자료형은 함수의 입력 매개변수와 반환 값의 자료형을 포함합니다. 함수의 자료형을 확인하려면 type(of: 함수명) 형태로 사용합니다.
예를 들어, add 함수의 자료형과 함수명을 확인해보겠습니다.
// 함수 정의
func add(x: Int, y: Int) -> Int {
return x + y
}
// 함수 호출 및 자료형 확인
let result = add(x: 10, y: 20)
print(type(of: add)) // 함수의 자료형 출력: (Int, Int) -> Int
print("add 함수의 결과: \(result)")
위의 코드에서 add 함수는 두 개의 정수를 입력 받아 더한 후 정수를 반환합니다. type(of: add)를 사용하여 함수의 자료형을 확인할 수 있습니다. 이 경우, (Int, Int) -> Int는 두 개의 Int 매개변수를 받고 Int를 반환하는 함수 자료형을 나타냅니다.
디폴트 매개변수는 함수를 호출할 때 인자(argument)를 전달하지 않은 경우 사용되는 기본값을 설정하는 방법입니다. 다음은 디폴트 매개변수를 가진 함수의 예시입니다:
func sayHello(count: Int, name: String = "길동") -> String {
return "\(name), 너의 번호는 \(count)"
}
// 함수 호출
var message1 = sayHello(count: 10, name: "소프트") // "소프트, 너의 번호는 10"
var message2 = sayHello(count: 100) // "길동, 너의 번호는 100"
위의 예제에서 name 매개변수에는 디폴트 값으로 "길동"이 할당되어 있습니다. 함수를 호출할 때 name을 지정하지 않으면 디폴트 값인 "길동"이 사용됩니다.
여러 개의 결과 반환하기
Swift에서 함수는 여러 개의 결과 값을 튜플(tuple)로 반환할 수 있습니다. 다음은 여러 개의 결과 값을 반환하는 함수의 예시입니다:
func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float) {
let yards = length * 0.0277778
let centimeters = length * 2.54
let meters = length * 0.0254
return (yards, centimeters, meters)
}
let lengthTuple = converter(length: 10)
print(lengthTuple) // (0.277778, 25.4, 0.254)
print(lengthTuple.yards) // 0.277778
print(lengthTuple.centimeters) // 25.4
print(lengthTuple.meters) // 0.254
이 함수는 주어진 길이(length)를 야드(yards), 센티미터(centimeters), 미터(meters)로 변환하여 튜플로 반환합니다.
가변 매개변수(Variadic Parameters)
가변 매개변수는 함수가 임의의 개수의 인자를 받을 수 있게 하는 매개변수 유형입니다. 이를 위해 ...을 사용합니다. 다음은 가변 매개변수를 사용한 함수의 예시입니다:
func displayStrings(strings: String...) {
for string in strings {
print(string)
}
}
displayStrings(strings: "일", "이", "삼", "사")
displayStrings(strings: "one", "two")
이 함수는 문자열들을 받아서 모두 출력하는데, 인자의 개수가 가변적입니다.
inout 매개변수
inout 매개변수는 함수 내부에서 전달된 변수의 값을 변경하고 그 변경 사항이 함수 외부에도 반영되도록 하는 방법입니다. Swift 2에서와 Swift 3 이후에서 inout 사용법이 약간 다릅니다.
Swift 2에서:
var myValue = 10
func doubleValue(inout value: Int) -> Int {
value += value
return value
}
doubleValue(&myValue) // 20
Swift 3 이후:
var myValue = 10
func doubleValue(value: inout Int) -> Int {
value += value
return value
}
print(myValue) // 10
print(doubleValue(value: &myValue)) // 20