애플스위프트(APPLE SWIFT) - 프로퍼티, 메서드, 상속, 초기화, 래퍼런스 타입과 밸류타입

애플의 스위프트 프로그래밍 언어에서, 클래스와 구조체는 데이터를 모델링하기 위한 주요 도구입니다. 각각의 특징과 장단점을 이해하면, 어떤 상황에서 클래스나 구조체를 사용해야 하는지 결정할 수 있습니다.

 

클래스(Class)

클래스는 참조 타입(reference type)입니다. 클래스 인스턴스는 힙 메모리에 저장되며, 인스턴스 자체가 아닌 참조(주소)가 전달됩니다.

class Dog { 
var name: String 
var breed: String 
   init(name: String, breed: String) { 
      self.name = name self.breed = breed
   }
} 

let dog = Dog(name: "Rex", breed: "Labrador") // 여기서 'dog'는 Dog 인스턴스를 참조합니다.

 

구조체(Struct)

구조체는 값 타입(value type)입니다. 구조체 인스턴스는 스택 메모리에 저장되며, 인스턴스의 복사본이 전달됩니다.

struct Cat { 
   var name: String var breed: String 
} 
var cat = Cat(name: "Whiskers", breed: "Siamese") // 여기서 'cat'는 Cat  인스턴스의 복사본을 가집니다.

 

 

프로퍼티(Properties)

저장 프로퍼티(Stored Properties)

값을 저장하는 가장 기본적인 프로퍼티 유형입니다.

struct Point { 
   var x: Int // 저장 프로퍼티 
   var y: Int // 저장 프로퍼티
}

 

계산 프로퍼티(Computed Properties)

실제로 값을 저장하지 않고, 값에 대한 계산을 수행합니다.

struct Rectangle { 
   var width: Double 
   var height: Double
   var area: Double { 
      return width * height
   }
   // 'area'는 계산 프로퍼티입니다. 
}

 

 

메서드(Methods)

인스턴스 메서드(Instance Methods)

특정 클래스 또는 구조체 인스턴스와 연관된 메서드입니다.

class Car { 
var speed = 0
   func accelerate() {
      speed += 10 
   } 
// 'accelerate'는 인스턴스 메서드입니다. 
}

 

 

타입 메서드(Type Methods)

타입 자체에 속한 메서드입니다. static 키워드를 사용하여 정의합니다.

class Math { 
   static func square(of number: Int) -> Int { 
      return number * number
   } // 'square'는 타입 메서드입니다.
 }

 

 

상속(Inheritance)

클래스

클래스는 다른 클래스로부터 상속을 받을 수 있습니다. 이를 통해 코드 재사용, 확장성 및 다형성을 구현할 수 있습니다.

class Animal { 
   var name: String init(name: String) {
       self.name = name
   }
} 
class Dog: Animal {
   var breed: String 
   init(name: String, breed: String) {
      self.breed = breed 
      super.init(name: name)
   } // Dog는 Animal 클래스로부터 상속받습니다.
}

 

구조체

구조체는 상속을 지원하지 않습니다.

 

초기화(Initialization)

클래스와 구조체

생성자를 사용하여 인스턴스가 초기화될 때 필요한 설정을 수행합니다.

 

struct Point { 
   var x: Int 
   var y: Int 
   init(x: Int, y: Int) {
       self.x = x 
       self.y = y
   } // 초기화 메서드 
}

 

 

레퍼런스 타입과 밸류 타입

클래스(레퍼런스 타입)

인스턴스가 참조에 의해 전달되고 공유됩니다.

 

구조체(밸류 타입)

인스턴스가 값에 의해 전달되며, 각각 독립적인 복사본을 가집니다.

var original = Point(x: 10, y: 20) 
var copy = original
copy.x = 30 // 'original'의 x는 10으로 남아있고, 'copy'의 x는 30으로 변경됩니다.

 

이 예시들을 통해 클래스와 구조체의 차이점과 사용 방법에 대해 더 잘 이해하시길 바랍니다.

+ Recent posts