Post

[Java] 데이터 타입, 입출력, 형변환

java

전체적으로 C언어와 비슷한 점이 많다. 메모리를 알아서 할당해준다는 점에서 C보다는 편하지만, 데이터 타입을 일일이 명시해줘야 한다는 점 등 파이썬보다는 번거로운 면이 있다. 끝에;를 넣어줘야하고 삼항 연산자와 do-while 문을 지원하는 등 C언어와는 비슷하고, 파이썬과는 다르다.

데이터 타입

  • 문자열(String)이 대문자로 시작한다. 문자열을 보는 관점이 파이썬과는 달라서이다.
  • 기본 데이터 타입과 참조 데이터 타입이 있는데, 문자열은 참조 데이터타입에 해당한다.
  • Stringchar 배열을 참조한다.
  • char을 사용할 때는 꼭 작은 따옴표'를, String에서는 꼭 큰 따옴표"를 사용해야 한다.
  • charString에 넣어서 쓸 수 있기 때문에 String, "만 써도 무방하다. 자동 형변환도 일어난다.

기본형과 참조형 데이터타입

기본형(Primitive Type)

  • int, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
  • 기본형은 사이즈가 명확하게 정해져있다. (int 4byte, long 8byte, double 8byte)

참조형(Refernce Type)

  • 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입
  • 동적으로 사이즈를 변경할 수 있다.
  • 선언하는 변수가 null값이 될 수 있는 경우 int 말고 Integer로 선언한다. (큐/스택에서 peek, poll)

데이터 출력

  • System.out.println()는 파이썬에서의 print()와 같고, 출력 후 줄바꿈\n을 포함한다.
  • System.out.print()는 출력 후 줄바꿈을 하지 않는다.

데이터 입력

  • System.in으로 사용자 입력을 받는 것이 복잡하고 어렵기 때문에, Scanner 클래스를 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Scanner;

public class ScannerEx {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("나이 입력: ");
        int age = input.nextInt();
        System.out.print("이름 입력: ");
        String name = input.nextLine();
    }
}
  • nextInt() 메서드로 정수를 읽은 후 nextLine() 메서드로 문자열을 읽으려고 할 때, 이전의 개행 문자(‘\n’)이 남아 있으면 예상치 못한 동작이 발생할 수 있다. 따라서 이를 방지하기 위해 nextLine() 메서드를 호출하여 개행 문자를 제거해 준다.
1
2
int age = input.nextInt(); // nextInt()가 \n 앞까지만 읽어서 \n이 남게된다.
input.nextLine(); // 남은 \n을 읽어주고 버린다.

문자열 비교

  • String, ArrayList, HashMap과 같은 클래스들은 모두 객체(Object)를 참조하는 참조 데이터 타입이다.
  • 문자열과 같은 객체의 내용을 비교할 때는 ==이 아닌 equals() 메소드를 사용해야 한다.
  • str1.equals(str2) → 결과는 boolean 타입이다.

형변환

  • intlongdouble
  • 작은 범위에서 큰 범위로는 대입할 수 있으며, 자동 형변환이 일어난다.
  • 큰 범위에서 작은 범위의 대입은 소수점 버림, 오버플로우의 문제가 발생할 수 있다.
  • 같은 타입끼리의 계산은 그 타입의 결과를 낸다. (3/2 → 1)
  • 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다.
1
2
3
4
5
6
7
8
9
10
11
12
13
Scanner scanner = new Scanner(System.in);

int sum = 0;
int count = 0;
int input = 0;

System.out.println("숫자 입력. 중단하려면 -1 입력: ");
while ((input = scanner.nextInt()) != -1) {
    sum += input;
    count++;
}

double average = (double) sum / count;

String -> int 변환

1
2
String numberStr = "123";
int number = Integer.parseInt(numberStr);

int -> String 변환

1
2
int number = 123;
String numberStr = String.valueOf(number);

(자료형).valueOf(값)

  • 기본 자료형의 값을 해당 래퍼 클래스 타입으로 변환
    • Byte.valueOf(byte b)
    • Short.valueOf(short s)
    • Integer.valueOf(int i)
    • Long.valueOf(long l)
    • Float.valueOf(float f)
    • Double.valueOf(double d)
    • Boolean.valueOf(boolean b)
    • Character.valueOf(char c)

Java14 Switch문

1
2
3
4
5
6
int coupon = switch (grade) {
            case 1 -> 1000;
            case 2 -> 2000;
            case 3 -> 3000;
            default -> 500;
        };
  • 이런 기능도 지원한다.



Reference - 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

This post is licensed under CC BY 4.0 by the author.