본문 바로가기

카테고리 없음

iOS4주차

기본 코드 이해 feat Open AI

//
//  ViewController.swift
//  bbb
//
//  Created by 유명규 on 3/27/25.
//

import UIKit  // UIKit 프레임워크를 가져옵니다. iOS 앱의 UI를 구성하는 데 필요한 클래스들을 포함합니다.

// ViewController 클래스 정의
// UIViewController를 상속받아 뷰 컨트롤러의 기본 기능을 사용할 수 있게 합니다.
class ViewController: UIViewController {

    // viewDidLoad() 메서드 오버라이드
    // 뷰 컨트롤러의 뷰가 메모리에 로드된 후 호출됩니다.
    // 주로 초기 설정, 데이터 로딩, UI 구성 등의 작업을 수행합니다.
    override func viewDidLoad() {
        super.viewDidLoad()  // 부모 클래스(UIViewController)의 viewDidLoad() 메서드를 호출합니다.
        // Do any additional setup after loading the view.
        // 여기에 뷰가 로드된 후 수행할 추가 설정이나 초기화 코드를 작성합니다.
    }

    // 여기에 추가적인 메서드나 프로퍼티를 정의할 수 있습니다.
    // 예: UI 요소 설정, 데이터 처리, 사용자 상호작용 처리 등

}

 

argument VS Parmater

#include <stdio.h>
void Fun( int param ) // parameter(매개변수, 인자), 형식 매개변수(formal parameter)
{
printf("%d",param);
}
int main()
{
Fun( 10 ); // 10은 argument(전달인자), 실 매개변수(actual parameter)
return 0;
}

 

argument - 전달인자

parameter - 매개변수

 

Xcode의 에러 메세지 (수정가능)

 

함수의 자료형

func add(x:Int, y:Int) -> Int {
    return x+y
}

add(x: 10, y: 20)
var x : Int = 10
print(type(of: x))
print(type(of: add)) //(Int, Int) -> Int

Swift에서 함수의 자료형은 '(변수, 변수) -> 리턴값' 으로 표기된다.

 

 

func add(first x: Int, second y: Int) -> Int {
//외부 내부:자료형,외부 내부:자료형 -> 리턴형
return(x+y) //함수 정의할 때는 내부 매개변수명을 사용
} //return(first+second)은 오류
add(first:10, second:20) //add(x:10, y:20)은 오류
//함수 호출할 때는 외부 매개변수명을 사용

first, second - argument label (호출 할 때 사용)

x, y - parameter name (정의 할 때 사용)

 

func add(x:Int, y:Int) -> Int {
    print(#function) //add(x:y:)
    return x+y
}
add(x: 10, y: 20)

func add(first x:Int, second y:Int) -> Int {
    print(#function) // add(first:second:)
    return x+y
}
add(first : 10, second: 20)

func add(_ x:Int, _ y:Int) -> Int {
    print(#function) //add(_:_:)
    return x+y
}
add(10, 20)

func add(_ x:Int, with y:Int) -> Int {
    print(#function) //add(_:with:)
    return x+y
}
add(10,with: 20)

함수명이 다 다른것을 볼 수 있다 

함수명 - 함수명(외부 매개변수명:내부매개변수명...)

쉽게 이해하자면 호출할때 이용법을 생각하면 편할 것 같다.

 

class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(yourAge: Int, yourWeight : Double){
age = yourAge
weight = yourWeight
} //designated initializer
}
//var kim : Man = Man() //오류
//init()을 하나라도 직접 만들면 default
//initializer는 사라짐
var kim : Man = Man(yourAge:10, yourWeight:20.5)
kim.display()
//kim의 age는 1인가 10인가? 그 이유는?

dssignated initializer - 모든 프로퍼티를 다 초기화 시키는 생성자

 

 

 

 

프로토콜에 관하여

// 프로토콜 정의
protocol Studyable {
    func study()
}

// 기본 클래스 정의
class Person {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func introduce() {
        print("안녕하세요, 제 이름은 \(name)입니다.")
    }
}

// Person을 상속받고 Studyable 프로토콜을 구현하는 Student 클래스
class Student: Person, Studyable {
    var grade: Int
    
    init(name: String, grade: Int) {
        self.grade = grade
        super.init(name: name)
    }
    
    func study() {
        print("\(name)이(가) \(grade)학년 교과서로 공부합니다.")
    }
}

// 사용 예시
let student1 = Student(name: "철수", grade: 3)
student1.introduce()  // Person 클래스에서 상속받은 메서드
student1.study()      // Studyable 프로토콜에서 구현한 메서드