Contents
Four Pillars of OOPs.
- 객체지향 프로그래밍의 철학적 개념
- 객체 중심으로 코드를 구성하는데 있어서 개발자로 하여금 소프트웨어 복잡성을 더 잘 다룰 수 있도록 해주는 원칙
- 코드를 더 잘 조직화하고 재사용 및 관리가 되기 쉽게 함
사용자의 입장 : 구현은 제대로 되었을 것이다 생각하고 사용에 집중
구현자의 입장 : 각 연산이 제대로 동작하도록 구현에 집중
데이터 추상화 (Data abstraction)
여러 자료형을 하나로 묶어 더 높은 단계로 추상화 하는 것
프로시저 추상화 (Procedrual abstraction)
함수를 어떻게 호출하고 무엇을 수행하는지만 알게하고 함수 내부 로직(구현)은 감추는 것
설계 시 추상적인 계약(요구 사항, 인터페이스)을 실제로 구현된 구체적인 부분(클래스, 모듈 등)과 분리하여 설계할 수 있는 능력을 줌
What(무엇)과 How(어떻게)를 분리할 수 있는 능력을 줌
고수준 아이디어의 전체 아키텍처를 먼저 고려하고, 이후에 저수준의 구현 세부 사항을 다룰 수 있는 능력
class Time {
// 데이터는 외부에서 접근 할 수 없음
private int hour;
public void setHour(int hour){
if(hour < 0 || hour > 24)
return;
else
this.hour = hour;
}
public int getHour(){
return hour;
}
}
높은 응집도와 낮은 결합도를 유지해야 요구사항 변경에 유현하게 대처 가능
슈퍼 클래스에 정의한 변수와 메소드를 서브 클래스가 묵시적으로 소유하게 하는 것
공통된 속성/메소드를 반복적으로 정의할 필요 없음.
상속 관계가 여러 단계로 구성된 것을 상속 계층 구조라고 함.
Is-A 관계
An A is a kind of B가 성립하면 "A는 B의 일종이다"라고 해석하고 A클래스가 B클래스의 서브 클래스가 될 수 있음
어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질
나는 집에서 아들이지만,
학교에서는 학생,
식당에서는 손님.
Overriding과 연관됨 : 상황에 따라 여러 가지 형태를 가질 수 있음
public abstract class HTMLElement {
public abstract void render(); // operation
}
public class TextBox extends HTMLElement {
@Override
public void render(){ // method
// implementation here
}
}