Java] Method

Main Method

Java에서 main 메소드는 항상 먼저 실행하게 설정되어 있다.

그렇기에 main 메소드의 함수명은 main이어야 한다.

Return

메소드의 return은 2가지로 나누어져 사용된다.

  1. 값의 반환

    선언된 타입으로 return이 이뤄진다.

  2. 메소드의 종료

    void일 때, return이 생략되어 있다고 보면 된다.

전역변수와 지역변수

전역변수는 말 그대로 global variable로서 어디서든 사용할 수 있다.

지역변수는 local variable로서 중괄호 내에서만 선언이 되어 사용되는 변수들이다.

이 부분에 대해서는 이해가 부족한 것인지 의문이 생긴다.

사용하는 위치도 위치이지만, 접근 제어자를 고려하여 전역 변수와 지역 변수를 나누는게 더 옳은 것이지 않을까…?

이 부분에 대해서는 다른 개발자분들에게 질문을 해봐야겠다.

Recursion, 재귀

재귀는 ‘이해하느냐 못하느냐’에 따라 코드가 달라진다고 느낀다.

‘나는 재귀에 대해서 아직 잘 모르고 있구나, 익숙하지 않구나’라는 것을 알고리즘 문제를 풀면 항상 느낀다.

재귀를 사용할 수 있는 상황인지 고려를 해보고 사용할 수 있는 상황이라면 쓰는 것이 코드의 질이 달라진다고 생각한다.

물론, 재귀를 사용하지 않고도 풀 수 있으나, 코드가 길어지는 부분을 쉽게 할 수 있는 장점이 있는 것이다.

그러기에 재귀함수를 이용하는 간단한 문제 2개를 풀어보자.

1. 팩토리얼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Factorial Class
public class Factorial {
public Factorial() {}

public int factorial(int num) {
if(num == 1) return 1;
return num * factorial(num-1);
}
}

// Test Class
public class Test {
public static void main(String[] args) {
Factorial fact = new Factorial();
int result = fact.factorial(5);
System.out.println(result);
}
}

함수로만 구현할 수 있지만 라이브러리를 만들 때 이런식으로 만들어가지 않을까하여 클래스를 이용하여 구현하였다.

2. 하노이의 탑

1
2
3
4
5
6
7
8
9
10
public void hanoi(int disk, char from, char mid, char to) {
if(disk == 1) {
System.out.println( disk + "번 이동: " + from + " -> " + to);
return;
} else {
hanoi(disk-1, from, to, mid);
System.out.println(disk + "번 이동: " + from + " -> " + to);
hanoi(disk-1, mid, from, to);
}
}

하노이의 탑은 기본적인 3개의 기둥을 기본으로 두었다.

확실히 하노이의 탑과 같은 재귀는 고려해야하는 점이 생기는만큼 어렵다…

처음에 이 소스를 짠 사람이 대단하게 느껴진다…