본문으로 바로가기

OOP 란?

category Java언어 2018. 8. 16. 11:20

객체지향 OOP (object oriented program)는 실제세계를 모델링하기위해 추상화라는 기법을 사용하는 하나의 프로그래밍 패러다임이다.

여기서 객체란 실제세계를 모델링한 것 말한다. 요약하자면, OOP는 객체를 만들기위해 추상화라는 기법을 사용하는 프로그래밍 패러다임이다.    (실제 세계가 객체로 이루어져 있듯이 프로그램도 객체 단위로 작성하자는 사고)

                                                                                                                      

*패러다임 : 사고의 틀

 

추상화상세한 구현은 생각하지 않고 객체들이 가진 공통부분을 뽑아 설계하는 것이다. OOP에서는 이렇게 추상화된 개념을 인터페이스 또는 추상클래스로 표현한다. 자바의 경우 인터페이스를 interface라는 별도의 타입으로 제공하고 있다. 추상 클래스 타입은 별도로 존재하지 않고 클래스 타입으로 제공된다.

 

객체를 추상화 했으면, 그다음으로 할 작업은 실제 기능을 제공하도록 추상화된 타입을 구현하는 것이다. 자바언어에서는 상속을 통해서 추상화된 타입을 구현할 수 있도록 하고있다. interface를 정의한 경우에는 인터페이스 상속인 implements를 이용해서 추상타입을 구현하게 되고, 추상클래스를 정의한 경우에는 클래스 상속인 extends를 통해서 추상타입을 구현하게 된다.

 

인터페이스 상속이나 추상클래스 상속을 통해서 추상화 타입을 구현한다고 해서 모든게 끝나는 것은 아니다. 이런 추상화가 힘을 발휘할 수 있는건 다형성 때문이다. 다형성 Polymorphism은 이름 그대로 하나의 존재가 여러형태를 갖는다는 의미로 다형성으로 인해 추상화가 빛을 발한다.

(오버로딩 또한 다형성의 특징을 띤다)

 

다형성을 자바언어와 연결해 설명해 보면, 한 클래스의 인스턴스는 그 클래스가 상속받은 모든 상위 타입도 될 수 있다 것이다. 풀어말하면 부모클래스 타입의 참조변수로 객체를 참조할 수 있다는 것이다.

 

C언어와 같은 절차지향방식의 프로그래밍은 데이터를 중심으로 개발되기 때문에 데이터의 변화가 많은 코드의 변화를 유발시킨다. 이 경우 해당 기능을 참조하는 다른 모듈들의 수정이 불가피하다. 이러한 문제점을 OOP에서는 캡슐화를 통해 해결한다. 접근지정자 private를 이용해 자세한 내부구현(특히 데이터)는 은닉하고 외부에는 기능만을 제공하도록 함으로서, 해당 기능을 변경해야할 상황이 발생할 경우 변화가 여러 클래스로 확산되지 않기 때문에 유지 보수에 용이하게 된다.

 

 

 

 

 

'Java언어' 카테고리의 다른 글

Thread 생성방법  (0) 2018.08.16
Thread란?  (1) 2018.08.16
Wrapper클래스 활용  (0) 2018.07.10
class의 구성  (0) 2018.07.10
Java에서 단일 문자열 입력  (0) 2018.07.10