이번 포스팅은 초심을 되찾자는 생각으로 JAVA의 클래스에 대한 이야기를 해볼까 합니다.
클래스는 객체지향의 가장 대표적인 특징으로 자바는 이러한 클래스를 가짐으로서 프로젝트를 여러 요소가 합쳐진 하나의 결합체 됩니다.
그럼 이 클래스가 무엇이길래 프로젝트를 여러개의 요소로 볼 수 있게 만드는지 알아보겠습니다.
클래스란
클래스를 설명하기에 설계도란 말만큼 적합한 용어는 없는것 같습니다.
어떠한 물건을 계획적으로 생산하기 위해선 그 물건의 설계도가 필요합니다.
클래스는 이러한 물건을 만드는 설계도와 같습니다.
예를 들어서 자동차를 만든다고 생각해 보겠습니다.
같은 자동차를 여러대 만들기 위해서는 이 자동차에 대한 설계도가 필요합니다. 그렇다면 자동차를 만들기 위한 설계도에는 어떤 내용이 포함되어야 할까요?
일단 자동차의 부품들을 생각해 보면 몸체, 핸들, 바퀴 의자, 엔진 등등 여러가지 구성 부품들로 이루어져 있습니다.
그다음 자동차가 할수있는 움직임들을 생각해보면 ‘시동켜기’, ‘달린다’, ‘우회전’, ‘좌회전’, ‘정지’ 등이 있습니다.
이러한 요소를 합쳐서 자동차의 설계도를 만들면
자동차 {
부품 : 몸체, 핸들, 바퀴, 의자, 엔진
행동 : ‘시동켜기’, '달린다', '우회전', '좌회전', '정지'
}
대충 이정도로 만들어 질 것입니다.
이제 이 설계도로 똑같은 자동차를 계속해서 생산할 수 있게 됩니다.
즉, 설계도(클래스)로 자동차(객체)를 만들 수 있게된 것입니다.
이처럼 클래스는 객체를 어떠한 요소들로 구성 할지를 설명한 것입니다.
위의 자동차의 구성을 설명할때 부품과 행동으로 구분 지었는데, 클래스도 마찬가지로 저러한 2가지 요소로 구성되어 있습니다.
설계도의 부품을 클래스에서는 변수 혹은 프로퍼티라고 말하고 행동을 함수 혹은 메소드라고 말합니다.
이처럼 클래스를 구성하는 요소는 ‘프로퍼티'와 ‘메소드' 입니다.
그럼 이제 왜 클래스로 이루어진 자바를 객체지향 언어라고 하는지 알아 보겠습니다.
객체지향이란
객체지향을 설명하기 앞서 객체에 대해서 얘기를 해보면 앞서 클래스로 만들어진 물체를 객체라고 한다고 위에서 설명한 바가 있습니다.
객체는 이처럼 실질적으로 만들어진 물체를 말하는 것입니다.
그렇다면 왜 자바는 객체지향이라고 말하는 것일까요?
그 이유는 자바의 모든 요소 하나하나를 객체로 보려고 하기 때문입니다.
위에서 클래스를 설명할때 클래스는 프로퍼티와 메소드로 이루어진다고 말한바 있습니다.
그렇다면 이 프로퍼티와 메소드는 무엇 일까요?
네 이 또한 객체들 이라고 볼 수 있습니다.
프로퍼티의 몸체, 핸들, 바퀴, 의자, 엔진들 또한 자동차와 마찬가지로 설계도를 가진 물체 즉 클래스들을 가지고 있는 객체들인 것입니다.
즉, 몸체를 구성하기위한 설명이 필요로 하는 설계도(클래스)가 따로 존재한다는 말이죠.
마찬가지로 메소드들 또한 핸들의 특성인 좌회전 우회전 혹은 다른 여러 프로퍼티가 있어서 생길 수 있는 행동 들인것입니다.
즉 객체지향이란 어떤한 물체가 이루는 모든 것들을 하나의 객체들로 바라보기 위해 노력하는 것입니다.
그렇다면 왜 객체를 지향하는가
객체지향으로 생길 수 있는 장점은 무엇이 있기 때문에 객체 지향이라는 개념이 생긴 것 일까요?
객체지향이 있기전 기존에는 절차지향 언어가 있었습니다.
절차지향 언어들은 프로그램의 규모가 지금처럼 크지 않을때는 혼자 개발하기에 용이하고 하나의 몸체에 그 프로그램의 행동들을 죽 나열해 나가면 되었기 때문에 개발이 쉬워진다는 장점이 있었습니다.
하지만 시간이 지나면서 하드웨어가 발전하고 컴퓨터가 할수있는일이 많아질수록 프로그램또한 그 덩치가 커져나가기 시작했습니다.
덩치가 커져가면서 혼자서 하나의 프로그램을 개발하기가 힘들어 지기 시작했고, 하나의 몸체에 모든 기능을 나열하기 불가능해지기 시작했습니다.
그리고 이미 만들어진 소스의 버그를 잡는다거나 기능을 개선하기 위해 소모되는 비용이 엄청나게 늘어나기 시작했습니다.
그 상황에서 객체지향언어가 생김으로서 프로그램을 여러 요소들의 결합으로 바라볼 수 있게 됐고, 이 요소를 여러명이 나누어서 담당 하게 되면서, 협업에 유리하게 되었습니다.
또한 이 처럼 각각의 영역이 명확하게 구분되면서 개선에 대한 비용을 줄일 수 있게되며, 큰프로젝트에는 객체지향이 용이하다는게 명확해 졌고, 대세는 객체지향으로 기울게 되었던 것입니다.
클래스는 객체지향을 설명할 때 가장 대표적으로 말할 수 있는 개념이며, 여기서 좀 더 나아가 상속, 인터페이스등 여러가지 특징이 결합된 언어를 객체지향 언어라고 부를 수 있습니다.
'개발언어 > Java' 카테고리의 다른 글
[JAVA] JAVA 지역 변수의 범위 (0) | 2019.11.21 |
---|---|
[Java] Java문법 for, for-each (0) | 2019.11.21 |
JUnit 초기화 @Before 와 @BeforeClass 차이 (0) | 2019.08.02 |
Java VM Arguments 설정 (0) | 2019.05.16 |
정적 팩토리 메소드(Static Factory Method) 장단점 (0) | 2019.05.11 |