Custom Data Type

Jaby·2024년 3월 11일
0

SwiftBasic

목록 보기
7/20
post-thumbnail

커스텀 데이터 타입은 기본 데이터 타입 (예: Int, String, Double) 외에 사용자가 직접 정의하는 데이터 타입입니다.
클래스, 구조체, 열거형은 각각 고유한 특징을 가지고 있으며, 상황에 따라 적절하게 선택하여 사용해야 합니다.


클래스 Class

  • 참조 타입: 클래스 인스턴스는 메모리 주소를 통해 참조됩니다.
  • 상속 가능: 다른 클래스의 속성과 메서드를 상속받을 수 있습니다.
  • 다형성: 상속을 통해 다양한 형태의 객체를 다루는 것이 가능합니다.

- class 예시

// `Person` 클래스 정의
class Person {
    var name: String // 이름 속성
    var age: Int // 나이 속성

    // 초기화 메서드
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    } 

    // 메서드
    func sayHello() {
        print("Hello, my name is \(name) and I am \(age) years old.")
    }
}

// `Person` 클래스 인스턴스 생성
let person1 = Person(name: "Jaby", age: 18)
let person2 = Person(name: "Haru", age: 1)

// 메서드 호출
person1.sayHello()
person2.sayHello()

// 출력
Hello, my name is Jaby and I am 18 years old.
Hello, my name is Haru and I am 1 years old.

구조체 Struct

  • 값 타입: 구조체 인스턴스는 값 자체를 복사하여 전달됩니다.
  • 상속 불가능: 다른 구조체로부터 상속받을 수 없습니다.
  • 초기화: 기본 초기화가 제공되며, 커스텀 초기화를 추가할 수 있습니다.

- struct 예시

// `Point` 구조체 정의
struct Point {
    var x: Int // x 좌표 속성
    var y: Int // y 좌표 속성
}

// `Point` 구조체 인스턴스 생성
let point1 = Point(x: 10, y: 20)
let point2 = Point(x: 30, y: 40)

// 속성 접근
print("point1: (\(point1.x), \(point1.y))")
print("point2: (\(point2.x), \(point2.y))")

//출력
point1: (10, 20)
point2: (30, 40)

열거형 Enumeration

  • 값 타입: 열거형 값은 값 자체를 복사하여 전달됩니다.
  • 관련 값: 각 열거형 값에 데이터를 추가할 수 있습니다.
  • 연산: 열거형 값에 대한 연산을 정의할 수 있습니다.

- enum 예시

// `Color` 열거형 정의
enum Color: String {
    case red
    case green
    case blue
}

// `Color` 열거형 값 사용
let myColor = Color.red
print("myColor: \(myColor)")

// 열거형 값에 대한 연산
switch myColor {
case .red:
    print("Red is the color of passion.")
case .green:
    print("Green is the color of nature.")
case .blue:
    print("Blue is the color of the sky.")
}

//출력
myColor: red
Red is the color of passion.

어떤 데이터 타입을 사용해야 할지 결정하는 방법

  • 불변성이 필요할 때: 값 타입인 구조체나 열거형을 사용
  • 상속이 필요할 때: 참조 타입인 클래스를 사용
  • 간단한 데이터 모델링: 구조체나 열거형을 사용
  • 복잡한 동작: 클래스를 사용
profile
hello, world!

0개의 댓글

관련 채용 정보