2022. 10. 1. 22:25ㆍTIL💡/Design Pattern
객체란?
객체지향. 말그대로 객체를 지향하는 언어이다.
그러면 객체가 무엇인지를 알아야 한다.
객체란 프로그램 동작의 주체이다.
이 객체는 유/무형을 가리지 않는다. 객체는 실체가 명확하지 않은 무형의 개념일 수도 있다.
모든 객체는 상태
와 동작
을 가진다.
JAVA는 이러한 개념을 아래와 같이 접근한다.
객체지향 | JAVA |
객체 | 클래스 |
상태 | 멤버 변수 |
동작 | 메소드(함수) |
JAVA에서 이러한 객체를 사용하려면 메모리에 할당해야 하고, 이렇게 할당한 객체는 인스턴스(instance)
이다.
Car 클래스를 메모리에 할당하여 새로운 인스턴스를 만드는 것은 현실에서 자동차 하나를 뽑는 것과 동일한 개념이다.
객체지향
모든 객체는 각 객체의 특성에 부합하는 상태와 동작을 가지며, 이를 통해 객체 간의 상호작용을 코드로 나타낼 수 있다.
일례로 JAVA는 String, HashMap 등 모든 요소를 객체(Object)로 다룬다.
우리는 JAVA로 필요한 객체를 메모리 할당하고, 객체가 가진 변수나 메소드를 사용하여 코딩한다.
그래서 이걸 왜 쓰는데? 🌟
객체지향을 차용한 언어는 매우 많다. 대표적인 JAVA 이외에도 C++, C#, Visual Basic, Swift, Python 등이 있다.
이러한 언어들은 우리에게 매우 익숙한 이름일 뿐만 아니라, 프로그래밍 언어에서 다들 한 자리씩 하는 매우 비중있는 언어들이다.
그렇다면 객체지향 언어가 개발자들에게 널리 쓰이며, 사랑받을 수 있었던 이유는 무엇일까?
객체지향은 절차지향의 후발주자이다.
보통 이러한 경우의 후발주자는 선발의 단점을 개선하고, 니즈를 반영하여 출시하므로 기능과 편의점이 증진된다.
객체지향은 특히 생산성
과 유지보수
용이성을 높이는 데 포커스를 두었으며, 덕분에 객체지향 언어를 구사하는 개발자는 개발을 비교적 쉽고 빠르게 수행할 수 있다.
장점
🌱 코드 재사용성
모듈화된 객체를 기반으로 코드가 작성되기 때문에, 해당 객체의 특징을 비슷한 다른 로직에도 적용해서 사용하거나, 다른 개발자가 구현한 객체를 가져와 쓰기에도 용이하다.
🌱 간편한 유지 보수
객체를 수정할 경우, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용되니, 중복 코드에 대한 관리가 간단해진다. 혹은 객체나 동작이 변경될 경우, 해당 객체나 동작과 관련된 객체만을 찾아 수정하면 된다.
🌱 큰 규모의 프로그래밍에 유리
객체, 모듈 단위로 구분되는 특징으로 인해 업무 분장이 쉽고, 각 모듈의 연관성을 도식하기 용이하다.
단점
🚨 비교적 느린 속도
절차지향과 달리 객체지향은 각 객체의 의존 관계로 인해 대체적으로 속도가 느리다.
🚨 높은 설계역량 요구
모듈 단위의 상호작용으로 이루어진 방식은, 모듈의 정확한 명세와 상호 간의 연관성이 얼마나 짜임새있게 설계되었는지 중요하다.
잘못 설계된 객체나 연관성은 라자냐 코드(스파게티 코드와 약간 다르다.)로 변하기 쉽다.
라자냐 코드
란?
레이어가 지나치게 복잡하고 뒤엉켜있어서 한 레이어에서 변경을 할 경우 다른 모든 레이어에서 변경이 필요한 코드를 말한다.
정리
기존의 C언어 기반인 절차지향도 나름의 장점이 있었다. 컴퓨터의 처리 흐름과 코드 흐름이 매우 유사하기 때문에 전처리가 적어 실행 속도가 비교적 빨랐다.
또한 코드의 흐름이 일정했으므로, 이를 분석하기도 수월했을 것이다.
하지만 시대가 지남에 따라 기술이 발전할 뿐만 아니라 개발자의 평균 역량 또한 높아졌다. 컴퓨터의 처리 속도는 언급할 필요조차 없고, 이러한 환경의 발전으로 인해 절차지향의 장점이 주는 메리트가 적어지면서, 반대로 단점이 주는 디메리트가 더더욱 크게 다가왔을 것이다.
객체지향은 유지보수의 용이성과 개발 편의성을 중요시 여기는 개발 방법론이다. 객체지향이 가지는 장점 덕분에 개발자 간의 코드 공유가 쉬워졌으며, 서비스의 규모는 더욱 증가하고, 견고한 프로그램을 만들기 쉬워졌다.
절차지향이 컴퓨터에게 친화적이라면, 객체지향은 개발자에게 친화적이라 할 수 있겠다. 컴퓨터의 성능이 미친듯이 높아짐에 따라, 프로그램의 성능은 자연스레 개발자의 역량에 의해 갈리게 되었다. 이러한 흐름으로 인해 객체지향은 많은 언어와 개발자에게 사랑받을 수 있었을 것이다.
https://blog.itcode.dev/posts/2021/08/07/what-is-oop
'TIL💡 > Design Pattern' 카테고리의 다른 글
[OOP] 객체지향의 특징 - 상속(Inheritance) (0) | 2022.10.02 |
---|---|
[OOP] 객체지향의 특징 - 캡슐화(Encapsulation)와 정보 은닉 (0) | 2022.10.02 |
[컴퓨터구조] RISC, CISC 차이 (0) | 2022.09.30 |
[클린코드] 동시성 (0) | 2022.05.02 |
[객체지향] 객체지향의 사실과 오해(토끼책) Ch4 ~ 7 정리 (0) | 2022.02.06 |