Study/Java

[새싹x코딩온] 웹 개발자 부트캠프 과정 20주차 회고 | 객체지향 프로그래밍

다니니니 2024. 9. 28. 17:30
728x90

1. 들어가며

  • 객체지향 프로그래밍에 대해 알아보기

2. 객체지향 프로그래밍

객체지향 프로그래밍과 절차지향 프로그래밍

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

프로그램을 일련의 절차나 함수의 집합으로 보고, 이를 순차적으로 실행하여 문제를 해결하는 방식

프로그램 흐름을 중시하며, 간단한 작업에 적합하다.

대표적인 언어로는 C언어 등이 있다.

장점은 실행 속도가 빠르다는 것이다.

단점은 프로그램이 커지면 유지보수가 어렵고, 순서가 중요하기 때문에 순서가 바뀌면 결과 도출이 어렵다는 것이다. 

이런 점 때문에 대형 프로젝트에는 적합하지 않다. 

 

 

객체지향 프로그래밍(Object-Oriented Programming)

프로그램을 객체들의 집합으로 모델링하여, 객체 간의 상호작용을 통해 로직을 구성하는 프로그래밍 패러다임

객체는 상태(속성)행위(메소드)를 가지며, 이를 통해 데이터 캡슐화, 상속, 다형성 등의 개념을 구현할 수 있다.

이러한 특성들로 코드의 재사용성과 유지보수성을 높이며, 대규모 소프트웨어 개발에 적합하다.

대표적인 언어로는 Java, C++, C#, Python 등이 있다.

장점은 코드의 재사용성이 좋고, 유지보수가 용이하다는 것이다. 그래서 대형 프로젝트에 적합하다.

단점은 처리 속도가 느리고, 설계가 복잡하다. 그래서 많은 시간을 투자해야 한다. 

 

 

커피 주문과 제조를 예로 들자면 각 프로그래밍의 처리방식은 이렇다.

  • 절차지향 프로그래밍에서 커피 주문
    • 고객이 원하는 커피 메뉴를 고른다 →  고른 커피 메뉴를 주문한다 → 바리스타는 주문을 받고 커피를 제조한다.
  • 객체지향 프로그래밍에서 커피 주문
    • 고객 객체, 바리스타 객체, 커피 객체, 메뉴판 객체를 만들고 이 객체들끼리 상호작용을 한다. 

💡 자바스크립트도 객체지향 프로그래밍이다. Java는 클래스 기반 OOP고, 자바스크립트는 함수형을 기반으로 하는 프로토타입 기반 OOP 다. 
ES6 이전에 자바스크립트는 클래스가 없었고, 프로토타입으로 객체를 만들고 이 방식을 통해 객체지향의 문법과 상속, 추상화, 다형성을 해결했다.
ES6 이후에는 자바스크립트에도 클래스가 도입되어 클래스로 객체를 만들 수 있다. 하지만 ES6의 클래스는 프로토타입 방식을 문법적으로 클래스처럼 만들어준 것이다.
( 출처 : https://yozm.wishket.com/magazine/detail/1396/)

 

 

객체(Object)란?

객체란 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것을 말한다.

현실세계에서 객체의 예를 들자면 자동차, 컴퓨터, 사람 등등을 둘 수 있겠다.

 

객체지향의 사실과 오해라는 도서에서 저자는 객체를 이렇게 정의한다.

객체란, 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자(identity), 특징적인 행동(behavior), 변경 가능한 상태(state) 를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.

 

객체는 속성(필드, field) 와 동작(메소드, method)로 구성되어 있다. 

자동차란 객체가 있다고 한다면

자동차의 브랜드, 종류, 이름, 연식 등등 자동차의 상태를 보여주는 것은 속성이다.

자동차가 하는 행동인 전진하기, 후진하기, 멈추기 등등은 동작이다.

 

 

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

객체지향 프로그래밍의 특징으로는 크게 3가지가 있다.

캡슐화, 상속, 다형성

 

1. 캡슐화

객체의 필드와 메소드를 묶고, 내용을 외부에 감추는 것이다.

외부로 노출해야 하는 값과 내부에서만 사용하는 값을 구분하는 기능이다.

이를 데이터를 보호해주는 캡슐과 같은 것으로 보고 내부 데이터에 바로 접근을 하지 못하게 하고 메소드로만 접근을 할 수 있게 한다.

 

2. 상속

부모 객체의 필드/메소드를 자식 객체에게 물려주는 것이다.

프로그래밍을 하다 보면 객체에서 일부는 재사용을 하고 일부는 변형이 필요한 경우가 있다.

이럴 때 부모 객체의 정보들을 자식 객체로 상속을 하면 중복된 코드를 줄이고, 재사용성을 높일 수 있다.

 

 

3. 다형성

사용 방법은 동일하지만, 결과가 다양하게 나오는 것이다.

동물로 예를 들자면 강아지와 고양이 쥐라는 객체가 있다고 가정했을 때, 

그들에게 모두 speak() 라는 메서드 즉 행동을 호출한다.

그럼 강아지는 '멍멍' 고양이는 '야옹' 쥐는 '찍찍'  반응할 것이다.

이렇게 같은 메서드로 다양한 결과를 도출하는 것을 다형성이라고 한다.

 

자바에서는 클래스를 이용해서 이런 특징을 가진 프로그래밍을 할 수 있다. 

 

3. 마치며

웹 개발 공부를 하면서 객체지향 프로그래밍이라는 단어는 많이 들어봤지만 구체적으로 어떤 것인지는 잘 알지는 못했다.

자바의 클래스르 공부하기 전에 객체지향 프로그래밍을 짚고 넘어간 것을 계기로

책을 읽고, 검색을 하면서 공부를 하게 되어 객체지향 프로그래밍에 대해 개념을 잡은 것 같다.

훌륭한 개발자가 되기 위한 요건 중 하나는 설계를 잘하는 것이라고 생각한다.

이런 기본적인 개념을 공부하고, 훌륭한 개발자가 되기 위해 노력해야겠다. 

 

4. Reference

1. 코딩온 강의 교안 및 실습

 

2. https://f-lab.kr/insight/oop-vs-procedural-programming

 

객체 지향 프로그래밍과 절차 지향 프로그래밍의 비교

객체 지향 프로그래밍과 절차 지향 프로그래밍의 기본 개념, 차이점, 장단점 비교 및 적합한 프로그래밍 패러다임 선택 가이드에 대한 설명입니다.

f-lab.kr

3. https://yozm.wishket.com/magazine/detail/1396/

 

자바스크립트에서 객체지향을 하는 게 맞나요? | 요즘IT

이번 글에서는 객체지향 프로그래밍에 대해 이야기를 해보려고 합니다. 그리고 자바스크립트의 객체지향은 일반적인 객체지향 프로그래밍과는 어떻게 다른지 그리고 Javascript에서는 객체지향

yozm.wishket.com

4. https://blackvill.tistory.com/221

 

[CS] 절차 지향 vs 객체 지향

절차 지향(Procedural Programming) 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법 절차 지향(Procedural Programming) 특징

blackvill.tistory.com

5. 도서 : 객체지향의 사실과 오해

https://product.kyobobook.co.kr/detail/S000001628109

 

객체지향의 사실과 오해 | 조영호 - 교보문고

객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝

product.kyobobook.co.kr

 

728x90