iOs 6th Class

  • native
    • android
      • Java, Kotlin
    • iOS
      • Swift, Objective-C
  • cross platform
    • react native
    • Flutter
  • hybrid
    • web view
    • HCJ
    • apache cordova

  • 클래스는 구조체에 없는 추가적인 기능이 있음
    • 상속
  • 프로퍼티는 클래스 내에 포함되는 변수와 상수
    • 기본적으로 stored property를 말함

가장 일반적으로 프로퍼티에 초기값을 주는 방법은 init()이다.

class Man{
  var age : Int = 1
  var weight : Double = 3.5
  //init(){}
  //눈에 보이지 않지만 자동으로 만들어지는 default initializer
  func display(){
    print("나이=\(age), 몸무게=\(weight)")
  }
}
var kim : Man = Man() // ()는 init()호출하는 것
kim.display() //인스턴스 메서드는 인스턴스가 호출
print(kim.age)
  • :Man 생략 가능
  • Man() == Man.init()

P : property

M : method

class 키워드로 만든 클래스 매서드는 자식 클래스에서 override가능

현재 클래스 내 메서드나 프로퍼티를 사용하는 경우 self를 사용한다

  • designated initializer
    • 모든 프로퍼티(age, weight)를 다 초기화시키는 생성자

method overloading은 동일한 이름을 가진 매서드를 2개 만들어 매개변수에 따라 골라서 작동시킬 수 있는 기능이다.

failable initializer = 실패 가능한 생성자 = init?()

정상적으로 만들어 진 경우에도 옵셔널 형으로 생성됨

올바르게 옵셔널 형을 분해해서 쓸것

if let kim2 = Man(age:0, weight:5.5) {
  kim2.display()
}

이처럼 초기화와 함께 사용할 수 도 있다

var kim : Man? = Man(age:1, weight:3.5)
//1-1.옵셔널 형으로 선언
if let kim1 = kim { //1-2.옵셔널 바인딩
  kim1.display()
}

//2.인스턴스 생성과 동시에 옵셔널 바인딩
if let kim2 = Man(age:2, weight:5.5) {
  kim2.display()
}

//3.인스턴스 생성하면서 바로 강제 언래핑
var kim3 : Man = Man(age:3, weight:7.5)!
kim3.display()

//4.옵셔널 인스턴스를 사용시 강제 언래핑
var kim4 : Man? = Man(age:4, weight:10.5)
kim4!.display()

class 자식 : 부모, 프로토콜1, 프로토콜2... {}

자식이 init할때는 자기 자신의 변수 먼저 초기화 후 super.init을 사용한다.

override를 자식에서 함수를 선언할때 쓰면 부모보다 우선으로 자식에서 정의한 함수를 사용하게 한다.

결론

import UIKit

class ViewController: UIViewController {
    @IBOutlet var lblHello: UILabel!
    @IBOutlet var txtName: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func btnSend(_ sender: UIButton) {
        lblHello.text = "Hello, " + txtName.text!
    }
}

import UIKit

  • UIKit 프레임워크를 임포트.
  • iOS에서 UI를 구성하기 위해 필수.
  • UIViewController, UILabel, UITextField, UIButton 등 UI 구성 요소들을 사용할 수 있게 해줌.

class ViewController: UIViewController

  • ViewController 클래스 정의
  • UIViewController를 상속받아서, 화면(View)의 생명주기와 이벤트를 처리함.
  • 이 클래스는 화면 1개의 로직을 담당.

@IBOutlet var lblHello: UILabel!

  • Interface Builder(스토리보드)에서 UILabel과 연결되는 변수(아울렛).
  • @IBOutlet은 "이 변수는 스토리보드에서 연결된 UI 요소입니다" 라는 뜻.
  • UILabel!: 옵셔널이지만 강제 언래핑됨 → 나중에 연결 안 되면 앱이 죽을 수 있음.

@IBOutlet var txtName: UITextField!

  • 입력 필드(사용자가 이름을 입력하는 곳)도 동일하게 연결.
  • 역시 Interface Builder와 연결된 아울렛.

override func viewDidLoad()

  • 뷰 컨트롤러가 메모리에 로드된 직후 자동 호출되는 메서드.
  • 초기 설정이나 데이터를 불러오는 데 사용.
  • 여기선 별 내용이 없지만, 필수적으로 override됨.

override func viewDidLoad() {
super.viewDidLoad() // 반드시 호출해야 부모의 로직이 정상 실행됨
}


@IBAction func btnSend(_ sender: UIButton)

  • Interface Builder에서 버튼 클릭 이벤트와 연결되는 함수(액션).
  • 사용자가 버튼을 눌렀을 때 호출됨.
  • _ sender: UIButton → 어떤 버튼이 눌렸는지 정보를 담고 있음 (여기선 사용 안 함)

lblHello.text = "Hello, " + txtName.text!

  • txtName.text!: 사용자가 입력한 텍스트 (강제 언래핑)
  • lblHello.text: 라벨에 표시될 텍스트로 설정됨
  • 결과적으로 "Hello, [입력한 이름]" 이 화면에 출력됨