티스토리 뷰

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 값에 접근할 수 있는 메서드 제공
    }
}

 

 

 

추천 기사

 

객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 -

객체 지향 프로그래밍은 객체의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다. 객체 지향 프로그래밍의 기본적인 개념과 그 설계를 바르게 하기 위

www.codestates.com

 

 

최근에 올라온 글