⚒️하나의 메소드에는 몇 개의 파라미터가 적절할까 ?

dev_itzel_02✨·2025년 3월 6일

⚒️Clean Code

목록 보기
2/4
post-thumbnail

코드를 리팩토링하던 중 사용자의 request를 받아 response 하는데 필요한 파라미터들을 추출해내야 했다.

그 후 그 파라미터들을 사용해 응답 데이터를 만들어야 하는 상황이다.

문제는 응답 데이터를 만드는 과정이 복잡하다 보니 여러 개의 메소드로 분리를 하고, 각 메소드로 파라미터들을 계속해서 넘겨주어야 한다는 것이었다.

하나의 메소드에 많으면 6개의 파라미터를 넘겨주게 되었고, 이게 최선인가하는 생각이 들어 다른 방법을 찾아보았다.

이때, 찾은 방법이다

데이터 전달 시 인스턴스변수를 활용하라!

함수의 인수를 통해 데이터를 전달하는 것은 코드를 읽는이에게 복잡함을 줄 수 있다. 다음 함수로 데이터를 전달하는 경우에는 Parameter로 넘기지 말고 Instance 변수를 활용하면 코드가 깔끔해진다.

public class TestClass {
        
	private StringBuffer buffer;

	public void test1() {
        this.buffer = new StringBuffer();
	}

	public void test2() {
        buffer.append("Parameter로 넘기지 말고 Instance 변수를 활용한다!");
	}
}

[출처] https://mangkyu.tistory.com/45

String 클래스

String은 불변 객체이다.

객체의 값을 변경할 수 없다는 뜻이다.

public final class String implements java.io.Serializable, Comparable {
	private final byte[] value;
}

String 클래스를 보면 final로 선언되어 있어 값을 바꾸지 못하는 것이다.

String s = "hello";
s = str + "world";

위와 같이 String 문자열에 새로운 문자열을 + 기호를 사용해 더했을 때, 메모리에서는 어떻게 저장이 될까❓

hello 문자열이 먼저 String 변수 s에 저장이 되고, 기존 문자열에 world 문자열을 더했을 때는 기존 객체의 값이 변경되는 것이 아니라 hello world 라는 새로운 객체가 생성이 되는 것이다. 그럼 s 변수는 새로운 객체를 가리키고, 이전의 객체는 가비지 컬렉터에 의해 제거된다.

StringBuffer / StringBuilder 클래스

StringBuffer와 StringBuilder는 가변 객체이다

모두 문자열을 생성하는 객체인 것은 동일하지만
객체의 공간이 부족해지는 경우 버퍼의 크기를 유연하게 늘려준다.

두 클래스는 내부 버퍼에 문자열을 저장해두고 추가, 수정, 삭제 작업을 할 수 있다.
이렇게 append, delete 등의 속성을 사용하여 동일 객체내에서 문자열 크기를 변경할 수 있다.

public final class StringBuffer implements java.io.Serializable {
	private byte[] value;
}

내부구조를 보면 final 키워드가 없는 것을 볼 수 있다.

따라서 값이 변경될 때마다 새롭게 객체를 만드는 String 보다 훨씬 빠르기 때문에, 문자열의 추가, 수정, 삭제가 빈번하게 발생하는 경우라면 StringBuffer와 StringBuilder를 사용하는 것이 이상적이다.

출처 - 더보기

이처럼 파라미터가 여러 개인 메소드와 String 변수에 +기호로 여러 번의 연산을 하는 코드를 수정해보아야겠다.

다음 글에 이어서 👉🏼👉🏼👉🏼

profile
🐜👣steadiness🐜👣

0개의 댓글