2024. 3. 27. 16:48ㆍiOS
1. 함수
1.1. C의 함수와 비교
//C, C++
int add(int x, int y) {
return(x+y);
}
add(10,20);
//Swift
func add(x: Int, y: Int) -> Int {
return(x+y)
}
add(x:10, y:20)
1.2. 함수명
- *함수명 출력 코드
func add(first x: Int, second y: Int) -> Int {
print(#function)
return(x+y)
}
print(add(first:10, second:20))
- Swift의 함수명은 외부 매개변수명과 함께 출력되는 특징이 있다.
- 함수명이 길지만, 해당 함수의 기능을 추측할 수 있는 장점이 있다.
1.3. 함수의 자료형
- 함수의 자료형 출력 코드
print(type(of:add))
- 함수의 자료형 출력 시 매개변수와 리턴값의 자료형이 출력된다.
1.4. default parameter
- 함수 선언 시 매개변수 = '기본값'과 같이 정의했을 때, 해당 함수 호출 시 해당 매개변수에 값을 넘기지 않을 경우 선언 시 입력한 기본값으로 값이 넘어가게 된다.
- default parameter를 사용한 함수
2. 클래스
2.1. 클래스 기본 구조
class 새로운 클래스 이름 : 부모 클래스 {
// property..
// instance method..
// type method..
}
2.2. stored property
- 클래스 내에 선언된 변수 및 상수
- 초기화 필수
- 초기화 방법: 값 입력, optional, 생성자
2.3. instance method
- 인스턴스에서 접근 가능한 메서드
2.4. type method
- 클래스에서 접근 가능한 메서드
- static으로 선언 시 subclass에서 재정의할 수 없다.
2.5. initializer
- 객체 초기화 시 사용하는 메서드
- default initializer: initializer를 따로 정의하지 않을 경우 생성되는 기본 생성자로, 매개변수를 넘기지 않는다.
- initializer는 method overloading을 통해 여러 개 생성할 수 있다.
- method overloading: 한 클래스 내에서 동일한 이름의 함수를 여러 개 중첩하여 정의할 수 있다.
- self: 현재 클래스 내 메서드나 프로퍼티를 가리키는 keyword
- *designated initializer: 클래스의 모든 프로퍼티를 초기화하는 생성자
2.6. 클래스를 선언, 호출한 코드
class Man {
//stored property
var age = 10
var weight = 3.5
//instance method
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
//class method
class func cM(){
print("cM은 클래스 메서드입니다.")
}
//class method
static func scM(){
print("scM은 클래스 메서드(static)")
}
//initializer
init(age: Int, weight : Double){
self.age = age
self.weight = weight
}
}
var man = Man(age:10, weight:20)
print("생성한 인스턴스의 나이:\(man.age)")
man.display()
Man.scM()
2.7. 상속
- 클래스를 상속할 경우 하나만 가능하고, 프로토콜은 여러 개 가능하다.
- 클래스 선언 시 콜론(:)을 통해 상속 관계를 표현한다.
- 상속 시 부모의 프로퍼티와 메서드를 접근할 수 있다.
- super: 부모의 프로퍼티나 메서드 접근 시 사용하는 keyword
- override: 부모의 동일한 이름의 메서드를 재정의
- 2.6의 Man 클래스를 상속받은 Student 클래스
class Student : Man {
var name : String
override func display() {
print("이름=\(name), 나이=\(age), 몸무게=\(weight)") }
init(age: Int, weight : Double, name : String){
self.name = name
super.init(age:age, weight:weight)
}
}
var kim = Student(age: 55, weight: 35, name: "Shin")
kim.display()
3. access control
3.1. access control이란
- 코드의 일부분에 대한 접근을 제한하는 방법
- 캡슐화와 정보 은닉의 원칙을 구현
3.2. access modifier
- 클래스, 메서드, 멤버의 접근 가능성을 설정하는 객체 지향 언어의 키워드
- default access modifier: internal
3.3. access modifier의 종류
- Open과 Public
open과 public 액세스 수준은 가장 높은 접근 수준을 제공하며, 이를 사용하면 모든 모듈에서 해당 코드에 접근할 수 있습니다. 하지만 open과 public 사이에는 중요한 차이가 있습니다. open은 클래스와 클래스 멤버에만 사용할 수 있으며, 해당 클래스를 다른 모듈에서 상속받거나 오버라이드할 수 있게 해줍니다. 반면, public으로 선언된 클래스는 다른 모듈에서 상속받거나 오버라이드할 수 없습니다.
- Internal
internal 액세스 수준은 기본 설정으로, 같은 모듈 내에서만 접근할 수 있게 해줍니다. 다른 모듈에서는 접근할 수 없습니다. 대부분의 경우, 애플리케이션 또는 프레임워크 내부에서 사용되는 코드에 적합합니다.
- File-private
fileprivate 액세스 수준은 같은 소스 파일 내에서만 접근할 수 있게 해줍니다. 이를 통해 같은 파일 내의 다른 타입이나 함수와의 세밀한 접근 제어가 가능하며, 그 이외의 위치에서는 접근할 수 없습니다.
- Private
private 액세스 수준은 선언이 포함된 블록(예: 클래스, 구조체, 열거형, 또는 확장) 내에서만 접근할 수 있게 해줍니다. 이는 가장 제한적인 액세스 수준으로, 세부 구현을 숨기고 해당 블록 내에서만 사용되는 코드에 사용됩니다.
4. protocol
4.1. protocol의 개념
- 특정 클래스와 관련없는 함수(메서드)들의 선언 집합
- java, C#의 interface와 비슷한 개념을 보유
- POP(Protocol Oriented Programming): 프로토콜 단위로 묶어 표현하고, extension으로 기본적인 것을 구현하여 단일 상속의 한계를 극복하는 프로그래밍 기법
4.2. protocol의 기본 구조
protocol 프로토콜명{
//property name
//메서드 선언
}
4.3. adopt, conform
- 한 class에서 여러 개의 protocol을 채택(adopt)할 수 있다.
- 준수(conform): 채택한 클래스는 상속한 protocol에서 선언된 property와 method를 반드시 구현해야 한다.
- protocol을 adopt한 class 코드
protocol Run {
var x : Int { get set }
func run()
}
class Man : Run {//adopt
var x = 0//conform
func run(){//conform
print("뛰다")
}
}
var kim = Man()
kim.run()
5. 참고자료: iOS 프로그래밍 실무 강의 - 한성현 교수님
'iOS' 카테고리의 다른 글
앱 개발 실습 - 2 (0) | 2024.04.17 |
---|---|
앱 개발 실습 - 1 (0) | 2024.04.03 |
Swift 문법 - 2 (0) | 2024.03.20 |
Swift 문법 - 1 (0) | 2024.03.13 |
앱 개발 기술 (0) | 2024.03.06 |