iOS

[iOS/swift] 객체 지향 패러다임 구현하기🍀

개발하는 감자입니다 2024. 7. 22. 23:42
728x90

안녕하세요. 개발감자입니다!

네이버 부스트캠프 챌린지를 하며 정리한 내용입니다.

객체 지향 패러다임은 무엇인지, swift에서는 어떻게 구현하는지 정리해보았습니다.

1. 용어

  • 클래스 class
    • 객체를 만들어 내기 위한 틀이며, 만들어 낼 객체의 속성과 메서드의 집합을 담아놓은 것
    class Object { ... }
    
  • 객체 object
    • 클래스로부터 만들어지는 실체, 클래스로 선언된 변수를 객체라 함.
    var object = Object()
    
  • 인스턴스 instance
    • 객체가 메모리에 할당이 된 상태이며 런타임에 구동되는 객체, 객체와 같은 의미로 쓰이기도 함.
    • AWS의 클라우드 가상서버라는 의미를 가지기도 함.
  • 용어 쉽게 이해하기
    • 붕어방 틀에 찍으면, 팥과 밀가루의 값은 다를 수 있다. → ex. 속성, 변수의 값
    용어 비유
    클래스 붕어빵 틀
    객체 붕어빵

2. 프로그래밍 구조

  • 프로퍼티와 메소드 property and method
    • 프로퍼티 : 클래스의 속성
    • 메서드 : 클래스의 함수
    class Person {
    	// 프로퍼티
    	var age = 24
    
    	// 메서드
    	func levelup() {
    		...
    	}
    
    }
    
  • 캡슐화 Encapsulation
    • 객체의 속성(프로퍼티)와 행동(메서드)을 하나로 묶고, 외부에서의 직접 접근을 제한하는 것.
    • 객체의 데이터(프로퍼티)는 메서드를 통해서만 접근이 가능하게 하는 원리.
    • 정보 은닉(Information Hiding)을 통해 데이터의 무결성을 유지.
    class Account {
        private var balance: Int = 0
    
        func deposit(amount: Int) {
            balance += amount
        }
    
        func getBalance() -> Int {
            return balance
        }
    }
    
  • 상속 Inheritance
    • 기존 클래스를 바탕으로 새로운 클래스를 만드는 것.
    • 기존 클래스의 모든 속성과 메서드를 상속받고, 필요한 속성이나 메서드를 추가하거나 변경 가능.
    class Animal {
        var name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("Some generic sound")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("Bark")
        }
    }
    
    • 오버로딩 Overloading
      • 이름이 같아도 매개변수, 타입, 순서를 다르게 해서 같은 이름으로도 여러 개의 함수를 정의할 수 있는 것.
      • 프로그램의 유연성을 높이고 코드를 깔끔하게 작성할 수 있게 한다.
      class Math {
          func add(a: Int, b: Int) -> Int {
              return a + b
          }
      
          func add(a: Double, b: Double) -> Double {
              return a + b
          }
      }
      
      
  • 다형성 Polymorphism
    • 동일한 인터페이스를 구현하는 여러 객체가 다양한 방식으로 동작하는 것.
    • 코드의 재사용성과 유연성을 높인다.
    • 오버라이딩 Overriding
      • 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의를 하는 것.
      • 상속 관계 클래스에서 사용되며 static, final로 선언한 메서드는 오버라이딩이 불가능하다.
      class Vehicle {
          func start() {
              print("Vehicle started")
          }
      }
      
      class Car: Vehicle {
          override func start() {
              print("Car started")
          }
      }
      

3. 객체와 클래스

  • 추상화 Abstraction vs 구체화 Concretization

정의 추상화 구체화

내용 복잡한 데이터 구조, 시스템 등으로부터 핵심만을 가려내 덜 자세하게 만드는 것. - 데이터 추상화 : 데이터의 공통점만 모으기 - 프로세스 추상화 : 어떠한 내부 프로세스를 숨기는 것 구체적이고 세부적인 내용을 포함하여, 실제 동작이나 데이터를 기술하는 것.
장점 복잡도를 낮출 수 있음 실제적인 구현을 통해 동작 가능

4. 참조

  • 간접 참조 Indirection
    • 값 자체보다 컨테이너, 연결, 별명 등을 사용해서 우회해서 참조하도록 하는 방식
    • 소프트웨어의 유연성과 확장성을 높이는 데 도움이 됨.
    var originalValue = 42
    var indirectReference = &originalValue
    
  • 인스턴스 참조 Instance Reference
    • 특정 클래스의 인스턴스(객체)에 대한 참조.
    • 주로 인스턴스 메서드나 프로퍼티에 접근할 때 사용됨.
    class Car {
        var model: String
    
        init(model: String) {
            self.model = model
        }
    }
    
    let myCar = Car(model: "Tesla")
    let carReference = myCar // myCar를 참조하는 새로운 변수
    
    
728x90
반응형