Scanner API & 배열

현서·2025년 5월 20일
1

자바

목록 보기
4/32
post-thumbnail

1. Scanner

자바에서 Scanner
-> 사용자로부터 키보드 입력을 받을 수 있게 해주는 표준 입력 처리 도구

java.util 패키지에 포함되어 있으며, 숫자, 문자열 등 다양한 형식의 데이터를 쉽게 입력받을 수 있도록 도와준다.
java.util
콘솔에서 입력을 받을 때 사용되며, System.in을 통해 표준 입력 스트림을 읽는다.

2. Scanner 사용

import java.util.Scanner; 선언
Scanner sc = new Scanner(System.in); 객체 생성
sc.nextInt(), sc.nextLine(), sc.nextDouble() 등 다양한 메서드를 사용해 입력 받기.
사용이 끝나면 sc.close();를 호출해서 자원 정리.

3. 메서드 정리

next() 단어 하나 (공백 전까지) 읽음
nextLine() 한 줄 전체 입력 (공백 포함)
nextInt() 정수 입력
nextDouble() 실수 입력
nextBoolean() true/false 입력

package lesson01;

import java.util.Scanner;

public class Ex05_Scanner {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine();
        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt(); // int 먼저 쓰면 안 됨.
        System.out.print("안녕하세요, "+name+"님! 당신의 나이는 "+age+"세 입니다.");
        sc.close();
    }
}
이름을 입력하세요: apple
나이를 입력하세요: 20
안녕하세요, apple님! 당신의 나이는 20세 입니다.

💥 nextInt() 후에 nextLine()을 바로 쓰면 입력이 꼬일 수 있다.
-> sc.nextLine()을 한 번 더 호출해서 버퍼를 비워줘야 한다.

int age = sc.nextInt();
sc.nextLine();  // 개행 문자 제거
String name = sc.nextLine();

4. System.in

System.in : 자바에서 표준 입력 장치를 의미하며, 일반적으로 키보드 입력을 받을 때 사용되는 입력 스트림(InputStream)이다.

Scanner, BufferedReader와 함께 사용되어 입력값을 읽는 데 활용되며, 바이트 단위로 데이터를 읽는다.

package lesson01;

import java.io.IOException;

public class Ex06_SystemIn {
    public static void main(String[] args) throws IOException {
        System.out.print("문자 하나를 입력하세요: ");
        int input = System.in.read(); // 한 글자(바이트)를 읽음
        System.out.println("입력한 문자: "+(char) input);
    }
}
문자 하나를 입력하세요: a
입력한 문자: a

5. 배열

자바에서 배열(Array)
-> 같은 자료형의 값들을 여러 개 저장할 수 있는 연속된 공간

배열은 한 번 생성되면 크기가 고정되며, 각 요소는 인덱스(순번)를 통해 접근할 수 있다.
인덱스는 0부터 시작하고, 배열의 크기보다 큰 인덱스를 참조하면 오류가 발생한다.

1. 배열의 특징

  • 같은 자료형만 저장 가능 (int[], String[], double[] 등)
  • 크기(길이)를 미리 정해야 함 → 한 번 정해지면 변경 불가
  • 인덱스는 0부터 시작 (arr[0], arr[1], …)
  • 반복문과 함께 사용하면 효율적으로 데이터 처리 가능

2. 배열 선언과 생성

int[] scores = new int[5]; // 정수형 5개를 저장할 수 있는 배열 생성
또는
int[] scores = {90, 80, 100, 70, 40};	// 배열 생성과 동시에 값을 저장

scores : 배열이 저장된 메모리의 위치(주소)를 참조.

package lesson01;

import java.util.Scanner;

public class Ex07_ArrayInput {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int [] scores = new int[3];

        System.out.print("1번째 점수를 입력하세요: ");
        scores[0] = sc.nextInt();
        System.out.print("2번째 점수를 입력하세요: ");
        scores[1] = sc.nextInt();
        System.out.print("3번째 점수를 입력하세요: ");
        scores[2] = sc.nextInt();

        System.out.println("1번째 점수: " + scores[0]);
        System.out.println("2번째 점수: " + scores[1]);
        System.out.println("3번째 점수: " + scores[2]);
        sc.close();
    }
}
1번째 점수를 입력하세요: 80
2번째 점수를 입력하세요: 90
3번째 점수를 입력하세요: 100
1번째 점수: 80
2번째 점수: 90
3번째 점수: 100

6. 2차원 배열

배열 안에 또 다른 배열이 있는 구조
행(row)마다 각각의 1차원 배열이 따로 존재한다.

1차원 배열: int[]
2차원 배열: int[][] ← 배열의 배열

package lesson01;

public class Ex08_JaggedArray {
    public static void main(String[] args) {
        int[][] jagged = new int[3][];

        // 가변 배열
        jagged[0] = new int[] {1, 2};
        jagged[1] = new int[] {3, 4, 5};
        jagged[2] = new int[] {6};

        System.out.println("jagged[0][0] = " + jagged[0][0]);
        System.out.println("jagged[0][1] = " + jagged[0][1]);
        System.out.println("jagged[1][0] = " + jagged[1][0]);
        System.out.println("jagged[1][1] = " + jagged[1][1]);
        System.out.println("jagged[1][2] = " + jagged[1][2]);
        System.out.println("jagged[2][0] = " + jagged[2][0]);
    }
}
jagged[0][0] = 1
jagged[0][1] = 2
jagged[1][0] = 3
jagged[1][1] = 4
jagged[1][2] = 5
jagged[2][0] = 6

7. 얕은 복사와 깊은 복사

1. 얕은 복사(Shallow Copy)

값 자체를 복사하는 게 아니라 주소(참조값)를 복사하는 것.
두 변수가 같은 객체(또는 배열)를 가리키게 된다.

int[] a = {1, 2, 3};
int[] b = a;  // 얕은 복사

b[0] = 99;

System.out.println("a[0] = " + a[0]);  // 99
System.out.println("b[0] = " + b[0]);  // 99

2. 깊은 복사(Deep Copy)

내용을 완전히 새로 복사하는 것.
새로운 공간을 만들고 값만 복사하므로 완전 독립적이다.

package lesson01;

public class Ex09_DeepCopy {
    public static void main(String[] args) {
        int[] a = {1, 2, 3}; // 원본 배열

        int[] b = new int[3]; // 새로운 배열(깊은 복사용)

        b[0] = a[0];
        b[1] = a[1];
        b[2] = a[2];

        System.out.println("a[0]: "+a[0]);
        System.out.println("b[0]: "+b[0]);
        System.out.println("-------------------------");

        b[0]=99;

        System.out.println("a[0]: "+a[0]);
        System.out.println("b[0]: "+b[0]);
    }
}
a[0]: 1
b[0]: 1
-------------------------
a[0]: 1
b[0]: 99
profile
The light shines in the darkness.

0개의 댓글