본문 바로가기
iOS프로그래밍 실무

[iOS프로그래밍 실무] 4주차

by heeaeeeee 2025. 3. 27.
//
//  ViewController.swift   // ViewController.swift 파일 (뷰 컨트롤러의 코드가 담긴 파일)
//
//  bbbb                    // 프로젝트 이름: "bbbb"
//
//  Created by 소프트웨어컴퓨터 on 2025/03/27.   // 파일이 생성된 날짜와 작성자
//

import UIKit  // iOS UI 관련 기능을 제공하는 프레임워크 (뷰, 버튼, 화면 전환 등을 관리)

class ViewController: UIViewController {  // ViewController 클래스 정의 (UIViewController를 상속)

    override func viewDidLoad() {   // 화면이 로드될 때 한 번 실행되는 함수
        super.viewDidLoad()   // 부모 클래스(UIViewController)의 기본 설정을 실행
        // Do any additional setup after loading the view.  
        // 화면이 로드된 후 추가적으로 실행할 코드를 여기에 작성하면 됨
    }

}

 

func application(_ application: UIApplication, configurationForConnecting 
connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> 
UISceneConfiguration { }

_ 이거는 왜 쓴거야 ?

 

configurationForConnecting, connectingSceneSession 차이점

 

함수

 

전달인자/매개변수 vs 리턴값(반환값)

 

함수 만들기

func sayHello() -> Void {
    print("Home")
}
sayHello()

func sayHello() { //리턴값 없음
    print("Home")
}
sayHello()

 

 

 

함수의 자료형

func add(x : Int, y : Int) -> Int {
    return x + y
}
add(x: 10, y: 20)
var x = 10
print(type(of: x))
print(type(of: add)) //(Int, Int) -> Int

(자료형,자료형,…) -> 리턴형 (Int, Int) -> Int 리턴형이 Void형이면 ()

 

내부 매개변수(parameter name) 이름 vs 외부 매개변수(argument label)이름

 

함수명

> 함수 이름이 다 다름

함수명(외부매개변수명:외부매개변수명:)

 

numberOfRowsInSection

 

class Man { var age : Int = 24 var weight : Double = 50 // init() {} } var kim : Man = Man() print(kim.age) var kim : Man = Man() 설명해줘

 

인스턴스 초기화하기 : init()

 

class Man {
    var age : Int = 24
    var weight : Double = 50.5
    func display() {
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(age : Int, weight : Double) {
        self.age = age
        self.weight = weight
    }
}
var kim = Man(age: 24, weight: 55.5)
kim.display()
var age: Int = 24 나이를 저장하는 변수 (기본값 24)
var weight: Double = 50.5 몸무게를 저장하는 변수 (기본값 50.5)
init(age: Int, weight: Double) Man 클래스의 초기화 함수 (생성자)
self.age = age 전달받은 age 값을 self.age 속성에 저장
display() 현재 나이와 몸무게를 출력하는 함수
var kim = Man(age: 24, weight: 55.5) 새로운 Man 객체 생성
kim.display() "나이=24, 몸무게=55.5" 출력

 

class Man { var age : Int var weight : Double func display() { print("나이=\(age), 몸무게=\(weight)") } init(age : Int, weight : Double) { self.age = age self.weight = weight } } var kim = Man(age: 24, weight: 55.5) kim.display() class Student : Man { var name : String func displayS() { print("이름=\(name), 나이=\(age), 몸무게=\(weight)") } init(age: Int, weight : Double, name : String){ super.init(age:age, weight:weight) //이 줄을 안쓰면? self.name = name } } var hee = Student(age : 22, weight : 45.9, name : "heeae") hee.display() hee.displayS() 왜 오류가 나는거니 ?

 

override : 부모와 자식에 같은 메서드가 있으면 자식 우선

class Man {
    var age : Int
    var weight : Double
    func display() {
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(age : Int, weight : Double) {
        self.age = age
        self.weight = weight
    }
}
var kim = Man(age: 24, weight: 55.5)
kim.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 hee = Student(age : 22, weight : 45.9, name : "heeae")
hee.display()

자식클래스가 새로 만든 display() 메서드가 우선적으로 호출되려면 func 앞에 override키워드 씀

 

여러 프로그래밍 언어에서 override 키워드 설명

Java @Override 사용 컴파일러가 부모 메서드를 정확히 재정의했는지 체크
C++ override 사용 virtual 키워드가 부모 클래스에 있어야 함
C 직접 지원 X 함수 포인터로 유사한 기능 구현 가능
Swift override 필수 override를 안 쓰면 컴파일 오류 발생

 

델리게이트 패턴

 

가장 많이 사용되는 디자인 패턴

1. 싱글톤 패턴
2. 팩토리 패턴
3. 전략 패턴
4. 옵저버 패턴
5. 데코레이터 패턴
6. 어댑터 패턴
7. 퍼사드 패턴
8. 브릿지 패턴
9. 프록시 패턴
10. 빌더 패턴

 

protocol 정의, 채택, 준수

 
swift에서 상속과 프로토콜을 사용
 
iOS 테이블 뷰에서 부모클래스와 프로토콜이 사용되는 것을 아주 쉽게 개념적으로 설명해줘
 

iOS 강의 자료 참고했습니다