티스토리 뷰
1. 객체지향 프로그래밍
소프트웨어를 개발할 때, 부품에 해당하는 객체를 먼저 만들고 이 객체를 조립해서 프로그램을 만드는 기법
예를 들어, 핸드폰을 만들 때 부품(객체)들을 조립해서 만다는 것과 비슷하다.
2. 객체(object)
우리가 보고 느끼고 인지하는 모든 것들
물리적으로 존재하거나 개념적인 것 중에 다른 것과 식별 가능한 것들
예를 들어, 자동차, 책, 사람 등 모두 객체가 될 수 있음
객체는 속성(변수)과 동작(메소드)로 구성되어 있다.
3. 장점
- 프로그램을 보다 변경하기 쉽게 만들 수 있음
- 코드의 변경을 최소화해서 유지보수에 유리
- 코드의 재사용을 통해 반복적인 코드를 최소화하고 간결하게 표현 가능
특징1) 추상화 (Abstration)
- Abstration: 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것
- 즉, 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
예를 들어, Bird와 Airplane 라는 객체가 있을 때, 이 두 개의 공통적인 기능은 Fly 지만 그 기능의 구현 내용은 각기 다르다.
class Bird{
}
class Airplane {
}
따라서 이렇게 공통 기능은 구현부 없이 정의해두고
protocol Flyable {
func fly()
}
각 객체에서 fly에 대한 자세한 구현부를 작성한다.
class Bird: Flyable {
func fly() {
print("Bird is flying")
}
}
class Airplane: Flyable {
func fly() {
print("Airplane is flying")
}
}
특징2) 상속 (Inheritance)
- 기존 클래스(부모 클래스)를 바탕으로 새로운 클래스(자식 클래스)를 만드는 기능
- 자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있으며, 필요한 경우 추가하거나 재정의(오버라이딩)할 수 있음
// 부모 클래스
class Animal {
func makeSound() {
print("Some generic animal sound")
}
}
// 자식 클래스는 부모 클래스의 메서드를 상속 받아 재정의하여 사용
class Dog: Animal {
override func makeSound() {
print("Bark")
}
}
특징3) 다형성 (Polymorphism)
- 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
- 예를 들어 여성이 상황에 따라 어머니일 수도 자식일 수도 혹은 회사에서는 회사원일 수도 있는 것과 비슷합니다.
- 주로 메서드 오버라이딩 과 메서드 오버로딩으로 구현된다.
class Shape {
func draw() {
print("Drawing a shape")
}
}
class Circle: Shape {
override func draw() {
print("Drawing a circle")
}
}
class Square: Shape {
override func draw() {
print("Drawing a square")
}
}
// Shape 클래스를 상속받은 Circle과 Square 클래스는 각각 draw 메서드를 재정의
// 이처럼 하나의 인터페이스로 여러 형태의 객체를 처리할 수 있는 것이 다형성
특징 4) 캡슐화 (Encapsulation)
- 객체의 데이터를 보호하고 필요한 부분만 외부에 공개
- 이를 통해 외부에서 객체의 내부 상태를 보호할 수 있음
- setter로 값을 설정하고 getter로 값에 접근할 수 있음
class Person {
private var age: Int = 0 // age 속성은 외부에서 직접 접근 불가
func setAge(newAge: Int) {
if newAge >= 0 {
age = newAge // 조건을 통해 안전하게 값을 설정
}
}
func getAge() -> Int {
return age // 외부에서 age 값에 접근할 수 있는 메서드 제공
}
}
'TIL' 카테고리의 다른 글
7월 21일: swift) 천 단위마다 콤마 찍기 (0) | 2023.07.21 |
---|---|
7월 20일: 객체지향 5원칙 (SOLID) (0) | 2023.07.20 |
7월 18일: swift)클래스와 구조체의 차이 (0) | 2023.07.18 |
7월 17일: 스택stack / 큐queue (0) | 2023.07.17 |
7월 14일: fatal: pathspec '파일 이름' did not match any files (0) | 2023.07.17 |
최근에 올라온 글