본문 바로가기
iOS_Swift/문법 정리

Swift - 구조체(struct)

by chozjjae 2022. 5. 11.

struct (구조체)

특징

  • Int, Double, String 등 기본 자료형은 모두 구조체이다.
    • public struct Int
    • public struct Double
    • public struct String
    • public struct Array<Element>
    • 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용 가능하다.
  • nil도 구조체이다.
  • Memberwise Initializer가 자동으로 만들어진다.
  • Array, Dictionary, Set은 모두 Generic Structure이다.
  • 구조체/enum의 인스턴스는 값(value) 타입, 클래스의 인스턴스는 참조(reference)타입이다.
  • 구조체는 상속이 불가능 하다.

class, Struct 소스 비교하기

Struct : Init()메서드가 자동으로 만들어 지기 때문에 따로 만들어주지 않아도 된다.

//struct코드 사용예시
struct Man{
    var age : Int
    var height : Double
    func cho(){
        print(age, height)
    }
}
let sun = Man(age:20, height:70) //인스턴스 생성
print(sun.age)//20 , 프로퍼티 접근, 출력
print(sun.height)//70.0
sun.cho()//20 70.0

class : init()메서드를 필수로 만들어 줘야한다. 

//클래스 코드 사용예시
class Man1{
    var age1 : Int
    var height1 : Double
    func cho1(){
        print(age1,height1)
    }
    init(age1:Int, height1:Double){
        self.age1 = age1
        self.height1 = height1
    }
}
let moon = Man1(age1:21,height1:71)
moon.cho1()//21, 71.0

클래스 내에서 구조체 사용하기

  • 사용 예시
    • 클래스 내부 소스
    • var 변수 = Man( ) //구조체 받아오기
    • print(인스턴스명.변수[클래스선언].출력 프로퍼티명[구조체 내부] )
//간단예시 1
struct Man{
    var age : Int = 25
}

class Girl{
    var some = Man() //클래스 내에서 구조체 받아오기
    var height : Double = 165
}

let kim = Girl() //인스턴스 생성

print(kim.some.age) //인스턴스.class프로퍼티.struct프로퍼티
//예시 2
struct Man{
    var age : Int = 10
    var height : Double = 20
    func cho(){
        print(age, height)
    }
}
let sun = Man(age:20, height:70)
print(sun.age)//20
print(sun.height)//70.0
sun.cho()//20 70.0
//------------------------------------------
class Man1{
    var man = Man() //클래스 내에서 구조체 받아오기
    var age1 : Int
    var height1 : Double
    func cho1(){
        print(age1,height1)
    }
    init(age1:Int, height1:Double){
        self.age1 = age1
        self.height1 = height1
    }
}
let moon = Man1(age1:21,height1:71)
moon.cho1()//21, 71.0
print(moon.man.height) //20.0 , 클래스 내에서 받아온 구조체 출력

인덕대학교 한성현 교수님의 강의를 참고하였습니다.

youtube - smile Han