2015년 8월 21일 from blog.hazard.kr
왠지 모르게 다들 어렵게 설명한다.
데브피아만 가도 “abstract는 없으면 인스턴스 생성 안되고 virtual 은 없어도 인스턴스 생성된다…”
한국 종특인 돌려말하기인지 모르겠지만, 초보들에게는 더럽게 이해 안되는 답변이다.
심지어 그런거 모르냐, 책을 읽어라, 알게된다. 이지랄까지 하고 있으니…
선배 개발자들 맞는지 의문 투성이다 정말. 먹고살기 빠듯한 건 아는데 그렇게 가르쳐주기 귀찮았냐 하는 생각이 든다.
내가 후배 개발자를 위해 간단명료하게 설명한다.
자. 네가 얻은 새로운 집에 시멘트만 있는 방 내부를 꾸미게 됐어.
이게 abstract class 다.
벽지는 붙여야지? 안그럼 방이냐? 폐가지.
그리고 장판 깔아야지 안그럼 맨발로 방 못들어가잖아.
그래서 벽지와 장판 붙이는 기능을 가진 메소드를 abstract로 선언한다.
좋아. 벽지는 일단 붙였어. 그럼 벽지에 데코를 붙이는 생각도 했을거야.
예를 들면, 벽에 뭐 매달거나, 야광 스티커를 붙이거나 할거야.
근데 이건 안해도 지장 없잖아.
그래서 벽지 데코를 붙이는 메소드를 virtual로 선언한다.
이해했지?
public abstract class 추상인테리어{
public abstract 벽지 벽지칠하기();
public abstract 장판 장판붙이기();
public virtual 데코레이션 데코붙이기(){
return null; // 기본 데코 안붙일거다.
}
}
public sealed class 철수인테리어 : 추상인테리어{
public override 벽지 벽지칠하기(){
var 벽지칠 = new 벽지();
var 벽지색 = 벽지색깔.파란색;
//벽지 칠하는 프로세스 구현
return 벽지칠;
}
public override 장판 장판붙이기(){
var 장판깔기 = new 장판(장판.흔한거);
//장판 까는 프로세스 구현
return 장판깔기;
}
}
public class 영희인테리어 : 추상인테리어{
public override 벽지 벽지칠하기(){
var 벽지칠 = new 벽지();
var 벽지색 = 벽지색깔.분홍색;
벽지칠.패턴 = 벽지패턴.꽃무늬;
//벽지 칠하는 프로세스 구현
return 벽지칠;
}
public override 장판 장판붙이기(){
var 장판깔기 = new 장판(장판.예쁜거);
//장판 까는 프로세스 구현
return 장판깔기;
}
public override 데코레이션 데코붙이기(){
var 데코 = new 데코레이션();
데코.종류 = 스티커.야광(색깔.초록색);
//데코 붙이는 프로세스 구현
return 데코.다붙였다();
}
}
존나 흔한 이름으로 클래스 붙였다.
끗.
Top comments (0)