6개월간의 국비 기초 교육 과정을 끝내고 이력서를 준비하며 내게 무엇이 필요한지 느끼게 해준 현재. 기초적인 개념을 차근차근 다시 공부하며 첫 단추는 아주 기본부터 공부하려고 한다.
OOP란?
- Object Oriented Programming 객체 지향 프로그래밍
- C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍 하는 것.
절차 지향과 객체 지향

왼쪽이 절차 지향, 오른쪽이 객체 지향 방식이다.
출처 : https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998992425B3768AA23
즉, 객체 지향은 기능이 아닌 객체가 중심이 되며 '누가 어떤 일을 할 것인가?'가 핵심이 된다.
객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 둔다.
그렇다면 객체란 무엇일까?
객체 Object
- 객체란 말 그대로 대상을 나타내는 단어이다.
- 객체지향이 말하는 객체란 프로그램의 동작 주체가 되는 요소를 말하며, 이 객체는 실체가 있을 수도, 없을 수도 있다.
- 이러한 모든 객체는 상태와 동작이 존재한다.
객체 지향 프로그래밍의 특징
-
추상화(abstraction)
- 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
- 공통적인 특징을 제외하고 필요하지 않은 것은 제거한다.
-
캡슐화(encapsulation)
- 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
- 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
-
상속(inheritance)
- 상위 클래스의 특징(함수, 데이터)을 하위 클래스가 이어 받는다.
- 기존 코드를 재활용해서 사용함으로써 객체 지향 방법의 중요한 기능 중 하나에 속한다.
-
다형성(polymorphism)
- 하나의 객체가 다른 여러 객체로 재구성 된다.
- 다형성에는 오버라이딩(Overriding), 오버로딩(Overloading) 특성이 있다.
- 오버라이딩(Overriding)
: 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것.
: 상속 부여로 인한 완전히 다른 출력이 가능
- 오버로딩(Overloading)
: 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것
: 타입으로 인한 여러가지 출력이 가능
객체 지향 프로그래밍의 장점
-
소프트웨어의 생산성 향상
-
쉬운 모델링
-
보안성 향상
-
유지보수 비용의 감소
객체 지향 프로그래밍의 단점
-
느린 실행 속도
-
높은 난이도
이처럼 현재 프로그래밍에서는 객체 지향 프로그래밍의 개발이 많아졌으며, 그에 따른 수준 높은 지식을 요구한다.
개발 공부를 하면서 이런 개발에 대한 기초 개념이 부족하다고 많이 느꼈는데 다시 한번 정리하면서 공부를 하니 왜 백엔드 개발에 객체 지향을 많이 사용하는지, 어떠한 방식의 개발을 해야하는지 감이 조금은 잡히는 것 같다.
역시 모든 것은 기본적인 개념으로부터 시작하고 개념 공부의 필요성을 느낀다.
이걸로 OOP의 개념에 대해 어느정도 이해가 되는 것 같다.