본문 바로가기

소프트웨어 개발/스프링 Spring

소프트웨어 코드를 재사용하려면?

소프트웨어 개발을 할 때, 코드를 재사용하려면 어떤 방법들이 있을까요?


1. 복사 & 붙여넣기

: 초보적인 재사용 방식으로 비슷한 코드를 다른 소스에서 복사해서 사용하는 방식입니다. 

GregorianCalendar date = (GregorianCalendar)Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String date = df.format(date);

 

(사용 예시) A라는 클래스에서 Date 타입을 String 타입으로 변환하는 코딩을 하고, 클래스 B에서 동일한 로직이 필요하여서 복사했다고 가정한 경우가 있을 수 있습니다. 

매우 간단하지만, 나중에 코드에 변화를 줘야할 필요가 생기면 그만한 대가가 따르는 방법입니다. 

예를 들어, 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");

 

1번 복사/붙여넣기 방법과 달리, 
JDK버전이 바뀌거나 메서드의 내용이 수정되더라도 해당 클래스를 모두 수정할 필요없이 toStringToday() 메서드의 내용만 수정하면 되는 장점이 있습니다. 해당 메서드를 호출하는 코드에서는 자동으로 수정된 코드가 적용된다는 장점이 있지요!

toStringToday() 메서드의 Signature를 변경하면 이 메서드를 사용하는 모든 클래스에 영향을 줍니다.

메서드 재사용 방법은 '복사 & 붙여넣기' 보다는 진보된 방식이지만, 작업 영역 간의 결합도(coupling) 문제는 여전히 존재한다는 단점이 있습니다.

 


 

3. 클래스 재사용(상속)

: 자주 사용되고 유사한 기능들을 함께 모아서 메서드로 정의하여 재사용하는 방법입니다. 

간단한 UML 모델

public class Person {
	private String Name;
	private String phoneNumber;
	private String emailAddress;
    
	public String purchaseParkingPass(String name, BigDecimal fee) {
		PurchasePass pass = new PurchasePass(name, fee);
		pass.createTicket();
    }
}

추후 코드 유지보수를 하면서 purchaseParkingPass() 메소드를 변경한다면,
Person을 상속받은 모든 클래스들은 자동적으로 변경된 purchaseParkingPass() 메소드를 사용할 수 있게 됩니다.

하지만 여기에도 한계점이 존재합니다. 부모 클래스 Person에서 purchaseParkingPass() 메서드의 signature가 변경되면, 자식 클래스의 signature도 변경되어서, 이 메서드를 사용하는 다른 클래스에 영향을 줍니다. 이는 코드 재사용의 장점이자 단점일 수도 있습니다. 
특정한 상황에 따라서, 해당 메서드의 기능을 변경하고 싶지 않은 문맥이 존재할 수 있기 때문입니다.

 


 

4. AOP (Aspect Oriented Programming)

: 또다른 코드 재사용 방법으로는 AOP, 즉 관심의 분리 (Separation of Concerns) 개념을 도입할 수 있습니다. 
AOP는 개발의 목적에 따라서 다른 문맥(Context)에 사용되는 코드를 분리해서 사용할 수 있다는 장점이 있습니다. 

AOP - Aspect Oriented Programming

AOP는 OOP를 더욱 OOP 답게 만들어 줄 수 있습니다. AOP의 장점은 OOP 뿐만 아니라 기존의 절차적 프로그래밍에도 적용될 수 있다는 장점이 있습니다.

 

코드를 재사용할 수 있는 방법들에 대해서 간단히 알아보았습니다.

추후에는 AOP에 대해서 더 깊게 알아보도록 하겠습니다!