Inor

[JAVA] OOP(Object-Oriented Programing : 객체지향프로그래밍) 본문

Computer Engineering/Java

[JAVA] OOP(Object-Oriented Programing : 객체지향프로그래밍)

Inor 2017. 7. 6. 16:48

객체지향 프로그래밍(OOP)란 기존의 절차지향 언어들의 한계점과 단점을 보완하고자하는 생각에서 출발한 패러다임 입니다.


이 객체지향 프로그래밍에는 추상화, 캡슐화, 다형성, 상속성 이라는 특성을 갖고 있습니다. 각각의 특성들에대해서 살펴 보면서 객체지향 프로그래밍이 어떻게 구성되어야 하는지 확인해보도록 하겠습니다.


1. 추상화


 추상화란 공통된 행위를 갖고 있는 객체들을 대표 할 수 있는 클래스로 선언하는 것 입니다. 객체지향의 관점에서 클래스를 설계하는 것을 추상화하는 것이라고 할 수 있습니다.


 예를 들어서, 아이폰, 갤럭시, 효도폰 이라는 것이 프로그램에서 필요할 때 이것들을 전부다 클래스로 만들어서 사용하는 것은 비효율 적인 방법 입니다. 위의 제시된 것들은 분명 중복되는 기능(전화 걸기, 전화 받기 등)이 존재 할 것 입니다. 이런 경우에 코드의 중복을 발생 시킬 수 있습니다. 그렇기 때문에 코드를 작성하기 전에 중복된 부분들을 묶어줄 수 있는 핸드폰이란 클래스를 정의해서 사용하는 것이 더 효율적인 방법 입니다. 이런 과정을 추상화라고 합니다.


2. 캡슐화


 캡슐화란 클래스를 설계할 때 클래스에 필요한 데이터와 메서드만을 정의하는 것이라고 할 수 있습니다. 수많은 데이터들과 메서드들은 프로그래머가 어떤 영역에 속해야 하는지 결정 할 수 있도록 도와줍니다. 또한 유지보수 측면에서 고객의 요구사항이 있을때 특정 클래스 만을 수정할 수 있도록 변화의 폭을 줄여주기도 합니다. 또한 캡슐화의 중요한 목표 중의 하나는 정보은닉 입니다. 자바에서는 접근 지정자들(private, protected, public)을 제공하여 다른 클래스에대한 접근을 제안 하기도 합니다.


3. 다형성


 다형성이란 하나의 클래스, 메소드가 있을때 이것을 재구성 해서 다양한 방식으로 사용할 수 있도록 하는 것을 의미 합니다. 하나의 메시지를 전달 했을때 수신자가 메시지의 형식에 따라 일을 수행할 메소드를 정하는 방식을 말 합니다. 다형성은 오버로딩과 오버라이딩을 통해서 구현이 가능 합니다. 오버로딩은 함수의 중복을 허용하는 것이고 오버라이딩은 상속 받은 함수를 클래스에 맞게 재정의 하는 것을 의미 합니다. 다형성이라는 주제는 오버로딩과 오버라이딩에서 다음에 더욱 자세히 알아보도록 하겠습니다.


4. 상속성


 상속성은 객체지향의 가장 큰 특징이라고 할 수 있습니다. 자식 클래스가 부모 클래스를 상속 받으면 자식 클래스는 부모 클래스에서 접근 지정자에 의해서 허용된 범위 내에서 메소드나 데이터에 접근이 가능 합니다. 상속을 통해서 자식 클래스는 부모 클래스의 메소드에 접근이 가능하기 때문에 상속은 코드의 재사용에 유용 합니다. 그러나 특정 메소드의 재사용만을 위해서 상속을 받는 행위는 클래스간의 관계를 어지럽게 하기 때문에 지양 해야 합니다.


 자바에서는 다중 상속(자식 클래스가 두개의 부모 클래스를 갖도록 하는 것)을 허용하지 않습니다. 제 짧은 생각으로는 다중 상속에는 Diamond Problem이라는 문제가 갖고 있는 호출의 모호성 때문에 다중 상속을 지원하지 않는 것으로 알고 있습니다. 하지만 interface를 implement 해서 다중상속의 효과를 얻을 수 있습니다.


Comments