-
[JAVA] 객체지향 2카테고리 없음 2019. 1. 27. 17:31
1. 캡슐화(Encapsulation)
클래스 내에는 데이터 (변수)와 오퍼레이션(기능)이 있다.
캡슐화는 중요한 데이터나 복잡한 기능을 숨기고자 할 때
사용에 꼭 필요한 기능만을 공개하여 정의하는 기법을 말한다.
숨길때는
앞서 소개한 접근제한자(Modifier) 중 Private을 사용한다.
변수 혹은 메서드 앞에 private을 붙여주면
해당 변수or메서드는 소속된 클래스 내에서만 핸들링할 수 있다.
데이터를 private으로 선언하고
해당 데이터를 set/get 메소드를 통헤 접근, 제어하는 것이 보편적인 캡슐화 방법이다.
캡슐화 기법을 쓰면 필요한 기능만 공개되어 있기 때문에 사용이 편리해지고 코드의 유지보수를 용이하게 만든다.
2. 추상화(Abstraction)
프로젝트 클래스 설계 중 요구사항이 애매모호하거나 기능,구현부를 명확하게 결정할 수 없을 때 사용하는 기법이다.
클래스와 메소드 앞에 Abstract라는 키워드를 붙이면 구현부없는 메서드가 있음을 의미한다
클래스 내에 추상 메서드(Abstract 키워드가 붙은 메서드)가 하나라도 존재하면
해당 메서드를 가지고있는 Class의 앞에도 반드시 abstract 키워드를 붙여줘야한다.
그리고 반드시 알아야할 점은
추상클래스는 new를 통해 생성할 수 없다.
즉, 추상클래스 AbstractSuperA 라는 클래스는
AbstractSuperA a1 = new AbstractSuperA();
와 같은 선언이 불가능하다. 컴파일 에러가 난다.
AbstractSuperA 클래스를 상속받은 SubClassA 라는 클래스가 있는 경우에만
AbstractSuperA a1;
a1 = new SubClassA();
처럼 사용 가능하다.
Ex)
abstract class AbstractSuperA{
public void methodA() {System.out.print("메소드A");
}
public abstract void methodB(); //추상 메소드
}메소드 B는
AbstractSuperA를 상속받은 클래스가 반드시 구현해야한다.
※ 추상 메소드는 없지만 추상클래스인 경우가 있는데
재정의를 확정하기 어려워서 일단 상속만 유도한 경우라고 판단하면 된다.
※ 모든 메소드가 추상 메소드인 경우에는 이 클래스를 상속받은 하위 클래스가 모든 메소드를 정의(구현) 해줘야한다. 이 경우에는 생성자가 의미가 없다.
이런경우에는 Interface 를 사용는 것이 권장된다.
Interface는 생성자가 없고 구현부 없이 메서드 인아웃만 선언하며 다중 상속이 가능한 장점이있다.
Ex)
abstract class AbstractSuperC{
public abstract void methodA();
public abstract int methodB();
}구현부 정의시 하위클래스 선언
class SubClassC extends AbstractSuperC
//extends 는 단 한개의 클래스만 명시한다. 즉 단일상속만 가능
Interface 사용시
interface SuperInterface{
void methodA();
int methodB();}
class SubClassC implements SuperInterface
//implemets는 인터페이스를 명시하고 여러개의 인터페이스를 선언 할 수 있다. 즉 다중 상속 가능
상단의 예시에서
추상클래스와 인터페이스는 같은 의미이지만
인터페이스는 다중상속이 가능한 장점이 있다.
3. 다형성(Polymorphism)
사실상 상속, 추상화, 인터페이스, 캡슐화의 모든 설명이 곧 다형성에 대한 설명이라 해도 과언이 아니다.
다형성은
분석설계관점에서는
다양성, 유연성,재사용성을 뜻하고
메모리관점에서는
메모리 다이나믹 로딩을 뜻한다.
간단히 말해
메소드 파라미터를 여러버전으로 만들어서 업무의 다양성을 지원하고
인터페이스 상속을 통해 오버라이딩하여 구현부를 다양하게 만들 수 있다는 개념이다.
다형성이 가장 중요한 개념인 이유는
다형성을 이해하기위해서
다형성이 포괄하는 추상화,캡슐화,상속 등의 개념 이해가 전제되기 때문이다.
이전에 언급된 개념들에 대한 모든 이해가
사실은 다형성의 기법들인 것이다.