객체 지향은 개발자를 좌절시키기 위해 C++에 도입한 개념이 아니다.
개발자에 대한 깊은 애정과 봉사의 정신으로 더 쉬운 프로그래밍을 위해 제안한 프로그래밍 방법론인 것이다.
기계어에서 객체 지향 프로그래밍 언어로
1. C 언어 - 강력한 이식성 / One Source Multi Object Use Anywhere
어셈블리어는 프로그램의 소스 파일을 기계의 종류만큼 만들어야 했다. 하지만 C언어의 등장으로 이제는 소스 파일을 단 하나만 만들면 된다.
하나의 소스 파일을 각 기계에 맞는 컴파일러로 컴파일만 하면 각 기계에 맞는 기계어 목적 파일이 만들어지는 것이다.
하나의 소스 파일이라고 해서 모든 컴퓨터에서 실행이 가능할까?
운영체제는 각각의 특성이 있기에 기종에 맞게 소스를 변경하는 작업을 거쳐야 가능하다.
결국 One Source Multi Object Use Anywhere는 이상향이었고 One Source 뒤에 Fix Source, 즉 운영체제별 소스 수정 과정이 필요했던 것이다.
2. C++언어 - 정말 인간적인 프로그래밍 방법론, 객체 지향
C와 C++의 가장 큰 차이점은 객체 지향 개념의 도입이다.
3. 자바 - 진정한 객체 지향 언어
C++은 순수 객체 지향 개념에 가장 충실한 언어이긴 하지만 객체 없는 프로그래밍도 가능하다.
객체 지향 언어의 중심에는 클래스(class) 혹은 객체(Object)가 있다.
자바에서는 클래스를 떠나 존재할 수 있는 것은 아무것도 없으며 main() 메서드마저도 클래스 내부에 존재해야 한다.
하지만 C++의 main() 함수는 클래스와 별개로 존재할 수 있으며, printf() 함수는 클래스나 객체와 관계 없이 호출이 가능하다.
자바는 Write Once Use Anywhere다.
자바로 구현한 소스는 다른 기종의 컴퓨터에서 실행하기 위해 오브젝트 파일만 가져가면 된다.
물론 다른 기종의 컴퓨터에 해당 기종용 JRE가 설치되어 있어야 한다.
짧은 글, 긴 생각
UML을 대하는 자세
UML은 의사소통의 도구이며, 표기 방법론일 뿐이다. UML 표기법 하나 하나에 목숨 걸지 말자.
당신은 CBD, SOA가 어려운가?
CBD는 Component Based Development의 약자로, 번역하면 컴포넌트 기반 개발이 된다.
애플리케이션을 의미 있는 단위로 구분하고 그 단위를 하나씩 부품으로 개발하고 부품을 결합해 소프트웨어 제품을 완성하자는 방법론이자 기법이다. 제품이 아니다.
SOA는 Service Oriented Architecture의 약자로, 번역하면 서비스 중심 구조가 된다.
개발자 입장에서의 개발이 아니라 실제 현실의 업무를 기준으로 개발하자는 사상이다. 제품이 아니다.
객체 지향의 4대 특성을 누군가에게 설명할 수 있는가?
우리가 자바라고 하는 제품을 온전히 쓰려면 다른 것은 제쳐놓고서라도 우리가 사용하는 제품 속에 녹아 있는 객체 지향 4대 특성은 제대로 이해해야 한다.
그래야 올바른 객체 지향 사상을 담아낸 객체 지향 프로그램을 만들어 낼 수 있기 때문이다.
스프링 프레임워크는 사상이면서 또 단일 제품이다.
객체 지향을 모르고 스프링을 안다는 것은 어불성설이다.
스프링은 객체 지향의 기반 위에 굳건히 서 있기 때문이다.
내 생각
프로그래밍은 공부할 게 정말 방대하다. OOP, SOLID 원칙, 클린 코드 등 ...
객체 지향은 아무리 공부를 해도 정말 뜬구름 잡는 소리처럼 들린다.
그렇다보니 외울 수는 있어도 내가 정말 그렇게 생각하거나 이해하고 타인에게 설명을 해줄만큼 알고 있지는 않다.
그래도 다행인 건 이 책에서도 객체지향은 이해하기까지 누구는 5년, 누구는 10년이 걸리지만 이 책을 읽음으로써 훨씬 빠르게 제대로 이해하도록 도와주겠다고 하는 것이다.
이 말이 과연 맞을 지는 모르겠지만 객체지향의 절반이라도 이해했으면 하는 마음이다.
'Reading > 스프링 입문을 위한 자바 객체지향의 원리와 이해' 카테고리의 다른 글
7. 스프링 삼각형과 설정 정보_IoC/DI (0) | 2023.04.01 |
---|---|
5. 객체 지향 설계 5원칙 - SOLID (0) | 2023.03.29 |
4. 자바가 확장한 객체 지향 (0) | 2023.03.23 |
3. 자바와 객체 지향 (0) | 2023.03.23 |
2. 자바와 절차적/구조적 프로그래밍 (0) | 2023.03.21 |