출처 : https://wikidocs.net/book/31
점프 투 자바
**초보 프로그래머를 위한 자바 입문서** 이 책은 문법위주의 지식보다는 이해중심의 지식을 전달하는 것을 주 목적으로 한다. 예를 들어 자바에서 잘 파악하기 힘든 개념 ...
wikidocs.net

필사 :
자바 언어를 능숙히 다루기 위해서는 넘어야 할 산들이 많다.
이번 장에서는 산을 넘기전 가벼운 산책을 해보자.
자바로 구구단을 만들어 보면서 자바 프로그램을 어떻게 작성하고 실행하는지 알아보자.
아래에 설명할 내용들은 이후 이어지는 챕터들에서 다시 자세하게 설명한다.
여기서는 이해되지 않더라도 편안한 마음으로 가볍게 살펴보자.
1. 클래스 생성
2. main 메소드
3. 변수
4. 메소드
5. 객체
6. for 문
7. 구구단 완성
1. 클래스 생성
먼저 인텔리제이를 실행해 HelloWorld 클래스 생성한 것처럼
GuGu 클래스를 생성하자.
public class GuGu {
}
2. main 메소드
GuGu 클래스를 실행할 수 있는 main 메소드를 작성하자.
public class GuGu {
public static void main(String[] args) {
}
}
3. 변수
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는 integer(정수)의 약자로
자바에서는 정수를 나타내는 자료형을 의미한다.
이렇게 변수명 앞에 있는 자료형은
변수에 저장되는 값(자료)들이 어떤 형태(형)이지를 나타내는 역할을 한다.
> 자료형은 자료(값)의 형태를 의미하는 말이다.
다음처럼 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단부터 시작해 보자.
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);
}
}
HelloWorld 클래스에서 보았듯이
System.out.println은 화면에 값을 출력하는 용도로 사용했다.
그리고 숫자 곱하기를 위해서 곱하기 연산자인 *를 사용했다.
좀 무식한 방법이지만 구구단 중 2단을 출력할 수 있게 되었다.
만약 3단이 궁금하다면 n의 값을 3으로 변경한 후 실행하면 된다.
int n = 3;
4. 메소드
그런데 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 = 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);
}
}
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) {
(... 생략 ...)
}
입력항목 다음에 나오는 중괄호로 묶인 블록 {...} 은 메소드의 내용에 해당한다.
5. 객체
다시 GuGu 클래스에 집중해 보자.
이제 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);
}
}
static 메소드
GuGu 클래스의 dan 메소드를 호출하려면
GuGu 클래스의 객체를 먼저 생성한 후에
그 객체의 메소드인 dan 메소드를 호출해야 한다.
하지만 dan 메소드를 main 메소드처럼
static으로 선언한다면
다음과 같이 객체 생성없이 메소드 호출만으로 가능하다.
public class GuGu {
public static void dan(int n) {
(... 생략 ...)
}
public static void main(String[] args) {
dan(2);
}
}
6. for 문
이번에는 다음의 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보다 작을 때까지
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++) { // i에 1~9 꺄지의 값이 반복하여 대입된다.
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);
}
}
}
7. 구구단 완성
완성된 구구단 프로그램은 다음과 같다.
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++) {
gugu.dan(i);
}
}
}
구구단 프로그램을 만들어 보았다.
느낀점 :
객체 부분이 어렵다.
자바 플레이 그라운드로 일단 무언갈 만든 다음에
지식을 얻는 것이 더 효율적인 방법이긴 한 것 같다.
지금도 머리가 아픈데
점프 투 자바부터 했다면 머리가 더 아파서 포기했을 수도 있을 것 같다.
<관련 자료>
- Static
'국비학원 전 강의 필사 > 점프 투 자바' 카테고리의 다른 글
| #02-02 변수와 자료형 - <점프 투 자바> (0) | 2022.08.24 |
|---|---|
| #02-01 자바 소스코드의 구조 - <점프 투 자바> (0) | 2022.08.19 |
| #01-03 안녕 세상! - <점프 투 자바> (0) | 2022.08.17 |
| #01-02 자바의 특징 - <점프 투 자바> (0) | 2022.08.17 |
| #01-01 자바에 대하여 - <점프 투 자바> (0) | 2022.08.17 |
댓글