Java (자바)

[Java] 클래스 - (1) 객체 지향적 프로그래밍

Oscar:) 2022. 7. 6. 17:10

 

우리가 자바라는 언어를 사용함에 있어서, '클래스' 라는 개념은 필수불가결하다.

자바는 객체 지향적 언어이기 때문이다.

 

그렇기에 이번 포스팅에서는 클래스에 대해 공부하기 전에,
객체 지향에 대해 짚고 넘어가볼까 한다.

 

 

 

● 목 차

 

· 객체 지향적 프로그래밍의 유래

· 객체 지향적 방식이란 ?

· 객체 지향적 방식의 장점

· 객체 지향적 방식의 단점

 

 


 

객체 지향적 프로그래밍의 유래

 

프로그래밍 언어의 종류는 매우 다양한데,

절차 지향적 언어와 객체 지향적 언어로 분류할 수 있다.

 

하지만, 초기 프로그래밍 방식은 절차 지향적 프로그래밍 뿐이었다.

모든 코드를 명시된 순서대로만 처리하였고, 결과를 내주었다.

 

이러한 방식은 코드가 복잡해지고 양이 방대해질수록,

여러 가지 관점에서 마주하는 불편함을 피할 수 없었다.

 

 

▼ 절차 지향적 방식의 대표적인 단점은 다음과 같다 ▼

 

· 다른 사람이 보고 이해하는 것이 어렵다.
· 작성한 본인조차도 유지·보수가 어렵다.
· 특정 코드의 위치나 흐름을 파악하기가 어렵다.

 

이를 해결하기 위해 구조적 프로그래밍 방식이 출시되었고,

훗날 객체 지향적 프로그래밍으로 발전하였다.

 

 

객체 지향적 방식이란?

 

사진 출처 : 생물정보 전문위키 인코덤

 

위 그림 中, 객체지향 분석에 간단히 추가 설명을 붙이자면,

고객, 자판기 / 돈, 제품 /  ~한다  등 모든 요소를 '객체' 라고 생각하면 된다.

 

객체는 사전적으로도 '실존하는 모든것' 이라고 정의되어 있다.

객체 지향적 방식에서는 모든 요소를 '객체'로 취급한다.

 

이러한 객체의 상태와 행동을 구체화하는 모든 형태를 객체 지향 프로그래밍이라고 한다.

 

 

+ 모든 요소가 '객체화' 되었다는 것은, '모듈화' 되었다고 생각하면 이해하기 쉽다.

*모듈 : 프로그램을 기능별로 분할한 논리적인 일부분

 

 

객체 지향적 방식의 장점

 

위에서 설명했듯이, 객체 지향적 방식은 절차 지향적 방식을 보완하기 위해 탄생하였다.

그렇기에 절차 지향적 방식 대부분의 단점을 보완해주었다.

 

 

 

· 코드의 가독성이 좋아진다.

 

필자의 개인적인 생각은 다음과 같다.
'코드를 이해한다' == '코드의 내용을 읽는다' + '코드의 흐름을 읽는다'

그 중에서도 '코드의 흐름을 읽는 것' 이 제일 중요하다고 생각한다.

코드의 흐름을 읽는다는 것을 쉽게 이야기하자면,

'어떤 기능은 어디서부터 어디까지 적용이 되는건지'
'어떤 부분이 어떤 부분과 연결되어 있는지'
'어떤 클래스가 어떤 클래스의 상속을 받고 있는지' 등 이다.

 

객체 지향적 프로그래밍을 하다 보면, 모든 요소들을 '객체화' 하게 된다.

객체화를 하면 자연스레 코드가 세분화되는 것이다.

 

코드를 세분화하면 할 수록,

해당 코드가 어떤 역할을 수행하는지 보다 명확히 해줄 수 있게 된다.

 

그렇기에, 코드의 흐름을 읽는 것에 큰 도움을 준다.

 

 


 

+ 한 클래스 기준으로 전체적인 코드의 길이가 감소한다.

 

코드의 길이가 짧아짐에 따라서, 코드의 가독성이 좋아진다는 점은 같은 맥락이다.

여기서는 한 가지 예를 들어보겠다.

 

약 10,000 줄의 코드를 하나의 클래스에 작성했다고 가정해보자.

그 중에서 일부 기능을 담당하는 코드를 찾으려고 한다면,
해당 코드를 어디에 적었는지 찾는 것부터가 일이다.

아무리 본인이 작성한 코드라도, 양이 방대해지면 모두 기억해내기는 어려울 수밖에 없다.

우리는 객체 지향적 방식을 사용함으로써,
각각의 기능과 역할에 따라서 20개의 클래스로 분류하여
각 클래스마다 500줄의 분량으로 나눠줄 수 있게 되었다.
(클래스의 개수나 코드의 줄 수는 예시일 뿐이다.)

분류가 잘 되어있을수록,
어떤 기능을 찾기 위해 스크롤 해대는 시간을 단축할 수 있을 것이다.

 

 


 

 

· 추후, 유지&보수가 편리하다.

 

- 유지

 

생산성이 향상된다.

(코드의 재사용성과 관련이 있다고 이해하면 쉽다.)

 

이미 만들어진 클래스를 상속하여 사용한다거나,

이미 생성된 객체를 초기화하여 재사용 하는 등

 

코드를 재사용함에 있어서 얻을 수 있는 이점은 다양하다.

 

 

- 보수

 

기능의 종류를 기준으로 클래스를 분류했다고 가정해보자.

 

추후에 A기능을 수정해야 한다고 하면,

우리는 A기능을 담당하는 클래스로 찾아가서 수정을 해주면 되기에 매우 간편하다.

 

 


객체 지향적 방식의 단점

 

물론 장점이 있다면, 단점 또한 존재할 것이다.

 

객체 지향적 방식의 특징은

'모든 것을 객체로 취급한다' 는 점이다.

 

위와 같은 특징은 장점이 될 수도, 단점이 될 수도 있다.

 


 

· 절차 지향적 언어에 비해 속도가 비교적 느리다.

 

모든 요소가 객체가 된다는 것은 캡슐화가 되어 있다는 것이다.

캡슐화된 코드를 컴파일하는 과정은, 그렇지 않은 과정보다 오래 걸릴 수밖에 없다.

 

 

 

· 비교적 메모리를 많이 잡아먹는다.

 

실질적인 데이터의 크기보다 약간의 메모리를 더 사용한다.

 

모든 요소를 객체로 취급함으로써,

기본적으로 추가적인 메모리를 확보하게끔 설계되었기 때문이다.

 


 

 

이번 포스팅에서는 클래스에 대해 공부하기 전,

객체 지향적 프로그래밍에 대해서 알아보았다.

 

다음 게시글에서는 클래스에 대해 공부해보자...!