구조체와 클래스

Minseong·2022년 2월 19일
0

swift

목록 보기
2/10

구조체와 클래스

  • 일반적으로는 추론하기 쉬운 구조체를 선호
  • 제어할 수 없는 ID가 있는 엔터티에 대한 정보가 포함된 데이터를 모델링할 때 구조체를 사용
  • Objective-C 상호 운용성이 필요할 때 클래스 사용
  • 모델링 중인 데이터의 ID를 제어해야 하는 경우 클래스를 사용

공통점

  • 값을 저장하는 프로퍼티 정의
  • 기능 제공을 위한 메서드 정의
  • 서브 스크립트 구문을 사용하여 값에 접근을 제공하는 서브 스크립트 정의
  • 초기화 상태를 설정하기 위한 초기화 정의
  • 기본 구현을 넘어 기능적 확장을 위한 확장
  • 특정 종류의 표준 기능을 제공하는 프로토콜 준수

클래스만 가지는 추가적인 기능

  • 상속
  • 타입 캐스팅
  • Deinitialization(초기화 해제)
  • 자동 참조 카운팅

정의 구문

  • 타입명 UpperCamelCase 사용
  • 프로퍼티와 메서드는 lowerCamelCase 사용
struct SomeStructure {
    // structure definition goes here
}
class SomeClass {
    // class definition goes here
}

인스턴스 생성

let someStructure = SomeStructure()
let someClass = SomeClass()
  • 클래스 또는 구조체 타입 이름 뒤에 빈 소괄호를 붙여 사용하면 모든 프로퍼티가 기본값으로 초기화되는 인스턴스 생성

프로퍼티 접근

  • 점 구문 (dot syntax) 을 사용하여 인스턴스의 프로퍼티에 접근할 수 있다.
someStructure.someValue

구조체와 열거형은 값 타입

  • 값 타입 (value type) 은 변수 또는 상수에 할당될 때나 함수에 전달될 때 복사 되는 값인 타입
struct Person {
	let name: String
}

let min = Person(name= "min")
var min2 = min
// min, min2의 name은 같지만 완전히 다른 인스턴스

클래스는 참조 타입

  • 참조 타입 (reference types) 은 변수 또는 상수에 할당될 때나 함수로 전달될 복사본 대신에 존재하는 같은 인스턴스에 대한 참조가 사용됩니다.
class Person {
	let name: String
    
    init(name: String) {
    	self.name = name
    }
}

let min = Person(name= "min")
var min2 = min
// min, min2은 같은 인스턴스를 참조

식별 연산자 (Identity Operators)

  • 2개의 상수 또는 변수가 클래스의 같은 인스턴스를 참조하는지 확인가능
  • 동일 인스턴스 (Identical to) (===)
  • 동일하지 않은 인스턴스 (Not identical to) (!==)
// min과 min2가 동일한 인스턴스를 참조하는지 확인
if min === min2 {
	print("동일한 인스턴스 참조")
}
profile
안녕하세요! ios 공부 중인 초보 개발자입니다!

0개의 댓글

관련 채용 정보