1. 복사(Copy) & 붙이기(Paste)
: 초보적인 재사용 방식으로 비슷한 예제를 다른 Source에서 복사해서 사용하는 방법
예) A라는 클래스에서 Date 타입을 String 타입으로 변환하는 코딩을 하고,
클래스 B에서 동일한 로직이 필요하여 복사했다고 가정한 경우
GregorianCalendar date = (GregorianCalendar)Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String date = df.format(date)
그러나 JDK 버전이 바뀌어 동일한 기능을 제공하는 향상된 인터페이스가 나오면
위의 코드를 사용한 A, B 클래스 모두 변경해야 한다.
2. 매서드 호출
: 자주 사용되고, 유사한 기능들을 모아 메서드로 정의하여 재사용하는 방법
public class DateUtility {
public static String tostringToday(String format) {
GregorianCalendar date = (GregorianCalendar)Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String date = df.format(date);
}
}
String sdate = DateUtility.toStringToday("yyyyMMdd");
JDK 버전이 바뀌거나 메서드의 내용이 수정되더라도 해당 클래스를 모두 수정할 필요 없이
toStringToday() 메서드의 내용만 수정하면 된다.
그러나 toStringToday() 메서드의 *Signature를 변경하면 이 메서드를 재사용하는 모든 클래스에 영향을 준다.
메서드 재사용 방법은 '복사 & 붙이기' 방법 보다는 진보된 방법이지만,
작업 영역간의 결합도(Coupling) 문제는 여전히 존재한다.
※ Method Signature : 메서드 명, 메서드 리턴 타입, 아규먼트 개수 & 타입
3. 클래스 재사용 (상속)
public class Person {
public String printBirthDate(String, format) {
DateUtility.toStringToday(birthDate, format);
}
}
※ Person을 상속받은 모든 클래스들은 자동적으로 변경된 PrintBirthDate() 메서드를 사용하게 된다.
※ DateUtility 클래스의 메서드가 변경되더라도 printBirthDate() 메서드의 인터페이스가 변하지 않으면
나머지 클래스들은 영향을 받지 않는다.
4. AOP (Aspect Oriented Programming)
관심의 분리 (Seperation of Concerns)
AOP가 핵심관심모듈의 코드를 직접 건드리지 않고 필요한 기능이 동작하도록 하는 데는
위빙(Weaving)이라고 하는 특수한 작업이 필요하다.
즉, AOP에서 위빙 작업을 통해 핵심모듈 사이사이에 필요한 횡단 관심 코드가 동작하도록 엮어지게 만든다.
※ AOP는 OOP를 대체하는 것이 아닌 OOP를 더욱 OOP 답게 만들어 줄 수 있다.
※ AOP는 OOP 뿐만 아니라 기존의 절차적 프로그래밍에도 적용될 수 있다.
'Backend' 카테고리의 다른 글
프레임워크의 구성요소와 종류 (0) | 2024.02.21 |
---|---|
디자인 패턴과 프레임워크의 관련성 (0) | 2024.02.21 |