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
반응형