목록iOS (106)
大器晩成
*구조체와 클래스의 가장 큰 차이는 메모리 저장 방식의 차이입니다.* 구조체클래스값형식(Value Type)인스턴스 데이터를 모두 스택(Stack)에 저장(복사 시) 값을 전달할 때마다 복사본을 생성 (다른 메모리 공간 생성) 스택(Stack)의 공간에 저장, 스택 프레임 종료 시, 메모리에서 자동 제거스위프트에서 제공하는 정수, 문자열, 배열, 또는 딕셔너리 등 기본 자료형들은 모두 복사를 통해 값이 전달되는데, 이는 이들 자료형이 모두 구조체로 구현되었기 때문이다.참조형식(Reference Type)인스턴스 데이터는 힙(Heap)에 저장되고, 변수 자체는 스택에 저장 (스택에 저장된) 변수 안에 메모리 주소값이 힙(Heap)의 인스턴스를 가리킴 (복사시) 값을 전달하는 것이 아니고, 저장된 주소를 전..

구조체와 클래스를 설명하기 전에, 객체지향 프로그램에 대해서 간단하게 생각해보려고 합니다.객체 지향 프로그램(Object-Oriented Programming, OOP)은 프로그램의 패러다임 중 하나로, 필요한 데이터를 추상화시켜, 객채들 간의 상호 작용을 통해 로직을 구성하는 프로그래밍 방법이라고 많이 정의가 되어있습니다. 이렇게만 들으면 사실 잘 와닿는 부분은 아니지만, 위키백과의 정의된 내용을 보면 "여러 개의 독립된 단위, 즉 "객체"들의 모임을 파악하고자 하는 것이다"라고 나와있습니다. 여기서 우리는 어떠한 여러 개의 변수나, 함수 같은 것들이 있는데, 이것들의 모임 즉 "데이터를 묶어서 쓰는 것"이라고 생각해 볼 수 있습니다. 데이터를 묶어서 쓰는 방법에는 여러 개의 방법이 있지만, 구조체와..
옵셔널 체이닝은 옵셔널 타입에 대해, 접근 연산자를 호출하는 방법입니다.옵셔널 체이닝의 결과는 항상 옵셔널입니다.옵셔널 체이닝에 값 중에서 하나라도, nil을 리턴한다면, 이어지는 표현식은 평가하지 않고 nil을 리턴합니다.옵셔널 타입으로 선언된 값에 접근해서, 속성, 메서드를 사용할 때 접근연산자(.) 앞에?(물음표) 붙여야 함 class Person { var residence: Residence?}class Residence { var numberOfRooms = 1}let john = Person()let roomCount = john.residence!.numberOfRooms// this triggers a runtime errorif let roomCount = john.resid..
inout 키워드는 함수 내에서 변수를 직접 수정하도록 하고 싶을 때 사용합니다.- 함수 내의 파라미터는 기본적으로 값타입이고(복사되어서 전달) 임시상수이기 때문에 변경 불가 원칙입니다. var num1 = 123 // 전역변수var num2 = 456 // 전역변수func swap(a: Int, b: Int) { var c = a// a = b // b = c}swap(a: num1, b: num2)swap 함수 내에 있는 a와 b는 상수이기 때문에 값을 바꿀 수 없습니다. 함수 내에서 변수를 직접 수정하도록 돕는 것이 inout키워드(참조로 전달)C언어의 &와 동일, 메모리 주소를 전달inout 키워드(선언 시), &사용(실행 시)num1 = 100..