OOP 객체지향 프로그래밍이란?

WWWKR·2024년 4월 2일
0

객체지향 프로그래밍(OOP : Object-Oriented Programming)은 소프트웨어를 설계하고 개발하는 데 사용되는 프로그래밍 패러다임 중 하나이다. 이 패러다임은 현실 세계의 객체(object)에 기반을 둔 개념을 사용하여 프로그램을 구축하는 방식을 강조한다. 이를 통해 코드의 가독성, 재사용성, 유지 보수성향상시킬 수 있다.

객체지향 프로그래밍에는 크게 4가지 특징인 추상화, 캡슐화, 상속, 다형성이 있다.

추상화(Abstraction): 추상화는 객체들의 공통된 특징을 파악하여 정의해놓은 설계 방법이라고 볼 수 있다. 예를 들어, 자동차라는 클래스를 설계할 때 휠, 엔진, 차체 등의 공통적인 부분을 추상화하여 표현할 수 있다. Kotlin에서는 추상 클래스나 인터페이스를 사용하여 추상화를 구현할 수 있다.

// 추상 클래스
abstract class Shape {
    abstract fun draw()
}

class Circle : Shape() {
    override fun draw() {
        println("Circle is drawn")
    }
}

class Rectangle : Shape() {
    override fun draw() {
        println("Rectangle is drawn")
    }
}

fun main() {
    val circle = Circle()
    val rectangle = Rectangle()

    circle.draw()
    rectangle.draw()
}

캡슐화(Encapsulation): 데이터와 그 데이터를 다루는 메서드를 하나의 단위로 묶는 것을 말한다. 이를 통해 객체의 내부 구현을 외부로부터 숨기고, 객체 간의 상호작용을 제어할 수 있다. 캡슐화는 정보 은닉을 통해 객체의 내부 상태를 보호하고 유지보수성을 높여준다. Kotlin에서는 클래스와 접근 제어자를 사용하여 캡슐화를 구현할 수 있다.

class Counter {
    private var count = 0

    fun increment() {
        count++
    }

    fun getCount(): Int {
        return count
    }
}

fun main() {
    val counter = Counter()
    counter.increment()
    println(counter.getCount())
}

상속(Inheritance): 부모 클래스의 속성과 메서드를 자식 클래스가 상속받는 것을 말한다. 상속을 통해 코드의 재사용성을 높일 수 있다. 부모 클래스의 변경사항이 자식 클래스에도 자동으로 적용되므로 코드 중복을 줄이고 유지 보수를 쉽게 할 수 있다. Kotlin에서는 :을 사용하여 상속을 구현할 수 있다.

// 부모 클래스
open class Animal(val name: String) {
    open fun sound() {
        println("Animal makes a sound")
    }
}

// 자식 클래스
class Dog(name: String) : Animal(name) {
    override fun sound() {
        println("Dog barks")
    }
}

fun main() {
    val dog = Dog("Buddy")
    println("Name: ${dog.name}")
    dog.sound()
}

다형성(Polymorphism): 서로 다른 클래스가 같은 이름의 메서드를 가질 수 있으며, 실행 시점에 어떤 객체의 메서드를 호출할지 결정된다. 다형성은 코드의 유연성과 확장성을 높여준다. 같은 인터페이스를 가진 객체들을 동일하게 처리할 수 있어서 코드의 일반화를 가능하게 한다. Kotlin에서는 함수 오버라이딩을 통해 다형성을 구현할 수 있다.

// 동물 클래스
open class Animal {
    open fun sound() {
        println("Animal makes a sound")
    }
}

// 각 동물들의 소리 클래스
class Dog : Animal() {
    override fun sound() {
        println("Dog barks")
    }
}

class Cat : Animal() {
    override fun sound() {
        println("Cat meows")
    }
}

fun main() {
    val animals: Array<Animal> = arrayOf(Dog(), Cat())

    for (animal in animals) {
        animal.sound()
    }
}
profile
안드로이드 개발자

0개의 댓글