객체지향이란?


자바는 객체지향 (Object Oriented) 프로그래밍 언어이다


기존 프로그래밍 방법 중 절차지향은 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 언어로는 C언어가 있는데 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것보다 더 빨리 처리되어 시간적으로 유리한 편이었다. 하지만 기술이 발전하고 소프트웨어와 하드웨어가 발전함에 따라 객체지향 언어를 사용해 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리량을 획기적으로 줄여주었다.


객체지향이라는 것 자체에 대한 개념이 명확하게 정의를 내릴 수는 없지만 실제 세계를 모델링하여 소프트웨어를 개발하는 방법이라고 봐도 된다. 객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어서 생각할 수 있다.


객체지향의 대표적인 세 가지 특성이다.

  • 상속
  • 다형성
  • 추상화


하나하나 뜯어서 봐 보자...



캡슐화 Encapsulation


관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리된 것. 개발자가 만들며, 관련된 코드와 데이터가 묶여있고 오류가 없이 사용리 편리하다. 데이터를 감추고 외부와 상호작용은 메소드를 통해 한다. > 보안성 유지 가능



상속 Inheritance


말 그대로 자식이 부모로부터 무언가를 물려받는 것이다. 작성된 클래스(부모 클래스)를 이어 받아서 새로운 클래스를 생성하는 기법으로 기존 코드를 재활용할 수 있다. 객체지향의 큰 장점 중 하나이다.



다형성 Polymorphism


하나의 객체가 여러 개의 자료형 타입을 가질 수 있는 것을 뜻한다. 인터페이스를 알고 있다면 쉽게 이해할 수 있다. 인터페이스를 implements 한 뒤 동일한 메소드명을 사용하면 코드가 더 간단해진다.




그래서 장점이 뭔데요?

  • 생산성 향상
궁극적인 목표인 생산성 향상이다. 객체지향 언어로 프로그래밍하면 객체는 독립적으로 볼 수 있기 때문에 이를 재사용함으로서 생산성이 증가한다.

  • 자연적인 모델링
객체, 클래스, 속성, 상속 및 다형성은 보통 사람들이 대하고 생각하는 방식을 그대로 프로그램 언어로 표현할 수 있게 해 준다.

  • 재사용성
코드의 재사용을 극대화시킬 수 있다. 한 프로그램 내에서 자식 클래스들이 부모 클래스의 속성을 상속받아서 사용이 가능하기 때문.

  • 유지보수의 용이성
기존의 기능을 수정하고나 추가하기가 용이하다. 함수를 새롭게 바꾸더라도 캡슐화와 그 함수의 세부정보가 은닉되어 있기 때문에 주변에 미치는 영향을 최소화 시키기 때문이다. 새로운 객체의 종류를 추가할 때에는 상속을 톨해서 기존의 기능을 활용하고, 존재하지 않는 새로운 속성만 추가하면 되므로 경제적이다. 이외에도 점진적 프로그램 개발의 용이성, 요구사항 변화에 따라 유지보수를 안정적이고 용이하게 할 수 있다.



이론적으로만 보면 절차지향 언어에 비해 장점이 많지만 객체지향 언어만 사용해서 프로그래밍을 하는 경우만 있는 건 아니다. 객체지향 언어는 어떤 모듈에 있는 하나의 기능만 필요하더라도 모듈 전체를 가져와야 하기 때문에 절차지향 프로그래밍보다 프로그램 사이즈가 커질 수도 있다. 또 데이터에 대한 접근도 상대적으로 절차지향식보다 느려질 가능성도 많다. 메소드를 통해서만 접근이 가능하기 때문이다. 
(근데 나는 아직 어마한 양의 데이터를 핸들링해 본 경험이 없어서 속도 차이는 모르겠다... 취업 후 일하게 되면 물론 달라지겠지)

중요한 건 객체지향에서 "데이터"를 처리할 때 사용되는 건 클래스에서 만들어진 객체(Object) 이다. 클래스 자체를 사용하는 것이 아니다.
과자틀로 여러 개의 과자를 찍어냈다고 했을 때 과자틀이 Class고, 수많은 과자들이 Object라고 생각하면 쉽다. 

자바는 객체를 위해서 우선 클래스를 작성하고(과자틀을 준비하고), 그 클래스에서 객체를 생성한 후 생성된 객체들 (찍혀져 나온 과자들) 사이의 관계를 정의해서 만들어진다.

사실 객체지향언어(java)를 사용해 보지 않았다면 글로만 보면 이해가 안 될 수 있다. 사실 나도 그랬다... 프로젝트를 진행해 보기 전에 글로만 보면 그래 그게 그래서 어쩐다는 소리인가 싶었는데 역시 해 봐야지 이해도 하기 쉽다. 




참조: 점프 투 자바 (https://wikidocs.net/218)

       위시켓 블로그 (http://blog.wishket.com)

       공부해서 남 주자(http://private.tistory.com/9)

'IT > JAVA' 카테고리의 다른 글

java 회문 판별 코드  (0) 2019.01.09
JAVA 설치하기 (1.8, 환경변수 설정)  (0) 2019.01.09

+ Recent posts