어제는 배열의 퀴즈 문제풀이를 해주고 따로 수업을 나가지 않아서 글을 작성하지 않았지만 오늘은 책의 수업을 진행해주셔서 글을 남겨보도록 하겠습니다 ~
오늘은 자바의 괴에에에에엥장히 중요한 객체지향을 배우는 날이었는데요 제가 들은 객체지향에 대해서 잠깐 이야기를 드리고 가려고 해요!
객체지향이 생긴 이유는 C언어가 빠른 변화를 쫒아가지 못해서 그것의 해결책으로 객체지향이 생겼다고 해요! 여기서 문득 왜 C언어는 빠른 변화를 쫓아가지 못했는지 궁금하실 수도 있는데 그 이유는 바로 C 언어의 특성인 절차 지향 때문이에요! 절차 지향은 말 그대로 절차적으로 진행이 된다고 생각하시면 될거 같아요! 조금더 보충해 드리면 절차지향은 처음 시작을 기준으로 코드가 순서대로 진행이 되고 순서가 틀리거나 어느 한 부분이라도 오류가 생기게 되면 모두 마비가 돼버려요! 그래서 기존에 만들었던 코드에서 새로운 코드를 넣기가 많이 힘들었나 봐요! 그런 단점을 개선하기 위해 절차 지향을 만들게 되었다고 해요 ~
그렇다면 객체지향이란 무엇일까요? 간단하게 생각해보면 절차 지향과 반대라고 생각하시면 될 거 같아요
객체지향은 순서에 상관없이 독립적으로 사용이 가능한 객체라고 생각하시면 될거 같아요!!
객체지향과 절차 지향이 아직도 헷갈리고 어려우실 수도 있으실까 봐 제가 하나 예시를 한번 들어볼게요!
객체지향은 자동차를 만들 때 본체에 틀을 만들고 그 틀에 바퀴, 손잡이, 거울 등 각각의 객체들을 부착한다고 하면
절차 지향은 자동차를 만들 때 본체에 바퀴를 달고 바퀴를 단, 본체에 손잡이를 부착하고 바퀴와 손잡이를 부착한 본체에 거울을 다는 것처럼 순서가 정해져 있는 거죠 그래서 예를 들어 바퀴가 고장 나면 전부 분해하고 바퀴를 고치고 다시 조립해야 하는 복잡한 구조가 되지만
객체지향은 각 객체들을 상호작용하도록 설계할 수 있기 때문에 하나의 객체에 오류가 발생하더라도 다른 객체에는 영향을 주지 않고 오류가 난 객체 하나만 수정하면 되는 거죠!
객체지향과 절차 지향의 특징과 차이에 대해서는 여기까지만 하고 이제는 오늘 책에서 배운 내용들에 대해서 이야기를 해보도록 할게요!
객체지향 언어는 기존의 프로그래밍 언어에서 몇 가지 규칙을 추가한 언어라고 해요 그리고 특징으로는 코드의 재사용성이 높고(유지보수 용이) 코드의 관리가 용이하며, 코드의 중복 제거가 가능하다는 게 큰 특징이래요 그리고 객체지향 언어가 어렵다면 이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있다고 하니 시도해보면 좋을 거 같아요!
자바에서는 클래스와 객체라는 게 나오는데 여기서 클래스와 객체의 정의에 대해서 조금 짚고 가면 좋을 거 같아요
클래스는 객체의 설계도이며, 객체는 실제로 존재하는 것, 사물 또는 개념이라고 정의되어 있어요!
그래서 객체를 사용하려면 먼저 클래스로부터 객체를 생성하는 과정이 선행되어야 해요
이해를 돕기 위해 자동차를 비유해서 말하자면 자동차를 타고 드라이브를 가려고 하는데 자동차 설계도를 가지고 와서 드라이브를 가라고 하면 말이 안 되죠? 이처럼 드라이브를 가기 위해서는 자동차(객체)가 필요한 것이지 자동차 설계도(클래스)가 필요한 것은 아니지만 자동차(객체)를 만들기 위해서는 꼭 자동차 설계도(클래스가) 필요하답니다! 그래서 객체의 정의를 다시 보면 실제로 존재하는 것이라고 되어있는데 그 이유가 바로 실제로 사용을 하는 것이 자동차(객체)이기 때문에 그렇습니다!
이건 문득 제 생각이지만 자바의 정석 저자인 남궁성 님께서 객체를 정의할 때 실제로 존재하는 것이라고 작성하신 이유가 Heap영역 공간에 할당이 되는 건 객체이지 클래스가 아니기 때문에 작성하신 게 아닐까 싶어요 (제 추측입니다! 그리고 클래스는 Heap영역에 할당되지 않고 Text영역에 할당된다고 해요!)
객체는 속성(멤버 변수)과 기능(메서드)의 두 종류의 구성요소로 이루어져 있어요
속성을 예로 들면 크기, 길이, 높이, 색상, 볼륨, 채널 등이라면 기능은 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 바꾸기 등으로 표현할 수 있어요!
그리고 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 불린다는데 저는 처음 이 이야기를 듣고 객체가 객체가 아니고 클래스로부터 만들어지면 클래스의 인스턴스라고?! 이게 뭔 소리지? 아버지를 아버지라고 부르지 못하는 홍길동의 기분이 이런 느낌이었을까... 후 어렵다 너란 객체..
아무튼! 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있고 인스턴스는 어떤 클래스로부터 만들어진 것인지 보다 강조하는 의미를 갖고 있데요!
그리고 책에 보면 인스턴스와 변수는 결국 같은 의미라고 되어 있는데 제가 생각하기에는 호칭의 미묘한 차이?라고 생각해요 이상한 비유를 조금 하자면 카카오 100% 초콜릿과 카카오 80% 초콜릿은 둘 다 카카오 초콜릿이야라고 할 수 있는데 둘의 차이가 미묘하게 있듯이 객체와 인스턴스도 그런 거 같아요 (100%제 피셜 입니다요!)
오늘은 이렇게 배운 내용을 마무리하도록 하겠습니다 ~ 당분간은 객체지향에 관해서 이야기를 계속 올릴 거 같아요 이 부분이 양도 굉장히 많고 어려운 내용이라 배우는데 오래 걸릴 거 같거든요!
오늘도 긴 글 읽어주셔서 감사합니다 ~
'프로그래밍 > JAVA' 카테고리의 다른 글
[유튜브 : 뉴렉처님 강의] JDBC 1~ 12강 CRUD (0) | 2022.10.19 |
---|---|
자바 객체지향(2) (0) | 2021.12.29 |
자바의정석 Chap 5 배열 두둥! (0) | 2021.12.22 |
자바 조건문과 반복문 (0) | 2021.12.20 |
Java 변수(variable) (0) | 2021.12.17 |