Object-Oriented Programming(OOP)
업데이트:
Object-Oriented Programming(OOP)Permalink
- 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 객체들의 모임으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임이다.1
- 강한 응집도(Cohesion)과 약한 결합도(Coupling)을 지향한다.
응집도(Cohesion)Permalink
한 모듈 내부의 기능적인 연관도를 나타낸다.2
응집도의 종류Permalink
순서대로 응집도는 감소한다.
기능적 응집도(Functional Cohension)Permalink
모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우.
순차적 응집도(Sequential Cohension)Permalink
동일합 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우.
절차적 응집도(Procedural Cohension)Permalink
모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우.
시간적 응집도(Temporal Cohension)Permalink
연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우.
논리적 응집도(Logical Cohension)Permalink
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우.
우연적 응집도(Coincidentail Cohesion)Permalink
모듈 내부의 각 구성요소들이 연관이 없을 경우.
결합도(Coupling)Permalink
어떤 모듈이 다른 모듈에 의존하는 정도를 나타내는 것이다.3
결합도의 종류Permalink
순서대로 결합도는 감소한다.
내용 결합도(Content Coupling)Permalink
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용 하는 경우. 한 모듈에서 수정이 일어날 경우 다른 모듈 또한 수정이 필요하다.
공통 결합도(Common Coupling)Permalink
파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역변수를 갱신하는 식으로 상호작용하는 경우. 전역 변수를 변경하면, 그 자원을 사용하는 모든 모듈의 변경이 필요하다.
외부 결합도(External Coupling)Permalink
어떤 모듈에서 반환한 값을 다른 모듈에서 참조해서 사용하는 경우.
제어 결합도(Control Coupling)Permalink
단순히 처리를 해야할 대상인 값만 전달되는게 아니라 어떻게 처리를 해야 한다는 제어 요소(DCD, Flag등)이 전달되는 경우.
스탬프 결합도(Stamp Coupling)Permalink
모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐등이 전달되는 경우.
자료 결합도(Data Coupling)Permalink
모듈간의 인터페이스 전달되는 파라미터를 통해서만 모듈간의 상호 작용이 일어나는 경우.
추상화(Abstraction)Permalink
- 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
- 자료 표현에 불필요한 정보는 숨기고, 필요한 정보만 표현함으로써 프로그램을 간단히 만드는 것이다.
- 객체의 구조인 클래스의 속성과 기능을 정의하는 것이다.
public class Class {
// It can only be used inside.
private String variable;
// It can also be used outside.
public String getVariable() {
return this.variable;
}
// It can only be used inside the package.
protected void setVariable(String variable) {
this.variable = variable;
}
}
캡슐화(Encapsulation)Permalink
- 객체가 맡은 역할을 수행하기 위해 관련성 있는 속성과 기능을 하나로 묶는 것이다.
- 객체 외부에서는 함수를 통해서만 객체 내부에 있는 데이터에 접근이 가능하게 한다.
은닉화(Hiding)Permalink
- 객체 내부의 속성과 기능을 외부에서 접근하지 못하도록 숨기는 것이다.
- 접근제어자를 이용하여 정보 제공에 대한 범위를 정의한다.
상속(Inheritance)Permalink
- 상위의 개념의 속성과 기능을 하위 개념이 물려 받는 것이다.
public class Media {
public String name;
public Media(String name) {
this.name = name;
}
public void play() {
System.out.printf("The media(%s) is played.%n", this.name);
}
}
public class Music extends Media {
public Music(String name) {
super(name);
}
@Override
public void play() {
System.out.printf("The music(%s) is played.%n", this.name);
}
}
다형성(Polymorphism)Permalink
- 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질을 가리킨다.
- 코드의 재사용성이 높아지고, 유지보수가 용이해진다.
오버 라이딩(Overriding)Permalink
- 상위의 개념의 기능을 하위 개념이 물려 받아 새로운 기능으로 정의하는 것을 말한다.
- 같은 이름의 기능이 여러 클래스에서 다른 기능을 한다.
public class Main {
public static void main(String[] args) {
Media media = new Music("Graceful Ghost");
media.play();
}
}
The music(Graceful Ghost) is played.
오버 로딩(Overloading)Permalink
- 같은 이름의 기능이 매개변수의 개수나 자료형에 따라서 다른 기능을 하는 것을 말한다.
public class Media {
...
public void play(String place) { // Overloaded the play method.
System.out.printf("The media(%s) is played in %s.%n", this.name, place);
}
}
public class Music extends Media {
...
@Override
public void play(String place) {
System.out.printf("The music(%s) is played in %s.%n", this.name, place);
}
}
public class Main {
public static void main(String[] args) {
Media media = new Music("Graceful Ghost");
media.play("the Seoul Arts Center");
}
}
The music(Graceful Ghost) is played in the Seoul Arts Center.
댓글남기기