공부를 하다 보니 도대체 함수가 뭐고, 클래스는 뭐고, 메서드는 또 뭔지 머릿속이 복잡해졌다.
그래서 오늘은 이것들을 죽일거다.

함수(Functions)
Swift에서 함수는 특정 작업을 수행하는 코드 블록입니다. 함수는 이름을 가지며, 필요에 따라 매개변수와 반환 값 을 가질 수 있습니다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있다는 특징이 있으며, 독립적인 작업을 수행하거나 공통 기능을 분리할 때 사용합니다.
어쨌든, func 라는 키워드로 생성하는 것들은 모두 함수!
함수 선언 및 호출 예시
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
let message = greet(person: "Alice")
print(message) // 출력: "Hello, Alice!"
위의 greet 함수를 뜯어보면,
함수의 정의
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
이름: greet이라는 이름을 가지고 있으며, 이 이름은 함수 호출 시 사용됩니다.
파라미터: (person: String) 부분은 함수에 전달되는 값이라 할 수 있는 파라미터(parameter)를 정의합니다. 위 함수에 경우 person이라는 이름의 파라미터가 정의되었으며, 타입은 String입니다. 이 파라미터의 경우 해당 함수(greet) 내에서 사용될 수 있습니다.
리턴 타입: -> String 부분은 함수가 반환하는 값의 타입을 정의합니다. 해당 함수(greet)에 경우 String 타입을 반환하며, 함수가 호출된 곳에서 이 값이 반환됩니다.
따라서 greet 함수는 person이라는 이름의 String 타입 파라미터를 받고, 함수를 호출할 때 person 파라미터에 원하는 문자열을 전달하게 된다면 이를 활용하여 인사말을 생성하고 반환한다.
잠깐! 파라미터와 리턴 타입이 뭔지 간략하게 알아보자.
파라미터 (Parameters)
- 파라미터는 함수에 전달되는 값이며, 함수의 동작을 제어하는 데 사용됩니다.
- 파라미터는 함수의 괄호 안에 정의되며, 함수 호출 시 전달되는 값으로 초기화됩니다.
- 파라미터는 함수 내에서 사용되는 변수와 비슷하게 동작합니다.
파라미터의 구성 요소
- 이름 (Name): 파라미터를 식별하는 데 사용되는 이름, 함수 내에서 이 이름을 사용해 파라미터에 접근할 수 있음
- 타입 (Type): 파라미터가 수용할 수 있는 값의 종류를 나타냄,
Swift는 타입 시스템을 가지고 있어 파라미터의 타입을 명확하게 지정해야 함
예시
func greet(person: String) {
print("Hello, \(person)!")
}
리턴 타입 (Return Type)
- 리턴 타입은 함수가 실행된 후 반환하는 값의 종류를 나타냅니다.
- 함수가 값을 반환하지 않는 경우, 리턴 타입은 Void로 지정됩니다.
- 함수의 리턴 타입은 함수의 정의에 -> 기호를 사용하여 지정합니다.
예시
func add(a: Int, b: Int) -> Int {
return a + b
}
그런데 여기서 이 func로 선언된 함수가 클래스(class), 구조체(struct), 열거형(enumeration) 속에 포함되어 있다면 그건 함수가 아닌 메서드가 된다.
메서드(Methods)
메서드란 위에서 언급한 대로 클래스(class), 구조체(struct), 열거형(enumeration) 등에 속한 함수를 일컬으며, 이렇게 선언된 메서드는 해당 타입의 인스턴스에 속한 동작을 정의하며, 인스턴스의 상태를 읽거나 수정할 수 있습니다.
메서드 선언 및 호출 예시
class Counter {
var count = 0
func increment() {
count += 1
}
func reset() {
count = 0
}
}
let counter = Counter()
counter.increment()
counter.increment()
print(counter.count) // 출력: 2
counter.reset()
print(counter.count) // 출력: 0
그럼 여기서 클래스는 뭐고, 구조체는 뭐고, 열거형은 뭔가 싶은데 일단 클래스에 대해서만 설명해보자면,
클래스(Classes)
클래스는 객체 지향 프로그래밍에서 사용되는 참조타입으로 인스턴스는 참조를 통해 전달된다는 특징이 있습니다. 또한, 프로퍼티와 메서드가 포함하며, 상속과 타입 캐스팅을 지원, 상속, 다형성 등을 활용할 때 사용합니다.
클래스 선언 및 사용 예시
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
func setSides(sides: Int) {
numberOfSides = sides
}
}
let shape = Shape()
shape.setSides(sides: 3)
print(shape.simpleDescription()) // 출력: "A shape with 3 sides."
함수, 메서드, 클래스 차이점과 공통점
차이점
- 함수는 독립적으로 존재하며, 클래스나 구조체에 속하지 않습니다.
- 메서드는 특정 타입의 인스턴스에 속하며, 해당 타입의 동작을 정의합니다.
- 클래스는 참조 타입으로, 상속과 타입 캐스팅을 지원합니다.
공통점
- 모두 코드 블록으로, 특정 작업을 수행합니다.
- 모두 필요에 따라 매개변수를 받아들이고 반환 값을 가질 수 있습니다.
- 코드의 재사용성과 모듈화를 촉진합니다.
'걔 (개발)로그 > Swift' 카테고리의 다른 글
| Swift에서 인스턴스 (Instance) 및 인스턴스 메서드 (Instance Methods) (0) | 2024.05.17 |
|---|---|
| Swift에서 UserDefaults의 정체 (0) | 2024.05.16 |
| Swift에서 옵셔널의 모든 것 (1) | 2024.05.16 |
| Swift에서의 전달인자(Argument), 매개변수(Parameter), 반환타입(Return Type) | 이건 또 뭐여 (0) | 2024.05.15 |
| Swift에서의 소프트웨어 아키텍처 개념 및 MVVM, MVC 패턴 (0) | 2024.05.15 |