[Swift 야곰] 2단원. 구조체

Jamong·2023년 1월 11일
0

Day 7 - 2023.01.11

구조체

스위프트에서 대부분 타입은 구조체로 이루어져 있고 값(Value) 타입이다.

구조체는 타입을 정의하는 것이기 때문에 대문자 카멜케이스를 사용하여 정의한다.

구조체 문법

구조체는 "struct" 키워드를 사용한다.

struct.swift

struct 이름 {
	/* 구현부 */
}

예로 구조체 구현을 하자면

  • 프로퍼티 : 타입안에 있는 인스턴스 변수
  • 메서드 : 타입안에 있는 함수
sample.swift

// MARK: 구조체 생성

struct Sample {

	// 가변 프로퍼티 (값 변경 가능)
	var mutableproperty: Int = 100
    
    // 불변 프로퍼티 (값 변경 불가능)
    let immutableProperty: Int = 100
    
    // 타입 프로퍼티 (static 키워드 : 타입 자체가 사용하는 프로퍼티)
    static var typerProperty: Int = 100
    
    
   	// 인스턴스 메서드 (인스턴스가 사용하는 메서드)
    func instanceMethod() {
    	print("instance method")
    }
    
    // 타입 메서드 (static 키워드 : 타입 자체가 사용하는 메서드)
    static func typeMethod() {
    	print("type method")
    }
}
   
// MARK: 구조체 사용

// 가변 인스턴스
var mutable: Sample = Sample()

mutable.mutableProperty = 200		// 200
mutable.imuutableProperty = 200		// 불변 프로퍼티로 값 변경으로 인한 오류 발생


// 불변 인스턴스
let immutable: Sample = Sample()

immutable.mutableProperty = 200		// 불변 인스턴스는 가변 프로퍼티라도 수정 불가능
immutable.immutableProperty = 200	// 오류 발생


// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod()					// 출력 : type method


// 인스턴스에서는 타입 프로퍼티나 타입 메서드 사용 불가
mutable.typeProperty = 400			// 오류 발생
mutable.typeMethod()				// 오류 발생

학생 구조체 만들기

student.swift

// MARK: 구조체 생성

struct Student {
	
    // 가변 프로퍼티
    var name: String = "unknown"
    
    // 키워드도 `로 묶어주면 이름으로 사용할 수 있다.
    `class`: String = "Swift"
    
    // 타입 메서드
    static func selfIntroduce() {
    	print("학생타입 입니다.")
	}

	// 인스턴스 메서드 (self는 인스턴스 자신을 자칭하며, 몇몇 경우를 제외하고 사용은 선택사항 이다.)
    func selfIntroduce() {
    	print("저는 \(self.class)반 \(name)입니다.")
    }
}


// MARK: 구조체 사용

Student.selfIntroduce()		// 출력 : 학생타입 입니다.

// 가변 인스턴스 생성
var jamong: Student = Student()
jamong.name = "jamong"
jamong.class = "스위프트"
jamong.selfIntroudce()		// 출력 : 저는 스위프트반 jamong입니다.

구조체 사용

  • 연관된 몇몇의 값들을 모아서 하나의 데이터타입으로 표현하고 싶을 때
  • 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때
  • 자신을 상속할 필요가 없거나, 자신이 다른 타입을 상속받을 필요가 없을 때
  • Apple 프레임워크에서 프로그래밍을 할 때에는 주로 클래스를 많이 사용
profile
새해 목표 : 1일 1 깃, 블로그, 프로그래머스 2문제

0개의 댓글