간단한 메서드지만 볼 때마다 대체 무슨 차이가 있는거야? 싶을 때가 있다.
void printNumbers(int n) {
for(int i=1; i<=n; i++){
System.out.println( i*i);
}
}
void printNumbers(int n) {
for(int i=1; i<=n; i++){
System.out.printf("%d", i*i).println();
}
}
둘 중 뭐가 더 나은 방식의 코드일까?
개발을 배우면서 코드를 짤 때는 간결해야 하고, 가독성이 좋아야 한다는 것을 알게 됐다. 코딩을 할 때도 좀더 나은 버전의 코드들이 있다는 것을 말해준다. 그래서, 어떤 게 더 나은 코드일지 고민을 해봤다.
각각의 기능에 대해서 생각해보자.
System.out.println("Hello World")
=Hello Wolrd
System.out.printf("%d, %f", 10, 2.132).println()
=10, 2.132000
차이점은 println은 간단한 출력에 사용할 수 있고, printf는 출력을 정교하게 할 수 있다는 것이다.
println은 우선 자동으로 줄바꿈을 해준다는 장점이 있다. 간결한 내용을 바로 출력할 때 사용하면 된다. 대신 결과물들이 매번 새로운 줄에 출력된다는 점이 때로는 단점이 될 수도 있다.
printf는 정수, 실수, 문자열 등을 특정 형식에 맞춰서 정밀하게 출력할 수 있다. println을 쓸 때는 직접 값을 변화시켜줘야 하는데, printf를 쓸 때는 변수값을 바꿔주기만 해도 된다.
int i =3
System.out.printf("%03d\n", i*i).println()
=009
🧐 하나씩 분석해보자.
1. printf는 형식화된 문자열을 출력할 때 사용한다.
2. 여기서 문자열은 "%03d\n"다. %03d라고 코드를 작성하면 정수를 3자리 형태로 출력하겠다는 뜻이다.
3. \n은 줄 바꿈 문자다.
4. i*i는 메서드에 전달되는 인수를 말한다. 이 값이 %03d 위치에 들어간다. 즉, i=3이라면 9라는 값이 들어간다.
5. 결과물은 009다.
확실히 System.out.printf() 메서드를 쓸 때 더 정교한 출력이 가능하다는 게 느껴진다!
void sum(int firstNumber, int secondNumber){
System.out.println(firstNumber+secondNumber);
}
위가 내가 만들었던 코드
void sum(int firstNumber, int secondNumber){
int sum=firstNumber+secondNumber
System.out.println(sum);
}
아래가 강의에서 선생님이 만들었던 코드
둘의 차이는 sum이라는 변수를 사용했다는 것이다. 단순히 그렇게만 이해하고 넘어가고 싶지 않았다. 어떤 방식을 활용하는 게 더 효율적인 코딩방식일까?
단순히 firstNumber와 secondNumber의 합만을 구하는 메서드를 만든다면 첫번째 방식도 나쁘지 않다. 대신, '특별한 이유가 있으면' 중간 변수를 활용하는 것이 효율적이라고 한다. 가령, 코드의 가독성을 향상시키거나 다른 작업을 수행하려고 중간 변수를 만들 수 있는 것이다.
▪가독성 향상
sum이라는 변수 이름은 기능의 의미를 직관적으로 전달한다. 이름만 봐도 두 숫자를 합한다는 것을 바로 알 수 있다. 중간 변수를 사용해서 계산 과정을 단계적으로 표시하기도 했다. 코드를 읽는 사람이 한눈에 어떠한 일이 일어났는지 알 수 있도록 하는 것이다.
(참고로 코드가 복잡한 작업을 수행할 때는 중간 변수를 사용해주는 것이 유지 보수에 도움이 된다고 한다. 변수를 사용하면 중간 결과들이 나와서 그렇다. 덕분에 단계마다 결과를 쉽게 추적할 수 있어서 버그가 있는지 확인 가능하다고 한다.)
▪다른 작업에 재활용
중간 변수를 사용하면 다른 곳에서도 재활용이 가능하다. 가령, 5와 10을 더한다고 해보자. 15라는 결과가 나온다. 다른 연산을 수행하다가 15를 갖고 오고 싶으면 5와 10를 또 계산해야 한다. 만약, 5와 10을 sum이라는 변수에 저장했다면? 굳이 다시 계산을 하지 않고 sum을 불러오면 된다. 쉽게 생각하면, 동일한 결과를 얻기 위해서 계산을 반복하지 않아도 된다는 것!
✔그렇다고 해서 항상 중간 변수를 쓰는 것이 좋다고 할 수는 없다. 경우에 따라서는 직접적인 계산을 하는 것이 코드를 더 간결하게 만들 수 있어서다. 결국, 경험을 쌓고서 스스로 판단해야 하는 것이 중요할 듯하다.