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 |