본문 바로가기
좋은 개발자가 되기위한 방법들/객체지향

객체지향 4대 특성 (추상화)

by chief_sac 2021. 9. 13.
반응형

객체지향의 4대 특성중에 하나인 추상화는 내 머리속에서는 단어만 들었을때 가장 이해하기 힘든 단어인데 예를들어 캡슐화 한다고하면 하나씩 소분한다는 느낌이 머리에들어오고 상속한다 하면 부모님이 자식에게 상속해 준다 뭔가 그런 느낌이 들지만 추상화...? 머리속이 벌써부터 꼬이기 시작하는데 내가 들어본 추상화 라는 단어는 말을 너무 추상적으로 한다는 뭔가 그런 이야기들 뿐이니 이번 기회에 한번 집중해서 이해해 보려 했다.

 

 

 

개념

추상화란 실세계의 복잡한 상황을 간결하고 명확하게 핵심 위주로 단순화시켜 슈커 플래스를 선정하는 개념이다.
  • 추상화는 코드의 재사용성과 가독성을 높이고 생산성을 높이며 쉬운 유지보수를 하게 해준다.

 

  • 사람들이 이해할 수 있는 언어나 그림으로 표현하게되는데 이것이 모델링에도 도움을 줄 수 있다.

 

내가 이해하기위해 가장 쉽게 생각 한 방법은 우리가 학창시절에 자주 외웠던 조선왕조 역대 왕을 외우는 방법과 주기율표를 생각 하게되었다. 현상의 본질만을 남기고 축약하여서 다루기 쉽게 하는 부분이 굉장히 비슷했기때문이다.

 

 

위에서 말한것은 그냥 추상화라는 자체를 이해할때 사용했던것이지 절대 같은 개념이아니다. 구체적인것은 감추고 전체적인 특성을 드러내는 것이 객체지향에서 말하는 추상화이다.

 

 

흔하게 사용하게되는 java에서 .sort() 와 같은 경우에서 예를 들면 우리가 어떠한 배열을 저곳에 넣게되면 정렬이되어서 오는데 그것이 정확하게 어떠한 일을 하는지 알지는 못하지만 내가 요청한게 무엇을 결과로 가져올지를 아는것처럼 여러가지 정렬되는 알고리즘은 존재하겠지만 .sort와 같은 정렬이라는 개념을 추상화하여 사용하는 것입니다.

 

 

사용예시


public abstract class Sort{
	public abstract void sort();
}

public class SelectionSort extends Sort{
@Override
	public void sort(){
			system.out.printf("선택정렬합니다.")
		
	}
}
public class InsertionSort extends Sort{
@Override
	public void sort(){
			system.out.printf("삽입정렬합니다.")
		
	}
}
public class BubbleSort extends Sort{
@Override
	public void sort(){
			system.out.printf("버블정렬합니다.")
		
	}
}

 

정렬을 한다는 것을 추상클래스로 만들어 하위클래스들을 추상메소드로서 재정의 받아서 아래와 같은 방식으로 코드를 작성 할 수 있습니다.

 

 

public class StartSort {
	public static void main(...){
	final List<Sort> sorts = Arrays.asList(new SelectionSort (), new InsertionSort() , new BubbleSort());  
	
for( final Sort array : sorts){
	array.sort();
}
}
}

이런 형식으로 일반화 하여 추상화를 구현하였고 추상화가 추구하는것은 불필요한 것을 지우고 핵심만을 남겨둔다는 것을 기억할 수 있었습니다.

반응형