오늘은 입출력에 대한 개념을 실습하였다.
키보드, 마우스 등 입력 장치를 통해 컴퓨터에 데이터를 입력한다.
모니터, 프린터 등 출력장치를 통해 컴퓨터가 데이터를 내보낸다.
System.out.print(출력할 내용)
이게 자바에서 기본적으로 출력을 하는 방법이라고 한다.
예를 들어 <6개월동안 Full-Stack 과정 잘해보자!> 라는 것을 출력하기 위해서는
public class Main {
public static void main(String[] args) {
System.out.println("6개월동안 Full-Stack 과정 잘해보자!");
}
}
println을 사용해 이런식으로 작성하면 된다.
다음은 줄을 바꿔서 여러줄에 출력하는 방식이다.
강의시작
강의 중...
강의 끝
이런식으로 출력을 하길 원한다면
public class Main {
public static void main(String[] args) {
System.out.print("강의시작\n");
System.out.print("강의중...\n");
System.out.print("강의끝");
}
}
print에 \n를 사용해 출력을 하면 위와 같이 줄이 바껴진 상태로 출력이 된다.
\n을 사용하지 않고 println을 사용해 줄바꿈을 시전해도 된다.
public class Main {
public static void main(String[] args) {
System.out.println("강의시작");
System.out.println("강의중...");
System.out.println("강의 끝");
}
}
이렇게 다른 방식으로 출력해도 결과값은 같게 나오는 것을 볼 수가 있다.

둘의 차이를 보기 쉽게 표로 정리해보았다.
다음은 서식을 만들어 출력하는 방법에 대해 알아보겠다.
서식을 만들 때는 출력값을 자리를 지정하는 문자인 서식 지정자가 존재한다.
자료형마다 서식지정자는 다르니 꼭 유의해서 작성하도록 하자.

이름과 나이, 키를 서식을 만들어 깔끔하게 출력해보겠다.
public class Main {
public static void main(String[] args) {
String name = "Jojn doe";
int age = 30;
double height = 174.5;
// 서식을 만들고 출력하기
System.out.printf("이름: %s\n", name);
System.out.printf("나이: %d\n", age);
System.out.printf("키: %f\n", height);
}
}
이런식으로 코드를 짜게 된다면
이름: John doe
나이: 30
키: 174.500000
이런식으로 깔끔하게 출력값이 나오는 것을 확인해 볼 수가 있다.
다음으로는 스캐너 클래스를 사용하는 방법에 대해 알아보는 시간을 가져보았다.
Scanner는 사용자가 키보드로 입력한 값을 프로그램이 읽어오게 해주는 도구이다.
Scanner 사용의 기본 구조부터 알아보도록 하겠다.
1단계: 가져오기
import java.util.Scanner;
Scanner는 java.util에 있어서 불러오는 작업을 진행한다.
2단계: 객체 생성
Scanner sc = new Scanner(system.in);
입력도구인 Scanner를 통해 키보드 입력을 받을 준비를 완료하였다.
3단계: Scanner로 입력받기
String name = sc.nextLine();
int age = sc.nextInt();
double score = sc.nextDouble();
지금까지 배운 것들을 바탕으로 사용자의 이름과 나이를 입출력하는 간단한 예제를 풀어보자
// 스캐너 클래스 가져오기
import java.util.Scanner; // utility 패키지에 있습니다.
public class Main {
public static void main(String[] args) {
// 사용자의 입력값을 저장할 변수를 생성합니다.
String name;
int age;
// 스캐너 객체(scanner)를 생성합니다.
Scanner scanner = new Scanner(System.in);
// 이름을 입력받습니다.
System.out.print("이름이 뭐니?");
// scanner가 입력을 처리한 뒤 결과를 반환합니다.
name = scanner.nextLine();
// 나이를 입력받습니다.
System.out.print("몇 살이야?");
age = scanner.nextInt();
// 결과 출력하기
System.out.printf("이름: %s, 나이: %d", name, age);
// 스캐너 닫기
scanner.close();
}
}
이렇게 코드를 작성하면 사용자의 이름과 나이의 정보를 입력 받아 출력하는 코드가 나타나게 된다.
다음은 사용자의 아이디와 비밀번호를 입출력하는 예제를 풀어보자.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String id;
String pw;
Scanner scanner = new Scanner(System.in);
System.out.print("아이디를 입력해주세요.");
id = scanner.nextLine();
System.out.print("비밀번호를 입력해주세요.");
pw = scanner.nextLine();
System.out.printf("로그인 정보- 아이디: %s, 비밀번호: %s", id, pw);
scanner.close();
}
}
이렇게 스케너를 통해 입출력을 받는 코딩을 진행해 보았다.
다음은 배열에 대해 배워보는 시간을 가졌다.
배열이란 같은 자료형의 값들을 여러 개 가질 수 있는 자료형이다.
자료형[] 배열_이름 = {요소1, 요소2...}
이런식으로 작성한다고 한다.
10, 20, 30 등 3개의 정수형 원소를 가지는 배열을 생성해보자.
public class Main {
public static void main(String[] args) {
// 자료형[] 배열_이름 = {요소1, 요소2, ..}
int[] arr = {10, 20, 30};
System.out.println(arr);
}
}
앞서 배운 문법을 토대로 작성해 보았다.
10, 20, 30은 숫자이므로 int를 사용하였고 이를 배열 arr에 저장했다.
그리고 print로 출력해보았다.
하지만 실행결과는 숫자들이 아니라 다음과 같이 출력된다.
[I@58644d46
이 값은 배열의 "내용"이 아니라 배열이 저장된 위치 정보(참조값)이기 때문이다.
자바에서 배열을 그냥 출력하면 배열 안의 값이 아니라 메모리에 저장된 주소를 대신 보여준다.
다음에 배울 것은 인덱스(Index)이다.
배열은 각 요소의 위치를 인덱스를 사용해 관리한다.
이 인덱스를 활영하여 배열의 특정 요소에 접근할 수 있는데, 첫번째 요소의 인덱스는 0이고 뒤로 갈수록 1씩 증가한다고 한다.
3개의 정수형 원소(10, 20, 30)를 가진 배열을 선언하고 각 요소에 접근해보자.
public class Main {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
이렇게 코드를 작성해 보았다. 출력하게 된다면
10
20
30
이런식으로 출력이 나오는 걸 확인해 볼 수가 있다.
인덱스가 0일 때 내가 불러오는 것은 첫번째 숫자인 10이다.
그렇게 된다면 1은 20, 2는 30이 되니 순서대로 잘 불러와진 것을 확인할 수가 있다.
다음 세 사람으로 구성된 문자열 배열을 생성하고 각 사람(요소)에 접근해보자.
public class Main {
public static void main(String[] args) {
// 복수형 (s)으로 이름을 짓는 것이 관습
String[] persons = {"Jone doe", "Jane doe", "Mary doe"};
System.out.println(persons[0]);
System.out.println(persons[1]);
System.out.println(persons[2]);
}
}
이렇게 코드를 작성해 보았다. 출력하게 된다면
Jone doe
Jane doe
Mary doe
이렇게 출력이 되는 것을 확인해 볼 수가 있다.
여기서는 int가 아니라 String을 사용하였다.
이름은 숫자가 아니기 때문이다.
다음은 인덱스로 바꿀 요소에 접근한 다음 값을 재할당하는 바꾸기를 해보겠다.
3개의 정수형 요소(10, 20, 30)으로 구성된 배열을 생성하라.
그 다음 각 요소를 순서대로 100, 200, 300으로 바꾸어라.
public class Main {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
// 배열의 첫번째 요소를 100으로 바꾸고 있습니다.
arr[0] = 100;
// 두번째 요소 교체
arr[1] = 200;
// 세번째 요소 교체
arr[2] = 300;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
이런식으로 코드를 작성하게 된다면 출력은
100
200
300
이렇게 출력이 되는 것을 확인해 볼 수가 있다.
내가 arr에 값을 10, 20, 30을 부여하였지만 arr[0] 이라고 지정한 배열의 요소를 100으로, arr[1]은 200, 다음은 300으로 지정하였기 때문에 print로 출력한 값은 처음에 지정한 값이 아니라 "기존 값을 수정한" 값으로 나오게 된다.
쉽게 말하자면 새 배열을 생성한 것이 아니라 기존 배열의 0번 칸 값을 내가 지정한 값으로 덮어 씌웠다고 보면 되겠다.
다음은 배열의 길이이다.
배열의 길이(Length)는 배열에서 요소의 개수를 의미한다.
length 속성으로 배열의 길이를 구할 수 있다.
3개의 정수형 요소(10, 20, 30)를 가진 배열을 생성하라.
그 다음 배열의 길이를 구해라.
public class Main {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
// length 속성
System.out.println(arr.length);
}
}
이렇게 코드를 작성해 보았다. 그럼 출력값을 확인해 보자.
3
출력값이 3이 나오는 이유는 arr 배열에 들어있는 요소의 개수가 3개이기 때문이다.
다음은 2D 배열이다.
2D 배열을 활용해 행렬(Matrix)를 표현할 수 있다고 한다.
자료형[][] 배열_이름 = {행1, 행2...}
다음을 따르는 2D 배열을 생성해보자.
1 2 3
4 5 6
public class Main {
public static void main(String[] args) {
int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
System.out.println(matrix);
System.out.println(matrix[0]); // 첫번째 행에 접근
System.out.println(matrix[1]); // 두번째 행에 접근
}
}
이렇게 코드를 작성해 보았다. 출력값은
[[I@58644d46
[I@14dad5dc
[I@18b4aac2
이렇게 출력이 되는 것을 볼 수가 있다.
일단 결론부터 말하자면 배열은 그냥 출력하면 값이 아니라 "주소(참조값)"이 출력되기 때문이다.
이 결과값은 위에서도 한 번 다뤘기 때문에 생략하겠다.
다음은 2D 배열에 접근하는 방법이다.
배열_이름[행 인덱스][열 인덱스]
앙래와 같은 행렬을 생성하고 각 요소에 접근해보세요.
1 2 3
4 5 6
public class Main {
public static void main(String[] args) {
int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
// 배열이름[행 인덱스][열 인덱스]
System.out.print(matrix[0][0]);
System.out.print(matrix[0][1]);
System.out.println(matrix[0][2]);
System.out.print(matrix[1][0]);
System.out.print(matrix[1][1]);
System.out.println(matrix[1][2]);
}
}
이렇게 코드를 작성하였고 출력하게 된다면
123
456
이렇게 출력이 되는 것을 확인해 볼수가 있다.
실제 구조는 큰 배열 안에 작은 배열 2개가 들어있는 구조이다.
0번 상자 [1, 2, 3]
1번 상자 [4, 5, 6]
그렇기 때문에 첫번째 [숫자]는 몇 번째 상자냐를 의미하고 두번째 [숫자]는 상자 안에서 몇번째를 꺼내길 원하냐를 의미한다.
그럼 내가 첫번째 상자 [1, 2, 3] 에서 1을 꺼내고 싶다면 [0][0]이 되는 것이고 두번째 상자에서 5번을 꺼내고 싶다면 [1][1]이 되는 것이다.
아래와 같은 행렬을 생성하고 각 요소에 접근해보아라.
(각 요소는 문자형이다.)
a b
c d
e f
g h
문자형이라는 것만 알고 있다면 코드를 작성하는 것을 비교적 간단하다.
public class Main {
public static void main(String[] args) {
String[][] matrix = {{"a", "b"},
{"c", "d"},
{"e", "f"},
{"g", "h"}
};
System.out.println(matrix[0][0]);
System.out.println(matrix[0][1]);
System.out.println(matrix[1][0]);
System.out.println(matrix[1][1]);
System.out.println(matrix[2][0]);
System.out.println(matrix[2][1]);
System.out.println(matrix[3][0]);
System.out.println(matrix[3][1]);
}
}
출력해보면
ab
cd
ef
gh
이렇게 출력값이 나온다.
문자형이니 int가 아닌 String을 사용하여 배열을 생성해주었다.
각 요소는 배열의 인덱스(Matrix[행][열])를 통해 접근할 수 있으며, 원하는 위치의 값을 지정하여 출력하면 된다.
이렇게 오늘은 입출력에 대한 개념과 서식, 스캐너, 배열에 대해 배워보는 시간을 가져보았다.
처음에는 개념들이 다소 어렵게 느껴졌지만, 직접 코드를 작성하고 결과를 확인하면서 점점 이해가 갔다.
특히 배열과 인덱스를 통해 값을 하나씩 꺼내보는 과정이 흥미로웠고, 단순히 이론으로만 배우는 것보다 직접 실행해보는 것이 훨씬 효과적이라는 것을 느꼈다.
앞으로도 다양한 예제를 통해 더 익숙해지고, 자바의 기본 문법들을 확실하게 다져나가야겠다는 생각이 든다.