도대체 객체지향프로그래밍이란 뭘까? 1부

Jiho Yoo·2021년 11월 2일
1

JAVA

목록 보기
1/2

우선
출처: https://gracefulprograming.tistory.com/130 [Peter의 우아한 프로그래밍]
여기 글을 한번 봐도 좋을거 같습니다.
(나보다 설명이 잘 되어 있기에 한번쯤 보면 좋을 수 있습니다.)

프로그래밍중 굉장히 중요한 개념중 하나가 바로 객체 지향 프로그램(OOP)이다.

아마 컴공이든 비전공자이든 개발에 대해 입문을 하게 되면 한번 쯤은 들어 봤을 것입니다.

  • 절차지향 프로그래밍(Procedural Programming)

물이 위에서 아래로 흐르듯 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 하는 프로그래밍 기법입니다.(Top Down 방식)

절차지향 프로그래밍에서 사용하고 있는 언어로 대표적인 언어의 예로 C언어가 있습니다.

장점

  • 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체 지향에 비해 처리 속도가 빠릅니다.

단점

  • 유지보수가 어려움.
  • 실행 순서가 정해져 있어서 순서가 바뀌면 동일한 결과를 보장하기 어려움
  • 프로그램 분석과 디버깅이 어려움
  • 객체지향 프로그래밍(Object-Oriented Programming)

큰 문제를 작게 쪼개는 방식이 아니라 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 프로그래밍 기법입니다.(Bottom UP 방식)

절차지향과는 다르게 데이터와 순차를 하나로 묶어서 생각하게 되는데,
이는 컴퓨터의 부품들을 하나씩 사서 컴퓨터를 조립하는 과정과 비슷하다 볼수 있습니다(모델링).

장점

  • 코드를 재사용 할 수 있어 편리함.
  • 독립된 객체를 사용하여 문제가 되는 기능만 수정해서 사용하면 되기에
    유지 및 보수가 용이.
  • 프로그램의 분석과 디버깅이 절차지향에 비해 쉬움

단점

  • 절차지향에 비해 처리되는 속도가 느림
  • 모든 객체의 기능에 대한 이해를 해야하기에 설계하는데 시간이 오래걸림

특징

  • 강한 응집력
    👉 프로그램의 한 요소가 특정 목적을 위해 밀접한 기능들이 모여 구현되어 있고 지나치게 많은 일을 하지 않으면 응집력이 높아짐
    (응집력이 낮아지면 여러가지 이유로 변경되는 코드가 많아 질 수 있음)
  • 약한 결합력
    👉 코드간의 의존성이 낮아 코드에 자율성(독립적임)이 있음
    (결합도가 높아지면 유지 및 보수가 힘들어짐)

그런데 여기서 궁금한게 생기지 않는가? 객체가 뭐지?

객체의 사전적 의미 또는 구글링으로 찾다보면 이렇게 나온다.

객체란 물리적인 존재,추상적인 존재중 자신의 속성과 동작을 가지고 있는 것.

여기에 필자가 좀 더 추가를 하자면 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성과 기능을 가지고 있고 다른것과 식별 가능한 것.

그런데 개념에 대해 이해가 가시는지?

저런 글을 보고 이해가 간다면 필자 생각에는 개발자를 하심이 맞다 생각이 듭니다.

필자는 솔직히 저렇게 글을 보고 생각해도 객체에 대한 개념이 잘 잡히지 않았다.

그래서 개발자 친구 찬스!

위에 보이는 건 그렇다! 붕어빵이다.
지금 같은 계절과 날씨엔 붕어빵이 최고지...(배고파진다)!! 아니 아니

필자가 들으면서 그래도 이해가 쉬웠던 예시이다.

붕어빵을 만드는 틀에 밀가루로 만든 반죽과 그안에 여러가지 속을 넣을 수 있지요?

슈크림, 팥, 초콜릿, 치즈 등등... 여러가지 재료들을!

그리고 나서 굽게 되면 틀에 맞는 모양의 붕어빵들이 구워져서 나오고

속 재료를 무엇을 넣느냐에 붕어빵의 종류가 달라진다.

객체라는 개념도 이렇다.

틀에서 나온 붕어빵을 우린 다 붕어빵이라고 알고 있지만 그 안에
들어간 속재료에 따라 붕어빵을 다른 붕어빵으로 구분이 가능하다.

즉, 같은 붕어빵의 종류지만 개별로는 다른 붕어빵이라는 것이다.

이처럼 속성(같은 틀로 만들어져 붕어빵 모양을 가짐)을 가지고 다른 것과

식별이 가능한 것(안의 속이 다르고 하나하나 개별 붕어빵으로 존재)이 객체라고 보면 된다.

글이 너무 길어짐에 따라 2부로 나눠서 진행하겠습니다. 일단 1부는 여기까지...

profile
긍정적으로 세상을 바라보는 초보개발자

0개의 댓글