1. 절차적 프로그래밍과 비교


기존 절차적 프로그래밍에서는 데이터가 함수 사이를 통과하면서 차츰 순서대로 가공돼 나가는 방식으로 이해한다면 객체 지향 프로그래밍에서는 데이터를 중심으로 메서드가 데이터에 접근해서 수정한다는 개념이다.


2. 객체지향개발(OOP)의 특성
 1)캡슐화

  - 캡슐화의 목적은 코드를 재활용 하는 것에 있기 때문에 기능(함수)과 특성(변수)을 한곳으로 모으는 것을 말한다.

  - 객체가 맡은 역할을 수행하기 위해 한데 묶는 것이며, 데이터를 외부에서 직접 접근하는 것이 아니라 메소드를 통하여 접근할 수 있도록 해야하는데 이것을 정보의 은닉화 또는 캡슐화라고 한다. 


 2)상속

  - 상위의 기능(함수)과 특성(변수)을 그대로 이어받아 사용하는 것을 말하며, 상속받은 자식 클래스에서 그 기능만을 다시 정의하여 사용하는 것을 "덮어쓰기(재정의:Override)"라고 한다


 3)다형성

  - A a = new B(); 처럼 다른 데이터 타입으로 받는 것을 말하며, 부모 클래스에서 물려받은 가상 함수를 자식 클래스 내에서 오버라이딩 되어 사용되는 것이다.

class A{
public String x(){return "A.x";}
}
class B extends A{
public String x(){return "B.x";}
public String y(){return "y";}
}
public class PolymorphismDemo1 {
public static void main(String[] args) {
A obj = new B();
}
}

B obj = new B()로 객체를 생성을 해야 하지만 B는 A를 상속 받고 있기 때문에 A를 데이터형으로 삼을 수 있다. 또한 A클래스의 멤버만을 사용할 수 있기 때문에 B클래스의 y메소드를 사용할 수 없으며, B클래스의 x메소드와 같이 오버라이딩하여 내용을 수정정하여 사용가능하다. 즉, 오버라이딩한 맴버의 동작방식은 그대로 유지된다.

 다형성을 쓰는 이유를 예시를 들자면

public class CalculatorDemo {
public static void execute(Calculator cal){
System.out.println("실행결과");
cal.run();
}
public static void main(String[] args) {
Calculator c1 = new CalculatorDecoPlus();
c1.setOprands(10, 20);
Calculator c2 = new CalculatorDecoMinus();
c2.setOprands(10, 20);
execute(c1);
execute(c2);
}
}

Calculator로 데이터 형을 같게 해서 하나의 execute메소드로 통일시켜 불필요한 메소드 생성을 줄일 수 있으며, run의 기능을 execute메소드로 묶을 수 있기에 추후 run과 같이 실행하거나 무언가를 조작하는 경우 일일이 고칠 필요 없이 execute메소드를 수정함으로써 유지보수에 용이하다.


 4)추상화

  - 공통된 속성이나 기능을 묶어서 이름 붙인 것을 말하며, 기능은 없고 이름만 정의해 놓은 것

출처

 - http://88240.tistory.com/228

 - https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 - https://opentutorials.org/module/516/6127

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA Collections Framework  (0) 2017.03.26
오버로딩 VS 오버라이딩  (0) 2017.02.08
블로그 이미지

D.Story

,