본문 바로가기
포스코x코딩온

[포스코x코딩온] 풀스택 부트캠프 17주차 정리 Java

by 김선지 2024. 2. 13.

드디어 자바 공부한다.

 

자바 프로그램의 구조

Project - package - class - 순으로 짜여져 있음.

그중에서도 main method 안에서 실행을 시작한다.

 


 

원시 데이터타입

boolean, char, 

 

byte - 8비트 크기의 데이터 저장 가능.  0,1로 표현할 수 있는 데이터 칸이 8개 있으니까 2^8개의 데이터를 표현할 수 있다.

(-2^7 ~ 2^7 -1) => 0도 포함이니까 개수로 하면 2^8개

 

short - 16비트 크기의 데이터 저장 가능. 위와 같은 이우로 2^16개 데이터 표현 가능.

(-2^15 ~ 2^15 -1)

 

int - 32비트

long - 64비트

 

- 정확한 계산에는 어울리지 않으므로 bigDecimal써야함.

 

why? 

  1. 컴퓨터는 2진법을 사용한다.
  2. 고로 소수의 경우 떨어지지 않는 경우에는 마지막 자리수에서 반올림을 해준다.
  3. 0.1, 0.2, 0.3은 모두 2진법 표현시 무한소수
  4. 0.1과 0.2를 변환하면서 생긴 오차 때문에,
      0.1과 0.2를 각각 2진수로 변환하고 합한 값과 0.3을 2진수로 변환한 값 간에 오차가 생긴다.

  5. (0.1 + 0.2 == 0.3) // false

 

float - 소수점 표현, 3.4×10^38 ~ 3.4×10^38

double - 1.7×10^308 ~ 1.7×10^308

 

참조 데이터 타입

원시값을 제외한 모든 타입이다.

String, list, ArrayList 등이 있다.

 

그래서 String의 경우에는 equal 메소드를 이용해 주어야 한다.

  // *문자열 리터럴의 경우, Java에서 특별 취급
        // 동일한 문자열 리터럴이 사용되는 경우, Java 컴파일러가 문자열 풀(String pool)이라는 영역에 해당 문자열을 저장
        // 문자열 리터럴이란 코드에서 하드코딩된 문자열
        String str1 = "hello";
        String str2 = "hello";
        System.out.println("Str1 == Str2: " + (str1 == str2)); // true
        System.out.println("str1.equals(str2): " + str1.equals(str2)); //true
        
        // 문자열을 동적으로 할당하는 경우, new String(...) 을 이용해서 새로운 문자열 객체를 생성
        // 이럴 경우에는 서로 다른 객체를 가리키게 됨
        // 물론 똑같은 객체 할당인 Integer도 다 똑같은 참조값이다.
        Integer a = new Integer(30);
        Integer b = new Integer(30); // new Integer는 deprecated됐다고 intellij가 말해준다. 쓰지 말자.
        String j = new String("hello"); // 이것도 불필요하다고 말해준다.
        String k = new String("hello");
        System.out.println("J == K : " + (j == k)); // false
        System.out.println("J == K with equals : " + j.equals(k));
        System.out.println("thisis :" + (a == b)); // false
        System.out.println("thisis :" + (a.equals(b))); // true
        
        // value of로 boxing하는 경우
        // value of는 해당 값이 없으면 new로 만들고, 있으면 그 참조값을 이용한다.
        Integer c = Integer.valueOf(30);
        Integer d = Integer.valueOf(30);
        System.out.println("c == d : " + (c==d)); // true

Inhanced switch문

System.out.println("이름을 입력하세요");
        String name = scanner.next();
        String result = switch (name) {
            case "홍길동" -> "남자";
            case "성춘향" -> "여자";
            default -> "모르겠어요";
        };
        System.out.println(result);
        scanner.close();

 

기존 switch문에서는 적용되지 않지만 (String은 참조값.)

Inhanced switch문에서는 적용된다.

다음 chat gpt 참조

물론 이전 버전에서는 String에 대한 비교를 수행하려면 if statement와 equals를 사용해야 한다.