2025. 3. 27. 15:40ㆍiOS앱개발
class Man {
var age : Int = 1
var weight : Double = 3.5
init(age:Int, weight: Double){
self.age = age
self.weight = weight
}// designated initializer
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
var gu = Man(age: 10, weight: 12.12)
gu.display()
class Student : Man {
var name : String
func display() {
print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double, name : String){
self.name = name
super.init(age:age, weight:weight) //이 줄을 안쓰면?
}//error:'super.init' isn't called on all paths before returning from initializer
}
var kim = Student(age: 20, weight: 100.12, name: "sangtae")
kim.displayS()
init(yourAge:Int, yourWeight: Double){
age = yourAge
weight = yourWeight
}// designated initializer
import UIKit // iOS 개발을 위한 UIKit 프레임워크를 가져옵니다. UI 관련 기능을 사용할 수 있습니다.
class ViewController: UIViewController {
// ViewController 클래스를 선언합니다.
// UIViewController를 상속하여 화면을 관리할 수 있도록 합니다.
override func viewDidLoad() {
// viewDidLoad() 메서드는 뷰가 메모리에 로드될 때 한 번 호출됩니다.
super.viewDidLoad()
// 부모 클래스(UIViewController)의 viewDidLoad()를 호출하여 기본 동작을 수행합니다.
}
}
Argument vs Parameter

Parameter(매개변수)
- 함수를 선언할 때 사용
- 함수가 받을 값의 이름과 타입을 정의하는 역할
Argument(인수)
- 함수를 호출할 때 전달하는 실제 값
- 매개변수(Parameter)에 할당되는 값
함수와 메서드의 차이점


함수를 호출할때는 적절한 argument label을 지정해줘야 한다.

매개변수(Parameter):
- x: Int와 y: Int는 add 함수의 **매개변수(Parameter)**입니다.
- 이 매개변수들은 함수 내부에서 값을 받을 변수로 정의되어 있습니다.
✅ 인수(Argument):
- add(x: 10, y: 20)에서 10과 20은 **인수(Argument)**입니다.
- 함수가 호출될 때 매개변수(x, y)에 전달되는 실제 값입니다.
📌 정리:
- **x와 y**는 함수 선언에서 **매개변수(Parameter)**입니다.
- 함수 호출 시 전달되는 **10과 20**은 **인수(Argument)**입니다.
함수의 자료형
func add (x: Int, y: Int) -> Int {
return x + y
}
print(type(of: add)) //(Int, Int) -> Int
Argument Label
func add2 (xx x: Int, yy y: Int) -> Int {
return x + y
}
print(add2(xx: 10,yy: 20))
함수를 호출할때 사용하는 label입니다. 함수 내부에서는 xx , yy로 접근할 수 없고 x와 y로 접근해야합니다.

label로 _를 줄 경우 생략한다는 의미를 가지기 때문에 인자를 전달해줄때 위 방식으로 전달을 하면 에러가 나게 된다. 따라서

이러한 방식으로 값을 전달해주어야 하지만 별로 추천되는 방법은 아니다.
권장하는 방법?
func add2 (_ x: Int, second y: Int) -> Int {
return x + y
}
print(add2(10, second: 20))
이와같이 첫번째 argument label은 생략하고 두번째 인자부터 label을 달아주는 방식이 권장된다.
함수의 이름
func add (x: Int, y: Int) -> Int {
print(#function) //add(x:y:)
return x + y
}
print(add(x:10, y: 20))
func add (first x: Int, second y: Int) -> Int {
print(#function) //add(first:second:)
return x + y
}
print(add(first: 10, second: 20))
func add (_ x: Int, _ y: Int) -> Int {
print(#function) //add(_:_:)
return x + y
}
print(add(10, 20))
func add (_ x: Int, second y: Int) -> Int {
print(#function) // add(_:second:)
return x + y
}
print(add(10, second: 20))
Class
class Man {
var age : Int = 1
var weight : Double = 3.5
init(yourAge:Int, yourWeight: Double){
age = yourAge
weight = yourWeight
}
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
var gu: Man = Man(yourAge: 10, yourWeight: 12.12)
gu.display()
클래스는 기본적으로 프로퍼티, 생성자 함수, 메소드, 클래스 메소드를 가진다.
클래스 내부에 사용자 정의 생성자(init())가 없으면 Swift가 기본 생성자(default initializer)를 자동으로 제공한다.
init(yourAge:Int, yourWeight: Double){
age = yourAge
weight = yourWeight
}// designated initializer
모든 프로퍼티를 다 초기화시키는 생성자를 designated initailizer라고 한다.
// Man 클래스 정의
class Man {
// 속성 (Property): 나이(age)와 몸무게(weight)를 저장
var age: Int = 1 // 기본값 1로 초기화
var weight: Double = 3.5 // 기본값 3.5로 초기화
// (Initializer): 객체가 생성될 때 나이와 몸무게를 설정할 수 있도록 합니다.
init(age: Int, weight: Double) {
// 초기화 내에서 self를 사용하여 인스턴스 속성에 값을 할당
self.age = age // 외부에서 전달된 age 값을 클래스의 age 속성에 할당
self.weight = weight // 외부에서 전달된 weight 값을 클래스의 weight 속성에 할당
} // `Man` (Designated Initializer)
// 메서드 (Method): 객체의 정보를 출력하는 메서드
func display() {
// 현재 객체의 나이와 몸무게를 출력
print("나이=\(age), 몸무게=\(weight)")
}
}
// Man 클래스의 인스턴스 생성
var gu: Man = Man(age: 10, weight: 12.12) // age: 10, weight: 12.12로 `Man` 객체를 생성
// display() 메서드 호출: 생성된 객체의 나이와 몸무게를 출력
gu.display() // 출력: 나이=10, 몸무게=12.12
student클래스에는 상속받은 display를 가지고 있기 떄문에 현재 에러가 나는 상황이다

class Man {
var age : Int = 1
var weight : Double = 3.5
init(age:Int, weight: Double){
self.age = age
self.weight = weight
}// designated initializer
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
var gu = Man(age: 10, weight: 12.12)
gu.display()
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: 20, weight: 100.12, name: "sangtae")
kim.displayS()
override 키워드를 통해서 자식 클래스에서 메소드를 재정의하기위해 사용한다
protocol

스위프트에서 프로토콜(Protocol)은 어떤 특정 작업을 수행하는 데 필요한 요구 사항을 정의하는 블루프린트입니다. 프로토콜은 메서드, 속성, 기타 요구 사항을 정의하지만 그 자체로는 구현을 포함하지 않습니다. 대신, 이 프로토콜을 채택하는 타입(클래스, 구조체, 열거형)이 요구 사항을 구현해야 합니다.
프로토콜을 사용하면 다양한 타입이 동일한 메서드나 속성을 구현하도록 강제할 수 있습니다. 이는 객체 지향 프로그래밍에서 다형성을 구현하는 데 유용합니다.
protocol SomeProtocol {
var someProperty: String { get set } // 프로퍼티 요구 사항
func someMethod() // 메서드 요구 사항
}

프로토콜을 채택했다면 프로토콜이 요구하는 프로퍼티와 메소드를 반드시 구현해야한다.
// 1. 프로토콜 정의: `Runnalbe` 프로토콜을 정의합니다.
// 프로토콜은 해당 타입이 채택해야 하는 요구사항을 정의하는 블루프린트입니다.
protocol Runnalbe {
var x: Int { get set } // `x`라는 변수는 읽기 및 쓰기가 가능해야 함
func run() // `run`이라는 메서드가 정의되어야 함
}
// 2. `Man` 클래스 정의: `Runnalbe` 프로토콜을 채택합니다.
// 클래스가 프로토콜을 채택하려면, 프로토콜에 정의된 요구사항을 구현해야 합니다.
class Man: Runnalbe { // `Man` 클래스는 `Runnalbe` 프로토콜을 채택합니다.
// 3. `x` 프로퍼티 구현: 프로토콜에서 요구하는 `x` 프로퍼티를 구현합니다.
// `x`는 `Int` 타입이고, 읽기 및 쓰기가 가능합니다.
var x: Int = 1 // `x`의 초기값은 1로 설정
// 4. `run` 메서드 구현: 프로토콜에서 요구하는 `run()` 메서드를 구현합니다.
// `run` 메서드는 "run"을 출력하는 기능을 합니다.
func run() { // `run` 메서드를 정의
print("run") // "run"을 출력
}
}
// 5. `Man` 클래스의 인스턴스를 생성하여 사용
var kim = Man() // `Man` 클래스의 인스턴스를 생성하고, `kim`이라는 이름으로 변수에 저장
// 6. `run()` 메서드 호출
kim.run() // `kim` 객체에서 `run()` 메서드를 호출하여 "run"을 출력
예시
// 프로토콜 정의
protocol Flyable {
func fly()
}
// 부모 클래스 정의
class Animal {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func makeSound() {
print("\(name)가 소리를 낸다!")
}
}
// 자식 클래스가 프로토콜과 상속을 함께 채택
class Bird: Animal, Flyable {
var wingspan: Double
init(name: String, age: Int, wingspan: Double) {
self.wingspan = wingspan
super.init(name: name, age: age)
}
func fly() {
print("\(name)가 날고 있어요!")
}
}
// 객체 생성 및 사용
let eagle = Bird(name: "Eagle", age: 5, wingspan: 2.5)
eagle.makeSound() // 출력: Eagle가 소리를 낸다!
eagle.fly() // 출력: Eagle가 날고 있어요!
'iOS앱개발' 카테고리의 다른 글
iOS실무 6주차 (0) | 2025.04.10 |
---|---|
iOS실무 5주차- 맛집 앱 개발(1) Table View (0) | 2025.04.03 |
iOS 실무 3주차 (0) | 2025.03.20 |
iOS 실무 2주차 (0) | 2025.03.13 |
iOS실무 (0) | 2025.03.06 |