본문 바로가기

IT/개발상식

객체지향 프로그래밍

OOP - 객체지향 프로그래밍

객체지향 프로그래밍, 함수형 프로그래밍, 절차지향 프로그래밍 등등 참 다양한 프로그래밍 방법론이 있습니다. 그 중에서도 이번에는 객체지향 프로그래밍에 대해 간단하게 다뤄 보도록 하겠습니다.

객체지향 프로그래밍을 쉽게 설명하자면 개발자가 실제의 사물을 추상화하여 추상화한 대상(객체)를 개발 언어로 옮겨 작업하는 것을 의미합니다. 뭔가 설명이 모호할 수도 있겠습니다만 여기서 중요한 것은 추상화라는 것입니다.

보통 개발자에게 추상화라는 것은 만들고자 하는 시스템에서 공통적인 부분들을 추려내고 이러한 것들을 어떻게 설계하면 좋을지 풀어내는 것을 의미합니다. 이렇게 추상화 단계를 거치면 대상이 취하는 동작 또는 대상이 가지고 있는 속성과 같은 것들을 추려 낸답니다. 이렇게 거르고 걸러 추려진 것들을 코드로 옮겨 하나의 시스템을 만드는 것이지요.

추상화 단계를 거치면 하나의 대상이 속성, 동작을 가지고 있을 것입니다. 이러한 것들을 묶어 하나의 객체(Class) 로 나타내기도 하지요. 그리고 여기서 속성은 Class가 가지고 있는 필드 값이 될 것이고, 동작은 메소드가 될 것입니다. 동시에 공통적인 부분들을 하나의 Class로 묶어 관리할 수도 있겠지요. 이 말의 의미는 재사용성이 늘어난다는 것입니다.

시스템에서 공통적인 부분을 추려내면 추려낼 수록 시스템을 설계하고 제작하는 데 있어 매우 유용합니다. 시스템의 한 동작을 만들 때마다 계속해서 그 부분에 대한 코드를 작성하는 것은 개발자도 피곤하고, 시스템도 피곤할 것입니다. 극단적인 예시로 자동차 100개를 만드는데 100개의 Class를 작업한다고 가정한다면 작업하는 당사자도 "어,, 이건 좀 아닌데?.." 싶겠지요. 그래서 보통 공통적인 부분을 잘 간추려 냅니다.

그럼 지금부터 예시 코드를 보며 이해해 보도록 하겠습니다. 아, 참고로 저는 Java보다는 JavaScript가 익숙하기 때문에 JavaScript로 먼저 보여 드리고 이후에 Java로 표현해 보도록 하겠습니다. 사실 JavaScript가 객체지향은 아니라고들 하지만,, 그래도 뭐.. 제가 익숙한 언어로 해야 잘 전달이 되겠지요? 그럼 작성해 보겠습니다.




요구사항

간단한 사람을 설계해 볼 것입니다. 앞서 말씀드린 것처럼 무언가를 만들기 전에 추상화 단계가 필요 하지요. 간단하게 제가 관찰한 사람이 가지고 있는 특징을 분류해 보겠습니다. 그리고 이후에 코드를 통해 표현해 보도록 하겠습니다.

  • 사람은 이름과 나이가 있다.
  • 사람은 잔다.
  • 사람은 먹는다.
  • 사람은 걷는다.

뭐 대충 이정도만 추려보고 작성해 볼게요.




예제코드

class Person {
  constructor(name, age) {
    // 이게 이름, 나이에 대한 속성 부분이 되겠지요?
      this.name = name;
    this.age = age;
  }

  // 잠을 청한다는 동작 정의
  sleep() {
    console.log(`${this.name}이 잠을 청합니다...`);
  }

  // 먹는다는 동작 정의
  eat() {
    console.log(`${this.name}, ${this.age}세, 밥을 먹습니다.`);
  }

  walk() {
      console.log(`${this.name} 지금 걷는중...`);
  }
}

위의 코드를 보면 모든 사람은 잠을 자고 밥을 먹긴 합니다. 그럼 여기서 더 나아가 학생에 대한 Class를 정의한다면 Person 객체를 상속받으면 되겠네요. 여기서 상속이란 말 그대로 Person의 객체에 대한 모든 속성을 그대로 내려 받는다는 의미입니다. 여기서 더 설명하면 꽤 길어지니, 더 자세한 것들은 생략하도록 하겠습니다.




요약

그냥 단순하게 객체지향이 무엇인지에 대해서만 전달하려고 하다보니 많은 내용이 생략된 느낌도 있겠습니다만 아마 객체지향 프로그래밍 이라는 것을 처음 들은 분들은 이게 무슨 말인지 잘 감이 오지 않을 것 같아서 해당 내용에 대해 기록을 하기로 했습니다.

짧게 요약하고 글을 마무리 하겠습니다.

  • 추상화 하여 공통적인 부분 추려냄
  • 객체로 대상의 속성과 동작을 구현

'IT > 개발상식' 카테고리의 다른 글

추상화  (0) 2024.01.10
Clean Code  (0) 2023.12.02
Architecture  (0) 2023.10.25
Interface  (0) 2023.10.08
Container  (0) 2023.09.23