관리 메뉴

공부한것들을 정리하는 블로그 입니다.

자바 기본 본문

JAVA/공부

자바 기본

호 두 2017. 7. 7. 08:21
반응형


객체 지향 프로그래밍(Object-Oriented Programming), 줄여서 OOP : 

프로그램을 어떻게 설계해야 하는지에 대한 일종의 개념이자 방법론.


상세 절차

프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.


절차적 프로그래밍과 비교

기존 절차적 프로그래밍에서는 함수를(메소드) 기계, 데이터를 원료로 생각해서 데이터가 함수 사이를 통과하면서 차츰 순서대로 가공돼 나가는 방식으로 이해한다면 객체 지향 프로그래밍에서는 데이터를 중심으로 메서드가 데이터에 접근해서 수정한다는 개념이다. 즉 원료가 움직이냐 기계(함수{메소드})가 움직이냐의 차이.




캡슐화(Encapsulation) : 

캡슐화의 용도는 객체의 속성(필드값,data fields)과 동작(메소드,method)를 하나로 묶어 준다.

그리고 데이터의 일부를 감추어 외부와의 상호작용은 메소드를 통하여 할 수 있게 한다.(정보은닉)

캡슐화는 객체지향프로그램인 자바(JAVA)에서 매우 중요하며, 우리는 자바에서 클래스(class)라 한다.


캡슐화의 목적은 코드를 재수정 없이 재활용 하는 것


클래스 & 인스턴스 : 

객체 지향에서는 이렇게 계층적으로 분류한 기능과 특성의 모음을 클래스(Class)라는 캡슐(capsule)에 분류된 집단 별로 각각 집어 넣는다. 이러한 클래스를 실체화(Instance) 하면 객체(Object)를 만들수 있다.

캡슐화는 '클래스, 타입, 인스턴스, 생성자, 소멸자' 같은 객체 지향 프로그램 방식의 기초를 형성한다. 다음에 설명할 상속성과 다양성은 객체의 메카니즘(작동 원리)이기 때문에 캡슐화를 정확히 표현하지 못하면 상속성과 다형성 또한 표현을 잘못하게 되어 있다.




상속(Inheritance) : 

상속은 기존의 코드를 재활용 하기 위한 기법으로 이미 작성된 클래스(부모 클래스)를 이어 받아서 새로운 클래스(자식 클래스)를 생성하는 기법이다.

자식 클래스는 부모 클래스의 모든 속성과 동작을 물려받는다. 추가로 만약 자식 클래스에만 필요한 기능이 있다면 추가 또는 변경할수있다.

상속은 기존의 코드를 재상용하는 강력한 기법이다.


사실 클래스 이전의 프로그래밍 기법에선 코드 재활용이 불가능하지는 않았다. 예전에도 라이브러리 등을 통해서 남이 짜놓은 코드를 그대로 가져올 수 있었다.


'라이브러리'의 문제점

라이브러리는 코드의 재활용에 지대한 영향을 미쳤지만 치명적인 단점이 있었다. 라이브러리의 기능을 약간 바꾸어야 할 경우 라이브러리의 소스를 변경해야 했고 이 때문에 전혀 다른 라이브러리가 되어 버린다는 것이다. 이것은 라이브러리 버전에 따라 그 라이브러리를 사용하는 프로그램이 동작을 안할수도 있다는 것이고 불필요한 코드의 수정작업을 해야 한다는 것이다.


'상속'의 도입

객체 지향 프로그램에서는 이 문제를 해결하기 위해 "상속"을 도입 했다."포용성"으로 이전의 라이브러리보다 더 논리적이고 체계적으로 기능과 데이터를 계층적으로 분류해서 사용의 편의성을 도모하면서, 상속을 사용해 부모 클래스의 특성과 기능을 그대로 이어받고 기능의 일부분을 변경해야 할 경우 상속 받은 자식 클래스에서 그 기능만을 다시 정의하여 수정하게 하였다. 이러한 작업을 "덮어쓰기(재정의 : Override)"라고 한다. 보안이 시망이다




다형성(Polymorphism) : 

다형성이란 객체가 취하는 동작이 상황에 따라서 달라지는 것을 의미한다. 자바에서는 서로다른 타입에 속하는 객체들이 같은 이름의 멤버함수에 응답하여서 서로 다른 동작을 보여주는 것이 가능하다

프로그래머는 객체의 타입을 미리 알 필요가 없고 객체의 정확한 동작은 실행 시간에야 결정된다.

다형성을 사용하게 되면 실제 동작은 다르더라도 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해진다.

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다. 위에서 설명한 오버라이딩 이외에, 변수에 따라 함수의 기능이 달라지는 오버로딩도 여기에 해당한다.



오버로딩(Overloading) : 

같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 것


오버라이딩(Overriding) : 

상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 것




반응형
Comments