Swift- Struct(구조체)

아토시스·2023년 8월 22일
0

Swift

목록 보기
4/14

Struct(구조체)

  • Class와 다르게 상속이 불가능합니다.
  • (인스턴드/타입)메서드,(인스턴드/타입)프로퍼티(클래스와 같음)
  • 값타입(value)
  • Swift의 대부분의 큰 뼈대는 모두 Struct(구조체)로 구성되어있다.
  • Int, Double , String 등 데이터 타입

1. Struct를 사용하는 경우

  • 연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶을 때(타입 선언 해주는 것과 비슷한 거 같다)
  • 다른 객체 또는 함수 등으로 전달될 때 - 참조가 아닌 복사를 원할 때
  • 자신을 상속할 필요가 없거나 자신이 다른 타입을 상속받을 필요가 없을 때
  • Appe 프레임워크에서 프로그래밍을 할 때에는 주로 클래스를 많이 사용한다.

YoutuberStruct 이름을 String , Int로 저장하는 구조체를 만들었다. 구조체 내부의 변수를 프로퍼티라고 하므로 속성이 두개인 구조체이다. 이제 인스턴스를 만들고 사용할 수 있다.

예시 )


2. 구조체 인스턴스 생성 및 초기화

구조체를 정의하고 인스턴스를 생성하고 초기화 할때는 멤버와이즈 이니셜라이저 를 사용한다. 구조체의 프로퍼티 이름으로 자동으로 저장된다.

struct character {
    var name: String
    var isfavorite: Bool
    
}

var myCharacter: character = character(name: "포뇨", isfavorite: true)
myCharacter.name = "소피아"
myCharacter.isfavorite = false

print(myCharacter)  //character(name: "소피아", isfavorite: false)

3. Struct의 장점

  • 속도: 값 타입은 시스템 리소스를 적게 먹음
  • 안정성: 클래스는 참조 타입이기 때문에'원본'에 바로 접근이 가능하지만, 구조체는 원본은 그대로 두고 복사가 일어나기 때문에 원본을 지킬 수 있다. 클래스보다 안전한 코딩이 가능하다. 여러 클래스 또는 다중 스레드 환경에서 변수를 전달할 때 유용, 변수의 복사본을 다른 곳으로 보낼 수 있으면 다른 곳에서 변숫값을 변경하는 것에 대해 걱정할 필요가 없다.
  • 구조체의 주요 목적은 비교적 간단한 데이터 값을 캡슐화 하는 것이다~
struct Sport {
    var name: String
    var isOlympicSport: Bool

    var olympicStatus: String {
        if isOlympicSport {
            return "\(name) is an Olympic sport"
        } else {
            return "\(name) is not an Olympic sport"
        }
    }
}

만약 isOlympicSporttrue이거나 false일 때 값을 반환하도록 저장할 수도 있다.

let chessBoxing = Sport(name: "chessBoxing", isOlympicSport: true)
print(chessBoxing.olympicStatus)

예시)

struct Code {
    var language: String
    var containsErrors = false
    var report: String {
        if containsErrors {
            return "This \(language) code has bugs!"
        } else {
            return "This looks good to me."
        }
    }
}
let Korean = Code(language: "Korean", containsErrors: true)
print(Korean.report)

*꼭 return(반환)을 해줘야한다.(안그러면 에러 발생함.)


4. Struct의 특징

구조체는 Class와 달리 다른 종이에 복사한 것과 같다. 그렇기 때문에 복사본을 훼손하거나 변경을 해도 원본에는 영향을 미치지 않는다!

15번째 줄 까지는 값을 복사하기 전이기 때문에 그대로 "정대리"가 출력이 되지만 그 이후, 복사한 후에는 원본과 사본의 값이 다르게 출력이 되는 걸 볼 수 있다.

profile
오늘보다 더 나은 내일이 되길 바라며

0개의 댓글