객체지향 프로그래밍(OOP)

ChoRong0824·2023년 4월 29일
1

Java

목록 보기
11/31
post-thumbnail

4.26 스터디를 통해, OOP에 대한 글쓰기를 하게 되었습니다.
OOP에 대해서, 조금 더 쉽게 이해하기 위해서 글로만 작성하게 되었습니다.
OOP를 이해하기 위해, 보다 자세히 작성할 것이며,
이해를 돕고자 필자가 실상에서 쓰이는 용어를 활용할 예정입니다.

OOP는 객체의 관점에서 프로그래밍 하는 것을 의미합니다.
C언어를 절차 지향 프로그래밍이라 하는데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것을 말합니다.
반면 OOP는 객체들의 유기적인 관계를 통해서 프로세스가 진행된다고 명기되어있습니다.

이를 좀더 쉽게 설명해보겠습니다.

절차지향 프로그래밍

절차지향 프로그래밍은 데이터와 기능이 별도로 관리됩니다.
따라서, 순서가 자주 바뀌거나 복잡해지면 유지비용이 많이 듭니다.
(복잡해지는 경우는 보통 여러 구조를 짜서 프로그래밍을 하면 복잡해집니다.
즉, 규모가 커지면 복잡해진다고 생각하시면 됩니다.)
이를 해결하기 위해 구조적 프로그래밍 이 나오게 되었습니다.

구조적 프로그래밍

명령어 실행순서가 뒤바뀌거나 제어구조가 복잡해지지 않도록 몇가지 규칙에 따라 프로그램을 작성한 것을 말합니다.

규칙
1. 작은 규모로 조직화
2. 단일 입,출구 형태로 작성
3. goto문 사용 x (이게 알고리즘의 시간복잡도를 상당히 훼손한다고 생각됩니다)
4. 프로그램의 제어구조 사용 (순차구조, 선택구조, 반복구조)


객체지향 프로그래밍

(기능 + 데이터) 묶어서 캡슐화하여 전달 및 관리합니다.

자바의 객체지향 프로그래밍을 이해하기 쉽게 설명하면 실생활에서 우리가 보는 사물 또는 개념, 행동 등을 프로그램으로 표현하는 것이다. 객체지향 프로그래밍에서 가장 중요한 단위는 "객체"라고 하며, 객체는 속성(상태)과 행동(기능)으로 구성된다.

예를 들어,
핸드폰이라는 객체를 생각해보자.

핸드폰의 속성(상태)에는 다음과 같은 것들이 있다

• 제조사
• 모델명
• 색상
• 용량

핸드폰의 행동(기능)에는 다음과 같은 것들이 있다

• 전화 걸기
• 문자 보내기
• 인터넷 사용하기
• 카메라로 사진 찍기

이렇게 속성과 행동을 가지는 핸드폰 객체를 자바 프로그램으로 표현하면, 먼저 핸드폰이라는 '클래스'를 만들고, 클래스에 속성과 행동을 정의한다. 그리고 이 클래스를 기반으로 핸드폰 객체를 만든다. 클래스는 공통적인 속성과 행동을 정의하고, 실제 생성되는 객체마다 개적인 속성값을 가진다.

객체 지향 프로그래밍의 장점은 다음과 같다

  1. 코드의 재사용성이 높다.
  2. 이미 작성된 클래스를 활용하거나 상속(확장)하여 새로운 기능을 구현할 수 있다.
    각 객체 간의 책임과 역할이 분명해져서 유지보수가 쉽다3. 실제 세계의 개념을 프로그래밍에 반영하기 쉬워서 설계가 더 직관적이다.
    이처럼 자바의 객체지향 프로그래밍은 코드를 작성하지 않고도, 클래스라는 공통적인 틀을 만들고 그 안에 속성과 행동을 정의함으로써 실제 세계의 객체들을 프로그램에서 쉽게 다룰 수 있게 해준다.

OOP의 대표적인 5가지 기능

  1. 클래스와 객체
    클래스 : 다른 사물과 구분되는 속성을 가진 객체를 묶은것, 객체에 틀 제공
    객체 : 속성과 기능을 가짐. (속성 : 각 객체가 가진 고유한 특징, 기능 : 행동패턴)

  2. 상속
    재사용 수단으로 다형성과 밀접한 관계가 있으며, 상속을 통해 상위 클래스의 속성과 기능을 그대로 사용하게 됩니다.

  3. 추상화
    어떤 객체가 상대하는 다른 객체에 대해 꼭 필요한 부분만 드러내고 나머지 세부적인 사항은 감추는 것입니다.
    즉, 추상화는 객체의 복잡한 구조를 단순화하여 필수적인 부분만 보여주는 것을 말합니다.
    이는 데이터 은닉과는 조금 다른 개념이며, 추상화는 단순화된 인터페이스를 제공하는 반면, 데이터 은닉은 객체의 내부 구현을 감추는 것에 초점을 둡니다.

  4. 캡슐화
    객체의 (속성+기능) 을 하나로 묶되, 추상화하여 객체의 세부 내용을 사용자가 보지 못하도록 은폐하는 것입니다.
    즉, 외부에서는 객체의 속성과 메서드에만 접근할 수 있도록 하는 것입니다.
    (데이터 은닉과 유사함)

  5. 다형성
    1 ) 동일한 메서드 호출에 대해 서로 다른 클래스의 객체가 각각 다른 방식으로 동작할 수 있는 능력을 말합니다.
    2 ) 다형성은 하나의 메서드나 인터페이스를 여러 클래스가 각각 구현하는 것을 의미합니다.
    예를 들어, 상속을 이용하여 여러 클래스가 같은 메서드를 상속받고 이를 각자의 방식으로 재정의 할 수 있다면, 이를 다형성 코드라고 합니다.
    3 ) 다형성을 이용하면 코드의 재사용, 유연성 증가
    예, 같은 인터페이스를 구현하는 다양한 클래스를 만들어 각각 다른 동작을 수행하도록 할 수 있습니다. 그리고 이 인터페이스의 메서드를 호출할 때, 어떤클래스의 객체를 사용하냐에 따라 다른 결과를 얻을 수 있습니다.


구조적프로그래밍 방법이 나왔음에도,
객체지향 프로그래밍이 절차지향 프로그래밍 대비 많은 장점을 가지고 있습니다.
따라서, 절차지향 프로그래밍보다, 객체지향 프로그래밍을 쓰며,
궁극적인 이유는 추후에 규모가 커졌을 때, 유지비용이 많이 들기 때문이며,
가장 큰 이유로는 객체지향 프로그래밍의 모듈화와 재사용성입니다.
객체지향 프로그래밍에서는 캡슐화를 통해, 각 객체가 독립적으로 존재하며, 객체 간의 상호작용을 통해 프로그램을 구성합니다.
이렇게 모듈화된 객체들은 재사용이 용이하며, 새로운 기능을 추가하거나 수정할 때도 영향을 최소화할 수 있습니다.

모듈화란 ?

프로그램을 작은 모듈로 분할하는 것을 의미합니다. 모듈이란 독립적으로 실행 가능한, 재사용 가능한 코드의 단위입니다.

모듈화를 통해 큰 프로그램을 작은 단위로 나누어 개발할 수 있습니다.
이렇게 작은 모듈들을 개발하고 나중에 이를 합쳐서 큰 프로그램으로 만드는 것을 의미합니다.
쉽게말해, 작은 밥알들이 모여, 큰 덩어리로 된 초밥의 밥이 된 형태라고 보시면 됩니다.


profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글