GuGu 클래스를 생성한다.
public class GuGu {
}
이제 GuGu 클래스를 실행할 수 있는 main메소드를 작성해야한다. main 메소드를 다음과 같이 작성한다.
public class GuGu {
public static void main(String[] args) {
}
}
그리고 main 메소드에 다음과 같은 문장을 추가한다.
public class GuGu {
public static void main(String[] args) {
int n;
}
}
int는 정수를 의미하는 예약어이고 n은 변수이다. n 변수 뒤의 세미콜론(;)은 문장이 종료되었음을 의미한다.
문장의 마지막에 세미콜론을 생략하면 컴파일 오류가 발생하므로 문장의 끝에는 항상 세미콜론이 있어야 한다.
위 문장의 의미는 n 변수에 정수값을 저장할 수 있다는 말이다.
변수 n에 정수값을 저장(대입)하려면 다음과 같이 대입연산자(=)를 이용해야한다.
n = 5;
이러한 대입 구문에 이미 익숙할 것이다.
x + y = 10
x = 3
y의 값은?
자바 프로그래밍도 수학과 마찬가지도 변수를 사용하고 변수에 그 값을 할당할 수 있다. 하지만 약간의 차이점이 있는데 그것은 바로 int와 같이 변수명 앞에 뭔가가 붙어있다는 점이다.
int는 intrger(정수)의 약자로 자바에서는 정수를 나타내는 자료형을 의미한다. 이렇게 변수명 앞에 있는 자료형은 변수에 저장되는 값(자료)들이 어떤 형태(형)인지를 나타내는 역할을 한다.
자료형은 자료(값)의 형태를 의미하는 말이다.
다음처럼 n 변수를 int 자료형으로 선언하면 이제 n 변수에는 정수값만을 대입할 수 있다.
int n;
변수 n은 정수만을 허용하기 때문에 4라는 값은 대입이 가능하지만 "123"과 같은 문자열은 대입시 컴파일 오류가 발생한다.
public class GuGu {
public static void main(String[] args) {
int n;
n = 4; // OK
n = "123"; // 컴파일 오류
}
}
위 코드에서 // 부터 시작되는 문장은 주석(Comment)으로 프로그램 동작과는 전혀 상관이 없는 문장들이며 프로그래머가 코드에 대한 설명을 달아놓기 위해 사용된다.
우선 간단하게 2단부터 시작해본다. 2라는 숫자를 사용해야 하므로 다음과 같이 코드를 변경한다.
public class GuGu {
public static void main(String[] args) {
int n = 2;
}
}
int n = 2 처럼 변수 선언과 동시에 값을 할당할 수도 있다. 이제 n 변수에 2라는 정수값이 저장된 것이다. 그리고 구구단 중 2단을 완성하기 위해 다음과 같이 코드를 수정한다.
public class GuGu {
public static void main(String[] args) {
int n = 2;
System.out.println(n*1);
System.out.println(n*2);
System.out.println(n*3);
System.out.println(n*4);
System.out.println(n*5);
System.out.println(n*6);
System.out.println(n*7);
System.out.println(n*8);
System.out.println(n*9);
}
}
System.out.println은 화면에 값을 출력하는 용도로 사용한다. 그리고 숫자 곱하기를 위해서 곱하기 연산자인 * 을 사용했다. 안좋은 방법이지만 이제 구구단 중 2단을 출력할 수 있게 되었다. 만약 3단이 궁금하다면 다음과 같이 n의 값을 3으로 변경한 후 실행하면 된다.
int n = 3;
2단부터 9단까지의 결과를 모두 한번에 보고 싶다면 어떻게 해야할까
이 문제를 해결하기 위해 한 개의 숫자를 입력으로 받아 그 숫자에 대한 구구단을 출력하는 메소드를 만들어 본다. 다음은 dan 메소드가 추가된 GuGu 클래스이다.
public class GuGu {
public void dan(int n) {
System.out.println(n*1);
System.out.println(n*2);
System.out.println(n*3);
System.out.println(n*4);
System.out.println(n*5);
System.out.println(n*6);
System.out.println(n*7);
System.out.println(n*8);
System.out.println(n*9);
}
public static void main(String[] args) {
int n = 3;
// System.out.println(n*1);
// System.out.println(n*2);
// System.out.println(n*3);
// System.out.println(n*4);
// System.out.println(n*5);
// System.out.println(n*6);
// System.out.println(n*7);
// System.out.println(n*8);
// System.out.println(n*9);
}
}
main 메소드에 구현했던 내용이 dan 메소드로 옮겨져 있음을 알 수 있다. dan 메소드는 입력으로 정수값을 받아 1부터 9까지의 값을 곱한값을 출력하는 메소드다.
메소드의 가장 중요한 부분은 바로 입력과 출력이다. 위에서 만든 dan 메소드의 입력과 출력은 다음과 같다.
- 입력 - 정수 자료형 1개 (int n)
- 출력 - 없음(void)
메소드는 이러한 입출력을 반드시 선언해야 한다. 위 입출력 값에 의해 dan 메소드는 아래와 같이 구현되었다.
public void dan(int n) {
(... 생략 ...)
}
위 메소드 구문에서 public은 이 메소드에 접근할 수 있는 접근제어자이다. public으로 선언을 하면 이 메소드는 어떤 곳에서든지 호출이 가능해 진다. 그 다음에 나오는 void는 메소드의 출력부분이다. 이렇게 출력부분이 void라고 되어 있으면 출력값(리턴값)이 없음을 의미한다. 그 다음에 나오는 dan은 메소드의 이름이다. 메소드의 이름은 마음대로 지을 수 있다. 그 다음에 나오는 (int n) 부분은 입력항목이다. 출력은 반드시 하나이지만 입력은 여러개가 올 수 있기 때문에 괄호()를 이용하여 여러개를 선언할 수 있게 되어 있다. 만약 입력항목이 두 개라면 다음과 같이 선언할 수 있다.
public void dan(int n, int m) {
(... 생략 ...)
}
그 다음으로 입력항목 다음에 나오는 중괄호로 묶인 블록({ . . . })은 메소드의 내용에 해당한다.
이제 dan 메소드를 만들었으니 dan 메소드를 호출해야 한다. GuGu클래스는 반드시 main 메소드부터 시작하므로 main 메소드에서 dan 메소드를 호출해야 한다.
GuGu 클래스의 dan 메소드를 호출하려면 다음처럼 GuGu 클래스의 객체를 생성한 후 생성된 객체를 통해서 dan 메소드를 호출해야 한다.
(... 생략 ...)
public static void main(String[] args) {
int n = 3;
GuGu gugu = new GuGu(); // GuGu 클래스의 객체 생성
gugu.dan(n); // 객체를 통해 dan 메소드를 호출
}
(... 생략 ...)
GuGu클래스의 객체를 만드는 방법은 다음과 같다.
GuGu gugu = new GuGu();
int n 에서 n이 int자료형임을 알 수 있듯이 위 예의 GuGu gugu 문장은 gugu가 GuGu클래스의 자료형임을 나타낸다. 따라서 gugu변수에는 GuGu클래스로 생성한 객체만을 대입할 수 있다.
GuGu클래스의 객체를 만들기 위해서는 다음과 같이 new키워드를 이용한다.
GuGu gugu = new GuGu();
이와 같이 gugu객체를 생성하면 gugu객체를 통해 GuGu클래스의 dan메소드를 사용할 수 있다. 객체를 통해 클래스의 메소드에 접근하기 위해서는 다음과 같이 도트 연산자(.)를 이용한다.
gugu.dan(n);
이제 다음처럼 gugu 객체를 통해 dan 메소드를 호출하면 2단부터 9단까지 전부 출력할 수 있다.
public class GuGu {
public void dan(int n) {
System.out.println(n*1);
System.out.println(n*2);
System.out.println(n*3);
System.out.println(n*4);
System.out.println(n*5);
System.out.println(n*6);
System.out.println(n*7);
System.out.println(n*8);
System.out.println(n*9);
}
public static void main(String[] args) {
GuGu gugu = new GuGu();
gugu.dan(2);
gugu.dan(3);
gugu.dan(4);
gugu.dan(5);
gugu.dan(6);
gugu.dan(7);
gugu.dan(8);
gugu.dan(9);
}
}
GuGu 클래스의 dan 메소드를 호출하려면 GuGu 클래스의 객체를 먼저 생성한 후에 그 객체의 메소드인 dan 메소드를 호출해야 한다. 하지만 dan 메소드를 main 메소드처럼 static으로 선언한다면 다음과 같이 객체 생성 없이 메소드 호출만으로 가능하다.
public class GuGu {
public static void dan(int n) {
(... 생략 ...)
}
public static void main(String[] args) {
dan(2);
}
}
이번에는 다음의 dan 메소드를 개선해본다.
public void dan(int n) {
System.out.println(n*1);
System.out.println(n*2);
System.out.println(n*3);
System.out.println(n*4);
System.out.println(n*5);
System.out.println(n*6);
System.out.println(n*7);
System.out.println(n*8);
System.out.println(n*9);
}
입력으로 받은 숫자인 n에 1부터 9까지 곱하여 출력하는 문장이 반복되고 있다. 1부터 9까지 숫자를 반복하기 위해서는 다음과 같이 for문을 사용할 수 있다.
for(int i=1; i<10; i++) {
System.out.println(i);
}
for문은 세미콜론(;)을 구분자로 세 부분(초기치; 조건문, 증감식)으로 나뉘어진다.
for(초기화; 조건문; 증감식) {
(... 수행문 ...)
}
위 예제에서 초기화는 int i = 1 이되고 조건문은 i<10이 된다. 증감식은 i++가 된다. 해석해 보면 정수 i값이 1부터 시작하여 10보다 작을 때까지 i값을 1만큼씩 증가시킨다는 의미이다.
이제 dan 메소드에 for문을 적용 한다.
public class GuGu {
public void dan(int n) {
for (int i = 1; i < 10; i++) { // i에 1~9 까지의 값이 반복하여 대입된다.
System.out.println(n * i);
}
}
public static void main(String[] args) {
GuGu gugu = new GuGu();
gugu.dan(2);
gugu.dan(3);
gugu.dan(4);
gugu.dan(5);
gugu.dan(6);
gugu.dan(7);
gugu.dan(8);
gugu.dan(9);
}
}
main 메소드도 마찬가지 방법으로 for문을 적용할 수 있다.
public class GuGu {
public void dan(int n) {
for (int i = 1; i < 10; i++) {
System.out.println(n * i);
}
}
public static void main(String[] args) {
GuGu gugu = new GuGu();
for (int i = 2; i < 10; i++) { // i에 2~9 까지의 값이 반복하여 대입된다.
gugu.dan(i);
}
}
}
이렇게 하면 구구단이 완성된다.
'Language > Java' 카테고리의 다른 글
[Java] 1~100까지의 정수에서 모든 소수 구하기 (0) | 2022.07.25 |
---|---|
[Java] 자바 소스코드의 구조 (0) | 2022.07.25 |
[Java] 자바 (0) | 2022.07.24 |
[Java] 약수 구하기 실습 (0) | 2022.07.22 |
[Java] 숫자 맞추기 게임 실습 (0) | 2022.07.22 |