클래스

ulls12·2023년 12월 7일
0

Swift TIL

목록 보기
11/60
post-thumbnail

객체 지향

  • 객체란 쉽게 말하자면 '대상을 나타내는 단어'
  • 각 객체와 그 객체들 간의 관계를 설계하는 것이 객체 지향 프로그래밍(OOP)
  • OOP의 특징
  1. 추상화
    복잡한 시스템을 단순화하여 중요한 부분을 강조하고 불필요한 부분을 숨기는 것. 클래스나 프로토콜을 통해 데이터와 동작을 추상화하여 필요한 정보만을 노출시키는 것을 포함
  2. 캡슐화
    객체의 상태(데이터)와 행동(메서드)를 하나로 묶고, 외부에서의 접근을 제한하여 객제 내부의 세부 구현을 숨기는 것을 의미. 이를 통해 객제 간의 의존성을 줄이고 코드를 보호하며 유지보수성을 높힐 수 있다
  3. 상속
    기존 클래스에서 정의된 속성과 메서드를 다른 클래스에서 재사용하는 것. 부모 클래스(상위, 슈퍼 클래스)의 특성을 자식 클래스(하위, 서브 클래스)가 물려받아 사용할 수 있다
  4. 다형성
    동일한 인터페이스를 가진 다른 클래스들이 각각의 방식으로 동작할 수 있는 능력을 말한다. 다형성은 오버리이딩과 연관되어 있으며, 서로 다른 클래스들이 동일한 메서드를 호출할 때 각 클래스의 오버라이딩 된 메서드가 실행된다
    a. 오버라이딩
    상속관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의한다. 자식 클래스에서 부모 클래스의 동일한 메서드 이름을 사용하여 내용을 변경하거나 확장할 수 있다
    b. 오버로딩
    동일한 함수나 메서드 이름을 가지지만 매개변수의 타입, 개수, 순서 등이 다른 여러 버전의 함수를 정의하는 것을 말한다.

클래스

  1. 프로퍼티
  • 클래스, 구조체, 열거형 안에 있는 변수 또는 상수를 나타낸다
  • 클래스의 속성으로 객체의 상태를 저장하거나 제공합니다. 이러한 상태는 클래스의 인스턴스가 가질 수 있는 데이터를 나타낸다
  • 프로퍼티는 저장 프로퍼티와 계산 프로퍼티로 나뉜다
    a. 저장 프로퍼티 : 값을 저장하고 인스턴스의 일부로 그 값을 유지한다
    b. 계산 프로퍼티 : 특정한 계산을 통해 값을 반환하며, 값을 저장하지 않고 필요할 때마다 새로 계산된다
  1. 메서드
  • 클래스, 구조체, 열거형 안에 있는 함수를 나타낸다
  • 클래스의 동작을 정의하고, 클래스의 인스턴스에 대해 수행하는 특정한 작업을 수행한다
  • 메서드는 인스턴스 메서드와 타입 메서드로 구분된다
    a. 인스턴스 메서드 : 특정 인스턴스에 속하는 동작을 정의하고, 인스턴스의 상태에 접근할 수 있다
    b. 타입 메서드 : 클래스 자체와 관련된 동작을 정의하며, 특정 인스턴스에 속하는 것이 아닌 클래스 자체에 영향을 준다
  • 클래스는 이니셜라이저(initializer)를 통해 초기값을 설정할 수 있다 프토퍼티에 기본 값이 없는 경우 이니셜라이저를 필수로 구현해야 한다. 그렇지 않을 경우 에러가 발생한다
  1. 참조 타입
  • 변수나 상수에 할당될 때에는 값을 복사하는 것이 아니라 참조(주소)가 복사되어 같은 인스턴스를 가리키게 된다. 클래스가 대표적인 예시이다
  • 변수나 상수에 할당될 때 참조가 복사되므로, 동일한 인스턴스를 공유하게 된다. 따라서 한 쪽에서 값을 변경하면 다른 쪽에서도 영향을 받게된다
//참조 타입 예시
class Person {
	var name: String
    init(name: String) {
    	self.name = name
    }
}
var person1 = Person(name: "Bob")
var person2 = person1 // 참조 복사
person2.name = "Steve"
print(person1.name) // 출력 : Steve
print(person2.name) // 출력 : Steve
//클래스 구성
class Name {
	var name: String
    init(name: String) {
    	self.name = name
    }
    func sayMyName() {
    	print("my name is \(name)")
    }
}
profile
I am 개발해요

0개의 댓글