OOP/OOP Basic

[OOP] 일반화(추상화)

IT록흐 2022. 10. 17. 22:13
반응형

 

일반화(추상화)는 객체지향 설계의 핵심이다.

 

 

일반화와 추상화는 사전적 정의로 구분될 수 있지만 굳이 구분 안 해도 별 탈 없다. 추상화와 일반화를 구분하는 것보다 더 중요한 것이 있다. 바로, 일반화특수화를 구분하는 것이다.

 

일반화(추상화)는 공통된 특성이나 공통된 기능으로 묶는 것을 의미한다. 공통된 특성은 상속으로 구현되고 공통된 기능은 인터페이스로 구현된다.  

 

 

 

 

 

 

 

어떤 관점을 가지냐에 따라

설계 방식이 달라진다. 

 

 

 

 

 

 

사용자는 '키는' 기능을 하고 싶다. 근데  만약 전등에 직접 접근한다면 오로지 전등만 킬 수 있다. TV, 에어컨 기타 등등은 킬 수 없다. 이는 비효율적인 설계이고 유지보수에 좋지 못하다. 효율적인 설계를 하려면 사용자는  '키는' 기능에 접근해야한다.

 

 

 

 

 

예를 들어 리모컨이 있을 수 있다. 

 

 

public interface RemoteController{
	public turnOn();
	public turnOff();
}


public class Light implements RemoteController{

	@Override
	public turnOn(){ 
		// 전등 로직...
	}
	
	@Override
	public turnOff(){ 
		// 전등 로직....
	}
	
}

public class TV implements RemoteController{

	@Override
	public turnOn(){ 
		// TV 로직...
	}
	
	@Override
	public turnOff(){ 
		// TV 로직....
	}
	
}

public class AirConditional implements RemoteController{

	@Override
	public turnOn(){ 
		// AirConditional 로직...
	}
	
	@Override
	public turnOff(){ 
		// AirConditional 로직....
	}
	
}

 

 

 

사용자는 전등, TV, 에어컨 전원 버튼을 

직접 누를 필요없다.

 

 

 

public class ReomoteControllerFactory {

	public static final int LIGHT = 0; // 전등
	public static final int TV = 1; // tv
	public static final int AC = 2; // 에어컨

	public RemoteController getController(int value){ // 전자제품 객체 생성 로직 ( 내부 로직 )
		swtich(value){
			case 0 : return new Light();
			case 1 : return new TV();
			case 2 : return new AirConditional();
			default : break;
		}
	}
}

public static void main(String() args){

	int key = RemoteControllerFactory.TV; // 사용자는 key만 설정하면 된다. 
	
	RemoteControllerFactory rcf = new RemoteControllerFactory(); 
	RemoteController rc = rcf.getController(key); 
	rc.turnOn();
	
}

 

 

사용자는 key만 설정하면 어떤 전자제품이든 간의 같은 로직으로 동작시킬 수 있다. 이처럼 사용자가 직접 특정 객체에 접근하지 않아도 공통된 기능을 가진 인터페이스 만으로 원하는 기능을 수행시킬 수 있다. 만약 또 다른 전자제품이 추가된다면 getController 메소드에 case 하나만 추가하면 된다. 심지어 사용자는 key 값만 바꾸고 다른 로직은 바꾸지 않아도 된다. 

 

이처럼 일반화(추상화)는 객체 간 낮은 결합도를 유지시키는 강력한 방법으로 객체지향설계의 핵심이라고 할 수 있다. 

 

 

 


 

 

참고자료

 

JAVA 객체지향 디자인 패턴 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

반응형