반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • Android
    • JSP
    • 공부
    • 구축
    • IT
    • xcode
    • map
    • 프로그래밍
    • 예제
    • kotlin
    • ios
    • swift
    • Java
    • level1
    • swfit
    • 타입
    • reduce
    • 코딩테스트
    • 프로그래머스
    • 개발

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    Swift 사용자 정의 타입 - Struct
    Language/Swift

    Swift 사용자 정의 타입 - Struct

    2021. 3. 11. 13:22
    반응형

    Struct는 '값 타입' 입니다.

    스위프트의 대부분의 타입은 구조체로 이루어져 있습니다.

    구조체는 클래스와 합께 OOP를 위한 필수요소이며,

    프로그램의 코드를 추상화하기 위해 사용합니다.

    siwft의 구조체는 다른 언어와는 다르게 별도의 인터페이스 파일을 만들 필요가 없습니다.

     

     구조체와 클래스는 모두 새로운 데이터 타입을 정의하고 기능을 추가합니다.

    하지만 구조체는 '값 타입', 클래스는 '참조 타입'이라는 차이가 있죠.

    둘중 하나를 어떤 기준으로 선택해서 사용해야 할까요?

     

    애플 공식 문서에서는 다음 조건 중 하나 이상에 해당된다면 구조체 사용을 권합니다.

    • 연관된 간단한 값의 집합을 캡슐화 하는 것만이 목적일 때 
    • 캡슐화된 값이 참조되는 것보다 복사되는 것이 합당할 때
    • 구조체에 저장된 프로퍼티가 값 타입이며 참조되는 것보다 복사되는 것이 합당할 때
    • 다른 타입으로부터 상속받거나 자신이 상속될 필요가 없을 때 

    위의 문서를 클래스글까지 작성하고 나서 찾아보게 됬는데...

    제가 만든 예시는 구조체를 사용하기 적합하지 않은 예시군요..ㅠㅠ

    그래도 클래스와의 사용 차이점을 보기에 용이하니 참고만 해주세요 ^^...

    기본 형태

    struct 이름{
    	//구현
    }

    프로퍼티 및 메서드 구현

    import Foundation
    
    struct Food{
    	//불변 프로퍼티
    	let writer = "녹색하늘"
    	//가변 프로퍼티
    	var name = "초밥"
    	var price = 3000
    	static var location = "안양"
    
    	//인스턴스 메서드
    	func instanceMethod(){
    		print("리뷰 평이 아주 좋습니다.")
    	} 
    	//타입 메서드
    	static func typeMethod(){
    		print("직원들도 친절합니다.")
    	}
    }
    

    출력 함수

    func printFood(_ input : Food){
        print( "작성자 : \(input.writer)" )
        print( "\(input.name)은 \(input.price)원 입니다." )
        print( "위치는 \(input.location)에 있습니다" ) //error
        print( "위치는 \(Food.location)에 있습니다" )
        input.instanceMethod()
        input.typeMethod() //error
        Food.typeMethod()
        print("---------------------")
    }

    구조체의 인스턴스를 매개변수로 받아서 프로퍼티에 접근하는

    간단한 출력함수를 만들어 보았습니다.

    error의 위치를 보면 알 수 있듯 타입 프로퍼티는

    인스턴스에서 접근이 불가능합니다.

    직접 구조체에 접근해 사용해야 합니다.

    구조체 사용

    var food1 : Food = Food()
    
    printFood(food1)
    /*
    작성자 : 녹색하늘
    초밥은 3000원 입니다.
    위치는 안양에 있습니다
    리뷰 평이 아주 좋습니다.
    직원들도 친절합니다.
    */

    구조체는 이렇게 인스턴스를 생성해 사용합니다.

    별다른 값 수정없이 단순히 인스턴스를 사용한 모습입니다.

     

    var food2 : Food = Food()
    food2.writer = "푸른하늘" //error
    food2.name = "한정식"
    food2.price = 104500
    food2.location = "과천" //error
    
    printFood(food2)
    /*
    작성자 : 녹색하늘
    한정식은 104500원 입니다.
    위치는 안양에 있습니다
    리뷰 평이 아주 좋습니다.
    직원들도 친절합니다.
    */

     이번엔 인스턴스를 생성한 대신, 프로퍼티에 접근해

    값을 변경해서 사용한 경우입니다.

    불변 프로퍼티는 당연히 변경이 불가능하겠죠?

    그리고 타입 메서드는 위의 출력함수에서 보았듯,

    인스턴스에서 접근도 안되며 재정의도 불가능합니다.

     

     

     아? 그러면 구조체 Food 안에 있는 타입 메서드는 변경 못해도

    인스턴스 메서드는 변경하거나 재정의 할 수 있는거 아녜요?

    네, 안됩니다.

     구조체는 메서드를 변경하거나 재정의할 수 없습니다.

    이는 클래스에서 구현이 가능합니다.

    이 내용은 다음글 클래스에서 설명하도록 하겠습니다.

     

     


    공부에 도움을 준 사이트들

     

    전체적인 공부 가이드라인

    https://yagom.net/

     

    야곰닷넷 - yagom.net

    iOS 개발자들의 놀이터, 배움터, 모임터, 기록보관소 야곰닷넷입니다.

    yagom.net

    구조체와 클래스 알아보기

    blog.yagom.net/530/

     

    Swift - 구조체 클래스 - yagom's blog

    yagom's blog Swift - 구조체 클래스

    blog.yagom.net

     

    구조체/클래스의 프로퍼티 종류에대한 상세한 예제와 설명

    https://velog.io/@budlebee/Swift-5-프로퍼티Property

     

    Swift 5 : 프로퍼티(Property)

    프로퍼티는 클래스, 구조체, 열거형과 관련된 값이다. 프로퍼티에는 저장 프로퍼티와 계산 프로퍼티가 있다. 저장 프로퍼티는 클래스와 구조체에서만 사용 가능하고, 계산 프로퍼티는 클래스와

    velog.io

     

    반응형

    'Language > Swift' 카테고리의 다른 글

    Swift 사용자 정의 타입 - enum  (0) 2021.03.11
    Swift 사용자 정의 타입 - Class  (0) 2021.03.11
    Swift 옵셔널  (0) 2021.03.11
    Swift 반복문  (0) 2021.03.10
    Swift 다양한 switch-case 패턴들  (0) 2021.03.09
      'Language/Swift' 카테고리의 다른 글
      • Swift 사용자 정의 타입 - enum
      • Swift 사용자 정의 타입 - Class
      • Swift 옵셔널
      • Swift 반복문
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바