본문 바로가기
필수 개발지식/JS

객체지향 프로그래밍이란? (java기반)

by 코딩하는짱구 2023. 8. 14.
반응형

개발하다보면 끊임없이 나오는 객체지향 프로그래밍이란 정확히 무슨 뜻일까 알아봅시다.

객체 지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

객체지향 프로그래밍

객체지향프로그래밍

1. 객체지향 프로그래밍의 정의

2. 객체지향 프로그래밍의 장점

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

추천글

위의 목차를 클릭하면 해당 글로 자동 이동 합니다.

 

객체지향 프로그래밍의 정의

객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각에서 벗어나 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다.

쉽게 말하면 자동차를 만든다고 했을 때, 수 많은 부품들의 결합과 연결로 하나의 완전한 자동차가 만들어지는 것처럼 어떤 프로그램의 일부분에 해당하는 작은 부품, 즉 우리가 보고 인지하는 실제 세계를 흉내내어 가장 기본적인 단위인 객체를 먼저 만들고 이렇게 만들어진 여러 객체들을 조립해서 하나의 완성된 프로그램을 만드는 프로그래밍 방법론을 뜻한다!

**객체란? 

객체지향 프로그래밍의 가장 기본적인 단위이자 시작점

객체 지향 프로그래밍에선 이와 같은 객체를 추상화 시켜 속성(state)와 기능(behavior)로 분류한 후에 이것을 변수, 함수로 정의한다. ex)속성-company, model, color..등등의 성질/ 기능-시동을 건다, 전진을한다, 후진을 한다 등

 

객체지향 프로그래밍의 장점

1. 유연하고 변경이 용이한 프로그램 설계 가능 

ex) 컴퓨터 부품을 갈아 끼울 때 해당 부품만 교체하는 것 처럼, 객체지향적 원리를 잘 적용해둔 프로그램은 각각의 부품들이 각자의 독립적인 역할을 가지기 때문에 코드의 변경을 최소화하고 유지보수를 하는 데 유리하다

2. 코드의 재사용을 통해 반복적인 코드를 최소화, 간결하게 표현 가능

3. 인간 친화적이고 직관적인 코드를 작성하기에 용이 

 

객체지향 프로그래밍의 4가지 특징

1. 추상화 

객체의 공통적인 속성와 기능을 추출하여 정의하는 것

 

Vehicle 인터페이스

자동차와 오토바이는 모두 이동수단이며 모든 이동수단은 전진과 후진을 할 수 있다는 공통점을 가진다. 즉 Vehicle이라는 인터페이스는 어떤 객체의 역할, 핵심적인 역할만을 규정하고 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체(차, 오토바이) 들에서 하도록 설계하는 것이다.

이것을 역할과 구현의 분리 라고 하며 여기서 '역할'에 해당하는 부분이 인터페이스를 통해 '추상화' 되는 것이다.

2. 상속

기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소.

예를 들어 추상화에선 moveForward라는 개념만 주고 각 객체클래스에서 moveForwar를 정의하는 것이고, 상속은 상위 클래스의 속성과 기능들을 하위 클래스에서 그대로 박아 사용하거나 오버라이딩을 통해 선택적으로 재정의하여 사용할 수 있다. 

 

Vehicle 인터페이스

즉 추상화에선 Car와 MotorBike가 모두 전진과 후진의 '기능'은 가지지만 각자 전/후진의 방식이 다르기에 각 클래스별로 구현이 달라지는 것. 그래서 '역할' 과 '구현'의 분리라고 하는 것이고

만약 Car와 MotorBike의 전/후진의 방식이 같다면 상속에선 클래스의 공통적인 속성과 기능들을 Vehicle 클래스에 정의, 모든 구체적인 내용들을 정의해두고 하위 클래스에서는 그것을 단순히 가져다가 재사용한다.

결론적으로 상속 관계의 경우 인터페이스를 사용하는 구현에 비해 추상화의 정도가 낮다. 

3. 다형성

앞서 추상화에서 본 것 처럼 메서드 오버라이딩을 사용하면 같은 이름의 moveForward()도 각각의 클래스에서 다르게 정의된다, 즉 상황에 따라 다른 역할을 수행하는 것. 예를 들어 '사람이 음식을 먹습니다' 에서 음식은 상황에 따라 피자, 치킨, 짜장면 등 여러가지가 될 수 있다. 마찬가지로 사람 또한 철수가 될 수도 있고 영희가 될 수도 있다. 

즉 Vehicle은 자동차도 될 수 있고 오토바이도 될 수 있다. 

다형성 개념을 활용하여 객체를 생성하는 방법

상위클래스 타입의 참조변수로 하위클래스 객체를 참조하는 것.

 

4. 캡슐화

  • 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
  • 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출

바에는 public, default , protected, private총 4가지 종류의 접근 제어자가 있는데 위 화장실의 예제처럼 오른쪽으로 갈수록 더 좁은 접근 범위를 가진다. 따라서, 어떤 소프트웨어 프로그램을 설계할 때 위의 접근 제어자를 활용하여 어떤 클래스나 그 멤버에 대한 접근범위를 설정하여 데이터를 효과적으로 보호할 수 있다.

자바의 기본 문법에 해당하는 내용이지만, 자바의 접근 제어자의 접근 범위를 표로 나타내면 다음과 같다.

 

 

이처럼 객체지향 프로그래밍을 사용함으로써 모듈화와 재사용성, 유지보수 용이성, 추상화와 현실 모델링이 가능하다.

 

추천글/인용

https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95

 

객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 -

객체 지향 프로그래밍은 객체의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다. 객체 지향 프로그래밍의 기본적인 개념과 그 설계를 바르게 하기 위

www.codestates.com

 

반응형