[Swift] Class

김영민·2022년 5월 21일
0

오늘은 Swift에서 아주 중요한 class에 대해 정리해 보겠습니다!

객체 지향 프로그래밍

우선 class를 정리하기 전에 객체 지향 프로그래밍에 대해 알아야 합니다.
객체 지향 프로그래밍의 특징은 아래와 같습니다.

  • 모든 것을 객체로 취급
  • 화면 단위
  • 화면 내 뷰와 컨트롤
  • 객체의 속성과 행위

애플리케이션과 객체

  • 예시
    학사 관리 시스템 - 학생의 이름,전공 / 수강신청 과목 / 수강 신청하기

객체의 속성과 행위

  • 객체의 속성 정의 : 프로퍼티
  • 객체의 행위 정의 : 메소드 (함수)

클래스에서 객체 생성

  • 객체 생성
  • 객체에 속성 설정
  • 객체 메소드 실행

클래스와 프로퍼티

class Student {}
  • 클래스 정의 : class [클래스 이름] {}
var student1 = Student()

객체 생성

  • var : 다른 객체 대입 가능
  • let : 새로운 객체 대입 불가능

프로퍼티

  • 저장 프로퍼티 : 데이터를 저장하는 용도, 프로퍼티 읽기/쓰기 행위, 객체 생성 시 초기화.

    • ex) 가로 길이, 세로 길이
  • 계산 프로퍼티 : 데이터 저장 안 함, 프로퍼티 읽기/쓰기 코드 작성

    • ex) 크기, 정사각형인가 ?

1. 저장 프로퍼티

  • 저장 프로퍼티 작성 ( ex: var str : String? ...)
  • 프로퍼티에 값 저장
  • 프로퍼티의 값 얻어오기

2. 계산 프로퍼티

  • 값 얻어오기 ( get )
  • 값 설정하기 ( set )
class Person {
let thisYear = 2017
var birthYear : Int = 0
var age : Int {
	get {
		return thisYear - birthYear
		}
	set(newValue) {
		birthYear = thisYear - newValue
		}
	}
}
  • set(newValue)에서 괄호는 생략 가능

  • 단, 임의로 설정한 set([다른이름])은 생략 불가능합니다!

  • 또한 set은 생략 가능하지만, set 전용 프로퍼티는 없습니다!


메소드

  • 클래스 내에서 작성하는 함수

  • self 포인터 : 객체 자신을 참조하는 포인터
    : 프로퍼티 이름과 함수 내에 파라미터 이름이 겹칠 때 필히 사용해야 합니다!


타입 메소드

  • 인스턴스 메소드
    : var class = MyClass() 처럼 객체를 생성해서 사용
  • 타입 메소드
    : 인스턴스 멤버에 접근 불가능, 타입 멤버에 접근 가능
    : 객체를 생성하지 않고 사용
    : static 키워드

타입 메소드 예시 코드

class Add {
    staticvar a = 1
    static var b = 3
    var c = 5
    
    static func add() -> Int {
    //c는 사용 불가능 (static이 아니어서)
        return a+b
    }
    
}
  • 타입 메소드 사용 방법 : Add.add() 로 객체 생성 없이 사용

타입 프로퍼티

  • 계산 프로퍼티, 저장 프로퍼티 사용 가능
  • 객체 생성하지 않고 사용

프로퍼티 사용

  • Rectangle.edge, Rectangle.name 으로 사용 가능
    : 객체 생성 없이 사용 가능

프로퍼티 변경 감시

  • 프로퍼티 변경 전 : willSet
  • 프로퍼티 변경 후 : didSet

class Rectangle {
var height : Int = 0 {
      willSet {
          print("newValue: \(newValue)")
      }
      didSet {
          print("old: \(oldValue)")
      }
	}
}

var rec = Rectangle()

rec.height = 10

rec.height
  • newValue : 10 -> 바뀔 값
  • old : 0 -> 이전의 값

프로퍼티의 늦은 초기화

  • lazy
    : 프로퍼티를 사용할 때 초기화됨.

코드 예시

  • 사용되지 않는 프로퍼티는 연산되지 않습니다.

0개의 댓글