Swift - Struct / Class (3_값 전달 방식)

이한솔·2023년 8월 8일
0

Swift 문법 🍎

목록 보기
15/32

구조체의 값 전달 방식

값 타입

스위프트에서 제공하는 기본 자료형(정수, 문자열, 배열, 딕셔너리 등)과 열거형, 구조체는 인스턴스를 생성한 후 변수나 상수에 할당하거나 함수의 인자값으로 전달할 때 값을 복사하여 전달한다. 이 말은 우리가 생성하는 모든 구조체 인스턴스들이 상수나 변수에 할당될 때 복사된다는 뜻이다.
따라서 변수에 대입된 인스턴스와 기존의 인스턴스는 서로 독립적이다.

struct person {
    var name : String
    var age : Int
}


var aPerson = person(name : "hansol", age: 27) // 첫번째 구조체 인스턴스
print(aPerson.name) // hansol

var bPerson = aPerson // 두번째 구조체 인스턴스

bPerson.name = "sol"

print(aPerson.name) // 출력값: hansol 
print(bPerson.name) // 출력값: sol
// 값이 변경되지않고 자신만의 인스턴스 데이터를 가진다.


클래스의 값 전달 방식

참조 타입

메모리 주소 참조에 의한 전달 방식을 사용한다.
참조 타입은 변수나 상수에 할당되거나 함수의 인자값으로 전달될 때 값이 복사 되는게 아니라 현재 존재하는 인스턴스가 저장된 메모리 주소 정보가 전달된다.

class ReferenceType {
    var property = 1
}


var third = ReferenceType() // 첫번째 클래스 인스턴스

var fourth = third // 두번째 클래스 인스턴스
fourth.property = 2


print(third.property) // 출력값: 2
print(fourth.property) // 출력값: 2
// 참조 타입이기 때문에 값이 같이 변경된다.




구조체 VS 클래스

공통점

  1. 프로퍼티
    변수나 상수를 사용하여 값을 저장하는 프로퍼티를 정의할 수 있다.
  2. 메서드
    함수를 사용하여 기능을 제공하는 메서드를 정의할 수 있다.
  3. 서브스크립트
    속성값에 접근할 수 있는 방법을 제공하는 서브스크립트를 정의할 수 있다.
  4. 초기화 블록
    객체를 원하는 초기 상태로 설정해주는 초기화 블록을 정의할 수 있다.
  5. 확장
    객체에 함수적 기능을 추가하는 확장(extends) 구문을 사용할 수 있다.
  6. 프로토콜
    특정 형식의 함수적 표준을 제공하기 위한 프로토콜을 구현할 수 있다.

차이점 (클래스만 가능)

  1. 상속
    클래스는 특성을 다른 클래스에게 물려줄 수 있다.
  2. 타입 캐스팅
    실행 시 컴파일러가 클래스 인스턴스의 타입을 미리 파악하고 검사할 수 있다.
  3. 소멸화 구문
    인스턴스가 소멸되기 직전에 처리해야 할 구문을 미리 등록해 놓을 수 있다.
  4. 참조에 의한 전달
    클래스 인스턴스가 전달될 때에는 참조 형식으로 제공되며, 이때 참조가 가능한 개수는 제약이 없다.

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

구조체/클래스 정리해주셔서 감사합니다!

답글 달기