객체지향 프로그래밍

강현성·2023년 4월 27일
0

java

목록 보기
1/1

1. 객체지향 프로그래밍(Object-Oriented Programing)이란?

객체지향 프로그래밍이란 여러 객체를 만든 뒤, 이들끼리 서로 상호작용하도록 만드는 프로그래밍 방법론이다. 예를 들어 컴퓨터를 만들기 위해서는 CPU, RAM, SSD 등의 부품이 필요하고 이들끼리 조립하여 컴퓨터를 만들 수 있다. 여기서 CPU, RAM, SSD가 객체이고 이 객체들을 조립하여 컴퓨터를 만드는 것이 객체지향 프로그래밍이다.

객체는 클래스를 통해 생성되는데, 클래스란 객체가 가져야 하는 상태와 행동을 정의해 둔 일종의 설계도이다. 예를 들어 CPU 클래스가 가져야 하는 상태로는 클럭 속도, 캐시 크기 등이 있고 행동으로는 명령어 해독, 실행 등이 있을 것이다. 이러한 클래스를 통해 객체를 생성하는 것을 인스턴스화라고 한다.

2. 객체지향 프로그래밍 특징

1. 캡슐화

  • 객체의 데이터와 메서드를 하나로 묶어 외부에서 접근을 제어하는 것을 말한다.

    private: 해당 클래스에서만 접근이 가능하며, 외부에서는 접근할 수 없음
    public: 모든 클래스에서 접근이 가능
    protected: 해당 클래스와 동일 패키지에 속한 클래스와 상속받은 클래스에서 접근 가능

2. 상속

  • 자식 클래스는 부모 클래스를 상속받아 부모 클래스의 속성과 기능을 사용할 수 있다.

3. 다형성

  • 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것. 구체적으로, 상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조할 수 있도록 하는 것. 예를 들어 게임에서 하나의 캐릭터가 여러 직업으로 전직할 수 있다 할 때, 캐릭터가 마법사가 되기도 하고 전사가 되기도 하는 것.

    오버라이딩(overriding)
    부모 클래스의 메서드를 자식 클래스에서 재정의하여 다양한 동작을 수행할 수 있도록 하는 것.
    오버로딩(overloading)
    같은 이름의 메서드를 여러 개 정의하고, 매개변수의 타입, 개수, 순서 등을 다르게 하여 다양한 상황에 대응할 수 있도록 하는 것.

4. 추상화

  • 프로그램을 만드는데 필요한 공통적인 부분만 추출하고 필요하지 않은 것은 제거하는 것. 여러 클래스 중 공통된 기능이 있다면 상위 클래스에 해당 기능들을 작성한 뒤 필요한 클래스에서 상속받아서 사용하는 것.

3. 객체지향 프로그래밍 장단점

3-1. 장점

1. 클래스 단위수정이 가능하기 때문에 유지 보수가 편하다.

  • 예를 들어 특정 객체에서 문제가 발생하면 해당 객체의 클래스 부분을 수정하면 되기 때문에 유지 보수 측면에서 편하다.

2. 재사용성

  • 어떤 기능을 구현하기 위해 이미 객체를 만들어 놓았다면, 그 객체를 다른 곳에서도 재사용할 수 있다. 예를 들어, 앱 서비스에서 로그인 기능을 구현하기 위해 User 객체를 만들었다고 가정해 보면, 이 User 객체는 로그인 기능을 수행하는 데 필요한 여러 메서드와 변수를 포함하고 있을 것이다. 이제 이 User 객체를 다른 곳에서도 사용할 수 있다. 예를 들어, 사용자 정보를 수정하는 기능을 구현할 때도 User 객체를 활용하여 사용자 정보를 업데이트할 수 있다. 이렇게 객체를 재사용함으로써, 코드의 중복을 줄일 수 있고, 코드의 가독성을 높일 수 있다.

3-2. 단점

1. 복잡성

  • 객체지향 프로그래밍은 복잡한 문제를 해결하기 위한 설계 및 구현이 필요하다. 객체 간의 관계를 이해하고 설계하는 것이 어렵기 때문에 처음 객체지향 프로그래밍을 통해 프로그램을 구현할 때 복잡할 수 있다.

2. 성능

  • 객체지향 프로그래밍은 객체 간의 상호작용을 통해 로직을 구현하기 때문에 함수형 프로그래밍과 비교했을 때 성능이 떨어질 수 있다. 특히 대규모 데이터 처리나 빠른 응답이 필요한 경우에는 성능 이슈가 발생할 수 있다.

3. 메모리 사용량

  • 객체지향 프로그래밍에서는 객체를 생성하고 사용하기 때문에 메모리 사용량이 많을 수 있다. 특히 객체 생성 및 소멸을 반복하는 경우에는 메모리 누수가 발생할 수 있다.
profile
Hello!

0개의 댓글