12 분 소요

변수와 타입

변수

변수(Variable) : 값이 변할 수 있는 데이터를 임시적으로 저장하기 위한 수단

프로그래밍은 데이터를 어떻게 처리할 것인가를 컴퓨터가 인지할 수 있는 언어로 작성하는 것을 의미합니다.
어떤 데이터를 프로그래머가 원하는대로 처리하기 위해서는 그 데이터를 임시적으로 컴퓨터에 저장해둘 필요가 있습니다.

메모리 아파트
메모리셀의 집합체 집의 집합체
각 메모리셀에 데이터를 저장할 수 있다. 각 집에 사람이 들어가 살 수 있다.
각 메모리셀을 가리키는 주소가 있다. 각 집을 가리키는 호수가 있다.

메모리에 값을 저장할 수 있고, 값이 저장된 위치를 알고 있다면 그 값을 꺼내서 사용해야합니다.
메모리에 값을 넣기 위해서는 메모리 주소에 직접 값을 넣어주어야 합니다.

변수의 선언과 할당

변수 선언

변수를 사용하려면 먼저 변수를 선언하여야 합니다.
변수를 선언할 때에는 저장하고자 하는 값의 데이터 타입과 함께 변수 이름을 작성해주면 됩니다.

    
        class Example {
            public static void main(String[] args) {
                int num; // 변수 선언
            }
       }
    

이제 num 이라는 변수에 정수형의 숫자를 저장할 수 있게 되었습니다.
지금부터는 변수를 선언하면 내부적으로 어떤 일이 발생하는지 살펴보겠습니다.

컴퓨터에 저장할 수 있는 값은 여러 가지 종류로 나뉘는데, 이러한 값의 종류를 타입이라고 하며, 여러 타입들 중에는 int형이라는
타입이 있습니다. 이 int 형은 4byte의 메모리 공간을 차지합니다.

컴퓨터가 어떤 값을 저장하려면 먼저 값을 저장할 메모리 공간을 확보하고,
추후에 그 값을 사용할 수 있도록 값이 저장된 공간에 이름을 붙여야 합니다.
이 과정이 바로 변수를 선언했을 때 발생하는 과정입니다.
**즉, 변수를 선언하면 컴퓨터는 값을 저장할 메모리 공간을 확보하고, 확보한 메모리 공간에 사용자가 입력한 변수 이름으로 이름을 붙입니다. **
** 변수 num은 int형이다. → int형은 4byte다. → 따라서 4byte의 메모리 공간을 확보해야 한다. **

값 할당

변수에 값을 저장하는 것을 할당또는 대입이라고 합니다. 변수에 값을 할당하는 방법은 간단합니다.
대입 연산자 = 을 아래 예제와 같이 활용하면 됩니다.

    
        class Example {
            public static void main(String[] args) {
                int num; // 변수 선언
                num = 1; // 값 할당
            }
        }
    

위 예제에서, num에 1을 할당했으며, num을 선언하고 나서 처음으로 할당이 이루어졌습니다. 이처럼, 변수를 선언하고 나서 처음으로 값을 할당하는 것을
초기화라고 합니다. 그리고, 초기화가 이루어진 후에 다시 다른 값을 할당하는 것을 재할당이라고 합니다.

아래 예시처럼 num을 1로 초기화한 후, 2로 재할당하면 num에 저장되어 있던 1은 사라지고 2가 저장됩니다.

    
        class Example {
            public static void main(String[] args) {
                int num; // 변수 선언
                num = 1; // 값 할당(초기화)
                num = 2; // 값 할당(재할당)
            }
        }
    

마지막으로, 변수를 선언하면서 동시에 초기화할 수도 있습니다.

    
        class Example {
            public static void main(String[] args) {
                int num = 1; // 선언과 동시에 초기화
            }
        }
    

변수 명명 규칙

자바에서 변수명은 일반적으로 카멜 케이스(camelCase)를 사용합니다. 카멜케이스란 낙타 등 모양을 닮았다고 해서 붙여진 이름으로,
두번째 단어부터 대문자로 시작해 구분합니다.

변수명으로 영문자, 숫자, _, $를 사용할 수 있으며, 영문자는 대소문자가 구별되어 인식됩니다.
즉 a와 A는 다른 문자로 인식됩니다.

    
        // 아래의 모든 변수의 변수명은 허용되는 변수명입니다. 
        int num;
        int NUM; // num과 다른 변수입니다. 
        int num_1;
        int num$1;
        // 숫자로 시작하는 변수명은 사용할 수 없습니다.
        int 10Age; // Error 
        //자바에서 이미 사용 중인 예약어(reserved word)는 변수명으로 사용할 수 없습니다.
        int byte;  // Error
        int class; // Error
    

상수

상수(Constant) : 변하지 말아야 할 데이터를 임시적으로 저장하기 위한 수단

상수는 간단히 말해, 재할당이 금지된 변수입니다. 즉, 변수와 같이 선언하고 할당하여 사용할 수 있지만,
재할당이 금지되어져 있습니다.
상수는 final이라는 키워드를 사용해 선언할 수 있으며, 관례적으로 대문자에 _ 를 넣어 구분하는
SCREAMING_SNAKE_CASE를 사용합니다. final double CALCULATOR_PI = 3.14;

상수를 사용하는 이유

  • 프로그램이 실행되면서 값이 변하면 안되는 경우
    • 프로그래머가 실수로 상수에 값을 재할당하고자 하면 에러가 발생하여 실수를 방지할 수 있습니다.
  • 코드 가독성을 높이고 싶은 경우
    • 상수를 사용하면 값을 저장하고 있는 상수명으로 값을 사용할 수 있기 때문에 코드 가독성이 향상됩니다.
  • 코드 유지관리를 손쉽게 하고자 하는 경우
    • 여러분들이 계산기 프로그램을 만들었으며, 소스 코드에서 원주율이 필요한 곳에 모두 숫자값 3.14를
      대로 사용했다고 가정합시다. 만약, 여러분이 계산의 정밀도를 높이기 위해 원주율을 3.14159로 변경해야 한다면,
      기존의 3.14가 사용된 모든 코드를 찾아 일일이 수정해주어야 합니다.
      반면, 상수를 사용하면 상수에 할당할 값만 3.14159로 바꾸어주면 됩니다.
    
        // 기존 코드
        final double CALCULATOR_PI  = 3.14;

        // 변경된 코드
        final double CALCULATOR_PI  = 3.14159;
    

타입

타입이란?

타입은 어떤 값의 유형 및 종류를 의미하며, 타입에 따라 값이 차지하는 메모리 공간의 크기와,
값이 저장되는 방식이 결정됩니다.

  • 값이 차지하는 메모리 공간의 크기
    • 예를 들어, 정수형 타입의 데이터는 4byte, 문자형 타입의 데이터는 1byte입니다.
  • 값이 저장되는 방식
    • 타입은 저장하고자 하는 값을 그대로 저장하는 기본타입과, 저장하고자 하는 값을 임의의 메모리 공간에
      저장한 후, 그 메모리 공간의 주소를 저장하는 참조타입으로 분류됩니다.

기본 타입과 참조 타입

자바의 타입은 실제 값을 의미하는 기본 타입과 어떤 값이 저장된 주소를 값으로 갖는 참조 타입, 두가지의 데이터 타입을 가지고 있습니다.

  • 기본 타입(primitive type)
    • 값을 저장할 때, 데이터의 실제 값이 저장됩니다.
    • 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
  • 참조 타입(reference type)
    • 값을 저장할 때, 데이터가 저장된 곳을 나타내는 주소값이 저장됩니다.
    • 객체의 주소를 저장, 8개의 기본형을 제외한 나머지 타입
    
        public class Example {
            public static void main(String[] args) {
                int primitive = 1;
                Object reference = new Object();
        
                System.out.println(primitive);
                System.out.println(reference);
            }
        }
    
  • int primitive = 1;은 의사코드 예제의 기본타입변수 = 1;에 구조적으로 대응됩니다.
  • Object reference = new Object();는 의사코드 예제의 참조타입변수 = 객체;에 구조적으로 대응됩니다.
  • System.out.println();은 의사코드 예제의 출력(); 메서드와 대응됩니다.

리터럴

리터럴이란?

프로그래밍에서 리터럴이란 문자가 가리키는 값 그 자체를 의미합니다.

    
        class Example {
            public static void main(String[] args) {
                int num; // 변수 선언
                num = 1; // 값 할당
            }
        }
    

위 예제에서 num에 할당하고 있는 1이 바로 리터럴입니다.

  • float 타입의 변수에 실수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 f를 붙여주어야 합니다.
  • long 타입의 변수에 정수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 L을 붙여주어야 합니다.
    • 소문자 l을 붙여도 되지만, 숫자와의 혼동을 방지하기 위해 보통 대문자 L을 사용합니다.
    
        float weight = 74.5f;
        final long LIGHT_YEAR = 9460730472580L;

        float = 9460730472580.0F;
        double = 9460730472580.0D;
    

정수 타입

정수 타입은 숫자를 나타내는 타입으로, byte, short, int, long 의 총 4개의 타입으로 분류됩니다.
이들은 각각 차지하는 메모리의 크기가 다르며, 그에 따라 나타낼 수 있는 숫자의 범위가 다릅니다.

타입별로 차지하는 메모리 공간의 크기와 표현할 수 있는 범위입니다.

:타입: :메모리: :표현범위:
byte 1byte -128 ~ 127
short 2byte -32,768 ~ 32,767
int 4byte -2,147,483,648 ~ 2,147,483,647
long 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

정수형 리터럴은 아래와 같이 정수형 변수에 할당할 수 있습니다.
이 때, long 타입 리터럴의 경우레는 리터럴 뒤에 접미사 L 또는
l 을 붙여주어야 합니다. 일반적으로, 순자 1과 혼동을 방지하기 위해 대문자 L을 붙입니다.

    
        // 각 데이터 타입의 표현 범위에 맞는 값을 할당하고 있습니다. 
        byte  byteNum  = 123;
        short shortNum = 12345;
        int   intNum   = 123456789;
        long  longNum  = 12345678910L;

        // 각 데이터 타입의 표현 범위에 벗어난 값을 할당하고 있어 에러가 발생합니다. 
        byte  byteNum  = 130;
        short shortNum = 123456;
        int   intNum   = 12345678910;

        // 숫자가 길면 언더바로 구분할 수 있습니다. 
        int   intNum   = 12_345_678_910;
        long  longNum  = 12_345_678_910L;
    

정수형의 오버플로우와 언더플로우

작성한 코드가 실행중일 때, 어떤 값이 실수로 작성한 코드에 의해
각 타입의 표현 범위를 넘어서는 경우가 발생할 수 있습니다.

  • 오버플로우
    • 자료형이 표현할 수 있는 범위 중 최대값 이상의 값을 표현한 경우 발생합니다.
    • 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환합니다.
    • 예 : 어떤 값이 byte형이고, byte형의 최대값인 127을 값으로 가지는 경우, 이 값에 1을 더하면 128이 되는게 아니라, 최소값인 -128이 됩니다.
  • 언더플로우
    • 자료형이 표현할 수 있는 범위 중 최소값 이하의 값을 표현한 경우 발생합니다.
    • 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환합니다.
    • 예 : 어떤 값이 byte형이고, byte 형의 최소값인 -128을 값으로 가지는 경우, 이 값에 1을 빼면 -129가 되는게 아니라, 최대값인 127이 됩니다.

데이터 다입의 크기와 표현 범위

데이터 타입의 크기와 정수형의 표현 범위 간에 무슨 관련이 있을까요? byte → short → int → long으로
갈수록 데이터 타입의 크기도 커지고 표현 범위도 커집니다. 즉, 데이터 타입의 크기가 데이터의 표현 범위를 결정합니다.

컴퓨터는 0과 1로 데이터를 표현합니다. 즉 0과 1로 이루어진 이진수로 데이터를 표현합니다.
이진수 한자리로는 0과 1만 표현할 수 있지만, 이진수를 두 자리, 세 자리로 늘리면 더 많은 데이터를 표현할 수 있습니다.

  • 이진수 한 자리 : 0, 1 → 2개
  • 이진수 두 자리 : 00, 01, 10, 11 → 4개
  • 이진수 세 자리 : 000, 001, 010, 011, 100, 101, 110, 111 → 8개

실수 타입

실수는 소수점을 가지는 값을 의미하며, float 형과 double 형으로 분류됩니다.

실수형 리터럴은 아래와 같이 사용할 수 있습니다. 이 때, double 형 리터럴에는 접미사 d 를 붙여도,
붙이지 않아도 되지만, float 형 리터럴에는 반드시 접미사 f 를 붙여주어야 합니다.

    
        // float형 리터럴을 float형 변수에 할당
        float num1 = 3.14f;

        // double형 리터럴을 double형 변수에 할당
        double num2 = 3.141592d;
        double num2 = 3.141592;
    

double형은 float형보다 정밀도가 더 높습니다.
따라서 double형은 float형보다 더 큰 실수를 저장할 수 있고 더 정확하게 저장할 수 있습니다.

실수형의 오버플로우와 언더플로우

실수형에서도 오버플로우와 언더플로우가 발생합니다. 다만, 오버플로우와 언더플로우가 발생했을 때의 결과가 다릅니다.

  • 오버플로우
    • 값이 음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때 발생하며, 이 때 값은 무한대가 됩니다.
  • 언더플로우
    • 값이 음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때 발생하며, 이 때 값은 0이 됩니다.

논리 타입

논리 타입의 종류는 boolean 형 한가지 뿐입니다. boolean 형은 참 또는 거짓을 저장할 수 있는 데이터 타입으로,
오직 true 혹은 false 를 값으로 가집니다.

단순히 참과 거짓을 표현하기 위해서는 1bit만 있으면 되지만, JVM이 다룰 수 있는 데이터의 최소 단위가
1byte 이기 때문에 boolean형은 1byte(8bit)의 크기를 가집니다.

문자 타입

문자 타입은 2byte 크기의 char 형 오직 하나만 있습니다.

문자 타입 변수를 선언하면 해당 변수에 오직 하나의 문자형 리터럴을 저장할 수 있습니다.

문자형 리터럴을 작성할 때에는 반드시 큰 따옴표가 아닌 작은 따옴표를 사용하여야 합니다.
큰 따옴표를 사용한 리터럴은 문자형이 아니라 문자열 리터럴로 인식되기 때문입니다.

    
        char letter1 = 'a';
        char letter2 = 'ab'; // 에러 : 단 하나의 문자만 할당할 수 있습니다. 
        char letter3 = "a"   // 에러 : 작은 따옴표를 사용해야 합니다. 
    

타입 변환

boolean을 제외한 기본 타입 7개는 서로 타입을 변활할 수 있습니다.

자동 타입 변환

아래 두 경우에는 타입이 자동으로 변환됩니다.

  • 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 (예 : byte → int)
  • 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 (예 : 정수 → 실수)
    아래 순서도의 화살표는 화살표를 기준으로 좌측의 타입이 우측의 타입으로 자동으로 변환될 수 있습니다.

byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)

위의 순서도에서 float은 4byte인데 int와 long보다 더 뒤쪽에 있습니다.
이는 float이 표현할 수 있는 값이 모든 정수형보다 더 정밀하기 때문입니다.

    
        // float이 long보다 정밀하므로, 자동으로 타입이 변환됩니다.
        long  longValue  = 12345L;
        float floatValue = longValue;

        System.out.println(floatValue); // 12345.0이 출력됩니다.
    

수동 타입 변환

차지하는 메모리 용량이 더 큰 타입에서 작은 타입으로는 자동으로 타입이 변환되지 않습니다.

수동으로 타입을 변환할 때에는 캐스팅 연산자 ()를 사용하며, 캐스팅 연산자의 안에 변환하고자 하는 타입을 적어주면 됩니다.

    
        //int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환합니다.
        int intValue = 128;
        byte byteValue = (byte)intValue;

        System.out.println(byteValue); // -128
    

byte형의 표현 범위는 -128 ~ 127이므로, 128을 byte형으로 변환하면 표현 범위를 벗어나게 되어 오버플로우가 발생합니다.
따라서 최종적으로 저장되는 값은 -128이 됩니다.

문자열

String 타입의 변수 선언과 할당

기본적으로 String 타입은 큰따옴표로 감싸진 문자열을 의미합니다.

    
        // 문자열 리터럴을 String 타입의 변수 name에 할당하는 방법
        String name1 = "Kim Coding";

        // String 클래스의 인스턴스를 생성하는 방법
        String name2 = new String("Kim Coding");
    
  • String 타입의 변수는 String 변수명; 으로 선언할 수 있다.
  • 선언한 변수에 문자열을 할당하는 방법은 두 가지가 있다.
    • 문자열 리터럴을 할당하는 방법 : 변수 = “문자열”;
    • String 클래스의 인스턴스를 생성하여 할당하는 방법 : 변수 = new String(”문자열”);

위의 예제에서 name1과 name2는 실제 문자열의 내용을 값으로 가지고 있는 것이 아니라,
문자열이 존재하는 메모리 공간 상의 주소값을 저장하고 있습니다.

그러나, 문자열을 출력해보면 주소값이 아니라 문자열의 내용이 출력됩니다.

    
        String name1 = "Kim Coding";
        String name2 = new String("Kim Coding");

        System.out.print(name1); // "Kim Coding"
        System.out.print(name2); // "Kim Coding"
    

이는 String 타입의 변수를 참조하면 String 클래스의 메서드인 toString()이 자동으로 호출되기 때문입니다.
toString() 이 자동으로 호출되면 String 타입의 변수가 저장하고 있는 주소값에 위치한 String 인스턴스의 내용을 문자열로 변환해줍니다.

    
        String name1 = "Kim Coding";
        String name2 = "Kim Coding";

        String name3 = new String("Kim Coding");
        String name4 = new String("Kim Coding");

        boolean comparison1 = name1 == "Kim Coding";      // true
        boolean comparison2 = name1 == name2;             // true
        boolean comparison3 = name1 == name3;             // false
        boolean comparison4 = name3 == name4;             // false
        boolean comparison5 = name1.equals("Kim Coding"); // true
        boolean comparison6 = name1.equals(name3);        // true
        boolean comparison7 = name3.equals(name4);        // true
    

등가 비교 연산자는 좌항 == 우항 의 형태로 사용할 수 있으며, 좌항의 값과 우항의 값이 일치하는지 검사하여
일치하면 true를, 일치하지 않으면 false를 반환합니다. 양쪽의 항에는 변수 또는 값 등이 위치할 수 있습니다.

equals() 메서드는 간단히 설명하면, . 앞의 변수가 저장하고 있는 문자열의 내용과 () 안의 문자열의 내요이 같은지
비교하여 같으면 true를 다르면 false를 반환해줍니다.

name1 와 name2 는 문자열 리터럴을 String 타입의 변수에 직접 할당하는 방법을 사용하고 있습니다.
이처럼 동일한 문자열 리터럴을 두 변수에 할당하는 경우, 두 변수는 같은 문자열의 참조값을 공유합니다.
즉, name1 과 name2 가 저장하게 되는 문자열의 주소값은 같습니다.

반면, name3 와 name4 는 String 클래스의 인스턴스를 생성해서 String 타입의 변수에 할당하는 방법
을 사옹하고 있습니다. 이처럼 String 클래스의 인스턴스를 생성하게 되면 문자열의 내용이 같을지라도,
별개의 인스턴스가 따로 생성됩니다.

따라서, name3 와 name4 가 할당받게 되는 인스턴스의 참조값은 서로 다릅니다.
즉, name3 와 name4 는 서로 다른 인스턴스의 주소값을 저장하고 있게 됩니다.

String 클래스의 메서드

charAt() 메서드

charAt() 메서드는 해당 문자열의 특정 인덱스에 해당하는 문자를 반환합니다.

    
        String str = new String("Java");
        System.out.println("문자열 : " + str); // "문자열 : Java"

        System.out.println(str.charAt(0)); // 'J'
        System.out.println(str.charAt(1)); // 'a'
        System.out.println(str.charAt(2)); // 'v'
        System.out.println(str.charAt(3)); // 'a'

        System.out.println("\ncharAt() 메서드 호출 후 문자열 : " + str);
    
compareTo() 메서드

compareTo() 메서드는 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교합니다.
문자열을 비교할 때 대소문자를 구분하여 비교합니다. 만약 두 문자열이 같아면 0을 반환하며,
해당 문자열이 인수로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환합니다.

    
        String str = new String("abcd");
        System.out.println("문자열 : " + str);
        System.out.println(str.compareTo("bcef"));
        System.out.println(str.compareTo("abcd") + "\n");
        System.out.println(str.compareTo("Abcd"));
        System.out.println(str.compareToIgnoreCase("Abcd"));
        System.out.println("compareTo() 메서드 호출 후 문자열 : " + str);
    
concat() 메서드

concat() 메서드는 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환합니다.

    
        String str = new String("Java");
        System.out.println("문자열 : " + str);
        System.out.println(str.concat("수업"));
        System.out.println("concat() 메서드 호출 후 문자열 : " + str);
    
indexOf() 메서드

indexOf() 메서드는 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환합니다.

    
        String str = new String("Oracle Java");
        System.out.println("문자열 : " + str);
        System.out.println(str.indexOf('o'));
        System.out.println(str.indexOf('a'));
        System.out.println(str.indexOf("Java"));
        System.out.println("indexOf() 메서드 호출 후 원본 문자열 : " + str);
    
trim() 메서드

trim() 메서드는 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거해 줍니다.

    
        String str = new String(" Java     ");
        System.out.println("문자열 : " + str);
        System.out.println(str + '|');
        System.out.println(str.trim() + '|');
        System.out.println("trim() 메서드 호출 후 문자열 : " + str);
    
toLowerCase()와 toUpperCase() 메서드

toLowerCase() 메서드는 해당 문자열의 모든 문자를 소문자로 변환시켜 줍니다. 또한,
toUpperCase() 메서드는 해당 문자열의 모든 문자를 대문자로 변환시켜 줍니다.

    
        String str = new String("Java");
        System.out.println("문자열 : " + str);
        System.out.println(str.toLowerCase());
        System.out.println(str.toUpperCase());
        System.out.println("두 메서드 호출 후 문자열 : " + str);
    

콘솔 입출력(I/O)

콘솔에 값을 출력하기 위해서는 System.out.print(), System.out.println(), System.out.printf() 메서드를 활용합니다.

출력하기 : System.out.print()

System.out.print() 메서드는 소괄호 안의 내용을 단순히 출력하기만 하고, 줄바꿈을 하지 않습니다.

    
        System.out.print("Hello JAVA");
        System.out.print("Kim" + "Coding");
        System.out.print(3+6);
        System.out.print(2022 + "year");
    
출력하고 줄 바꾸기 : System.out.println()

System.out.println() 메서드는 소괄호 안의 내용을 콘솔에 출력하고 줄바꿈을 합니다. print뒤에 붙은 ln은 line을 의미합니다.

    
        System.out.println("Hello JAVA");
        System.out.println("Kim" + "Coding");
        System.out.println(3+6);
        System.out.println(2022 + "year");
    
형식대로 출력하기 System.out.printf()

System.out.printf()는 지시자(specifier, 형식 지정자)를 이용해 변수의 값을 여러 형식으로 출력해주는 메서드입니다.

지시자 출력 포맷
%b 불리언
%d 10진수
%o 8진수
%x, %X 16진수
%c 문자
%s 문자열
%n 줄바꿈
    
        System.out.printf("%s%n", "Hello JAVA"); // 줄바꿈이 됩니다.
        System.out.printf("%s%n", "Kim" + "Coding");
        System.out.printf("%d%n", 3+6); 
        System.out.printf("지금은 %s입니다", 2022 + "year"); // 자동 타입 변환이 일어납니다.
        System.out.printf("나는 %c%s입니다", '김', "코딩"); //여러 개의 인자를 넣을 수 있습니다.
    

콘솔 입력

데이터를 입력받는 코드는 아래와 같습니다.

    
        import java.util.Scanner;                 // Scanner 클래스를 가져옵니다.

        Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
        String inputValue = scanner.nextLine();   // 입력한 내용이 inputValue에 저장됩니다.

        System.out.println(inputValue);           // 입력한 문자열이 출력됩니다.
    
import java.util.Scanner;

데이터를 입력받는 기능을 작은 프로그램으로 만들어둔 것이 Scanner입니다.
이 Scanner은 java.util 이라는 위치에 저장되어져 있습니다.
import java.util.Scanner;는 java.util에 있는 Scanner를 이 소스 코드로 불러와라’라는 의미가 됩니다.

Scanner scanner = new Scanner(System.in);

불러온 Scanner 클래스를 new 연산자를 통해 인스턴스를 생성하고,
생성된 인스턴스를 변수 scanner에 할당하는 코드입니다.

String inputValue = scanner.nextLine();

Scanner 클래스를 인스턴스화한 scanner에는 nextLine()이라는 메서드가 존재합니다.
이 메서드는 콘솔을 통해 문자열 데이터를 입력 받는 기능을 수행합니다.
즉 scanner.nextLine()은 문자열을 입력받기 위한 코드이며, 입력받은 문자열은 inputValue라는 변수에 할당되어 저장됩니다.

카테고리: ,

업데이트:

댓글남기기