final키워드란? final class와 struct가 다를 점이 무언가

임혜정·2024년 8월 26일
0
post-custom-banner

1. final 키워드는?

  • 클래스, 메서드, 프로퍼티 앞에 붙일 수 있다
  • 상속과 오버라이딩을 막아줌
  • 컴파일러 최적화에 도움을 줘서 성능 향상

따라서 class앞에 final키워드를 붙이면 다른 클래스가 이 클래스를 상속할 수 없고 메서드 디스패치가 정적으로 결정되서 좀 더 빨라질 수 있다


2. 그렇다면 구조체와 다를 게 뭐야?

class와 struct의 차이점 중에 하나로 상속 가능 여부가 있는데, 클래스를 상속 못하는 상태로 바꾸면서도 클래스를 사용해야 하는 경우가 있을까?

  1. 클래스는 여전히 참조타입이다
    상속은 불가하지만 인스턴스는 여전히 참조한다.

  2. 메모리 관리
    여전히 참조 카운팅을 쓴다. struct는 스택에 할당되고, 참조 카운팅이 필요하지 않다.

  3. 가변성
    final class의 프로퍼티는 var로 선언하면 자유롭게 수정가능하지만 struct에서 프로퍼티를 수정하려면 mutating키워드가 필요함


3. 값 타입과 참조 타입이 유용한 각각의 경우

값 타입(struct)이 유용한 경우

  1. 독립적인 값을 표현할 때:
    • 예: 좌표(Point), 크기(Size), 날짜(Date)
  2. 데이터의 캡슐화가 중요할 때
  3. 스레드 간 데이터 전달 시 (race condition 방지)
  4. 값의 불변성이 중요할 때
  5. 작은 데이터 구조일 때

참조 타입(class)이 유용한 경우

  1. 공유 데이터가 필요할 때:
    • 예: 네트워크 연결, 데이터베이스 연결
  2. 상속이 필요한 경우
  3. 객체의 정체성이 중요할 때 (두 객체가 같은지 비교)
  4. 리소스 관리가 필요한 경우 (deinit 사용)
  5. 큰 데이터 구조나 복잡한 객체 그래프

.
.

ex)

  • struct 사용: Int, String, Array, Dictionary 등 Swift 기본 타입들
  • class 사용: UIViewController, UIView 등 UIKit의 대부분 타입들

불필요한 복사로 인한 성능 저하를 피하고 싶다면 class, 데이터 일관성과 안전성이 중요하다면 struct가 좋겠다

profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️
post-custom-banner

0개의 댓글