Kutsu Lab
[Java] 변수의 필요성 (+ 객체지향개념 살짝 맛보기?) 본문
변수의 필요성
System.out.println("철수는 1996년에 태어났고 올 해는 2021년이다.");
System.out.println("철수의 한국식 나이는 몇 살일까용?");
System.out.println("한국식 나이 : 올해의 연도 - 태어난 연도 + 1");
System.out.print("올 해의 연도 : ");
System.out.println(2021);
System.out.print("태어난 연도 : ");
System.out.println(1996);
System.out.print("철수의 한국식 나이 : ");
System.out.println(2021-1996+1);
'''
올 해는 2021년, 철수의 출생년도는 1996인 상황에서 철수의 한국식 나이를 구하는 상황을 상상해보자. 한국식 나이는 (올해의 연도 - 태어난 연도 + 1) 이므로, 철수의 나이를 구하려면 2021-1996+1을 입력해서 결과값을 구해야한다. 단지 철수의 나이를 구해야하는 상황이라면 이런 방식 한번만 쓰면 되겠지만,
System.out.println("영희는 1991년에 태어났고 올 해는 2022년이다.");
System.out.println("영희의 한국식 나이는 몇 살일까용?");
System.out.println("한국식 나이 : 올해의 연도 - 태어난 연도 + 1");
System.out.print("올 해의 연도 : ");
System.out.println(2022);
System.out.print("태어난 연도 : ");
System.out.println(1991);
System.out.print("영희의 한국식 나이 : ");
System.out.println(2022-1991+1);
사람이 바뀌고, 그 사람의 출생년도, 태어난 연도가 달라지는 상황을 생각해보자.
이제 철수와 다른 부분을 전부 바꿔서 코드를 작성해야한다.
연도를 2021에서 2022로 바꾸는 작업을 두번해야하고, 1996을 1991로 바꾸기를 2번. 만약 이 숫자들을 사용하는 코드가 더 있다면 그만큼 더 코드를 찾아서 작성해야한다. 이런 번거로운 짓을 해야하는 코드를 '유지보수가 힘든 코드'라고 한다. 우리는 이런 코드를 줄이기 위해 노력해야한다.
String name = "철수"; // 변수를 사용하면 코드를 여러번 재사용할 때 유리해진다.
int thisYear = 2021;
int birthYear = 1996;
int korAge = thisYear - birthYear + 1;
여기서 성격이 비슷한 값들을 생각해보자.
올해의 연도를 통틀어서 표현할 수 있는 어떤 것, 설명 태어난 연도를 통틀어서 설명할 어떤 것.
비슷한 성격의 값들을 퉁쳐서 한 번에 표현할 수 있는 것이 있으면 매우 편리할 것 같다.
이 '어떤 것'에 해당하는 것으로 사용할 수 있는 기법이 바로 '변수'라는 데이터의 저장공간이다.
사람의 이름을 name이라는 String 클래스의 인스턴스로 다루고(String이 무엇인지는 뒤에서 다시 다룰 것이다.)
올해의 연도를 thisYear라는 int타입의 변수로 다루고
태어난 연도를 birthYear라는 int타입의 변수로 다루고,
한국식 나이를 korAge라는 int타입의 변수로 다룬다.
각각의 값들이 어떤 성질을 가지는 값인지 더욱 명료해졌다.
String name = "철수"; // 변수를 사용하면 코드를 여러번 재사용할 때 유리해진다.
int thisYear = 2021;
int birthYear = 1996;
int korAge = thisYear - birthYear + 1;
System.out.print(name);
System.out.print("은(는) ");
System.out.print(birthYear);
System.out.print("년에 태어났고 올 해는 ");
System.out.print(thisYear);
System.out.println("년이다.");
System.out.println(name+"의 한국식 나이는 몇 살일까용?");
System.out.println("한국식 나이 : 올해의 연도 - 태어난 연도 + 1");
System.out.print("올 해의 연도 : ");
System.out.println(thisYear);
System.out.print("태어난 연도 : ");
System.out.println(birthYear);
System.out.print(name+"의 한국식 나이 : ");
System.out.println(korAge);
뒤이어 출력문을 변경했다.
출력문에서는 아까 저장해둔 변수를 참조하도록 함으로서 앞으로 해당 출력부는 코드를 바꿀 필요가 없어진다.
name = "영희"; // 이미 선언된 변수에 저장된 값을 변경할 때는 변수 이름만 선언 후 새로 저장
thisYear = 2022;
birthYear = 1991;
korAge = thisYear - birthYear + 1; // age를 불러오면 위에서 저장된 age가 다시 불러와지기 때문에 다시 초기화 해줘야한다.
System.out.print(name); // 아래는 위의 코드를 싹 다 재사용
System.out.print("은(는) ");
System.out.print(birthYear);
System.out.print("년에 태어났고 올 해는 ");
System.out.print(thisYear);
System.out.println("년이다.");
System.out.println(name+"의 한국식 나이는 몇 살일까용?");
System.out.println("한국식 나이 : 올해의 연도 - 태어난 연도 + 1");
System.out.print("올 해의 연도 : ");
System.out.println(thisYear);
System.out.print("태어난 연도 : ");
System.out.println(birthYear);
System.out.print(name+"의 한국식 나이 : ");
System.out.println(korAge);
이젠 사람을 바꿔서 사용했다. 변수 name, thisYear, birthYear, korAge는 이미 선언되었으니 새로 선언할 필요는 없고 값만 다시 사용해주면 된다.
여기서 조심해야할 부분은 korAge인데 다시 korAge를 그냥 호출해버리면 위에서 저장된 korAge를 다시 사용하게 된다. 그래서 다시 또 설정해줄 필요가 있다. 이렇게 저장된 값을 변경하면, 그 후는 그저 위에서 쓴 코드를 재사용하면 끝!
이렇게 변수를 사용하면 성격이 비슷한 값을 다루기 더 편리해지고, 코드의 유지 보수가 좀 더 쉬워진다.
맛보기 : 나이 계산을 해주는 메서드, 출력 역할을 하는 메서드 분리
더 나아가서, 앞으로 나중에 배울 객체지향 개념을 맛보기로 보도록 하겠다. 여기서부터는 그냥 맛보기로 보자.
// 나이를 구하는 메서드를 따로 분리
private static int getKorAge(int birthYear, int thisYear) {
int korAge = thisYear - birthYear + 1;
return korAge;
}
main 메서드 위에 태어난 년도, 해당 년도를 매개변수로 하여 한국식 년도 KorAge를 구해주는 메서드를 분리했다.
// 출력하는 메서드를 분리
private static void printKorAge(String name, int birthYear, int thisYear) {
System.out.println("=======================================");
System.out.println(name+"의 출생년도는 "+birthYear+"년이고 올 해는 "+thisYear+"년이다.");
System.out.println("한국식 나이는 (올해의 연도 - 출생년도 + 1)로 계산된다.");
System.out.print("이를 토대로 한국식 나이를 계산해보면, ");
System.out.println(name+"의 한국식 나이는 "+getKorAge(birthYear,thisYear)+"세 이다.");
System.out.println("=======================================");
return;
}
또, 이름과 태어난 년도, 올해의 연도를 매개변수로 입력하면 한국식 나이를 알기 쉽게 출력하는 메서드를 분리하고 이것이 위에서 만든 getKorAge를 이용하도록 하였다.
아까는 print()문, println()문을 엄청 쪼개느라 코드가 더 길어졌었는데 결합자 '+'를 통해 엮음으로서 코드의 줄수를 줄이고 가독성을 높였다. 이 문자열의 결합에 대한 것도 뒤에서 다시 언급할 것이다.
public static void main(String[] args) {
printKorAge("철수",1996,2021); // 이름, 출생년도, 올해 연도를 매개변수로 하여 한국식 나이를 계산, 출력해줌.
printKorAge("영희",1991,2022);
}
이제 기존 메인 메서드의 코드를 싹 다 지워버리고 메인 메서드에서는
printKorAge를 호출해서 매개변수의 값만 입력해주면 된다. 결과적으로 메인메서드의 줄수는 2줄이 되어버렸다. 메서드 하나 계속 돌려쓰기 하면 되는 것이다!
무진장 길었던 코드가 이렇게 단순화되버리는게 신기하지 않은가?
처음 java를 배우면서 이렇게 코드의 줄수를 줄이고 가독성을 높이는게 이렇게 재미있을 수가 없었다.
앞으로 변수에 대한 개념을 배울 것이다.
이번 글에서는 변수를 왜 도입하면 좋은지에서 시작해서 뒷장에서 배우는 객체지향 개념의 맛보기로 약간 산으로 샜다. 앞으로 java를 배워나가면서 저렇게 코드를 간소화하는 과정을 배우게 될거라는걸 미리 보여주고 싶어서 이렇게 글을 써버렸다.
불필요한 코드를 줄이고 가독성이 좋은 코드를 짜내는 행위, 그리고 그 행위에 이르기까지의 여정... 그 모든 것은 힘들기도 하지만 그런 실력을 쌓아가는 자신을 보면 희열을 느끼게 된다. 모두들 힘내서 좋은 코드를 짤 수 있도록 노력하자!
'Java > 학습정리' 카테고리의 다른 글
[Java] 화면에 원하는 내용 출력 : print(), println() (0) | 2021.09.12 |
---|---|
[Java] 주석(comment) 달기 (0) | 2021.09.11 |
[Java] 첫 번째 Java 프로그램 작성 : Hello, World! (0) | 2021.09.07 |
[Java] Java 개발환경 구축 (JDK 설치, IDE 설치) (0) | 2021.09.06 |
[Java] Java란? (0) | 2021.09.06 |