자바의 정석 (2) 자바 데이터 타입, 변수 그리고 배열

Lee DoYeon·2024년 10월 6일
0

자바의 정석

목록 보기
2/3
post-thumbnail

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
    • data
      • 문자 : “A”, “1”, “ABC”
      • 숫자
        • 정수 : 0, 5, 123
        • 실수 : 3.14, -30*10^7
          • 실수형은 정수형과 저장 방식이 다르기 때문에 같은 크기라도 훨씬 큰 값을 표현할 수 있지만, 오차가 발생할 수 있다.
          • 그래서 정밀도(precision)가 중요한데, 정밀도가 높을수록 오차의 범위가 줄어든다.
          • float의 정밀도 7자리 1,000,000
          • doublle의 정밀도 15자리 100,000,000,000,000
    • 프리미티브(기본) 타입은 총 8가지의 타입으로 나누어 진다.
    • Boolean, char, shor, byte, int, long, float, double
    • boolean : 1byte == 8bit / flase
    • char : 2byte == 16bit / \u000
    • short : 1byte == 8bit / 0
    • int : 4byte == 32bit / 0
    • long : 8byte == 64bit / 0
    • float : 4byte == 32bit / 0.0F
    • double : 8byte == 64bit / 0.0
  • 프리미티브 타입과 레퍼런스 타입
    • 자료형은 프리미티브 타입과 레퍼런스 타입으로 나뉜다.
    • 프리미티브 타입은 위에서 볼 수 있듯이 논리형, 문자형, 정수형, 실수형이 있다.
    • 래퍼런스 타입은 기본적으로 Java.lang.Object를 상송받을 경우 참조형이 된다. 즉, 기본형을 제외하고는 참조형이라고 생각해도 된다.
    • 기본형은 Runtime Data Area 영역 내부 Stack에 실제 값들이 저장되고, 참조형은 실제 인스턴스는 Heap 내부에 생성되고, 생성된 Heap 주소를 Stack에서 저장하고 있다. (Heap은 GC의 대상이 된다)
      • 그렇다면 stack은 왜 GC의 대상이 아닐까?
        그건 쉽게 생각해 볼 수 있다. stack에서 실행되면 사라지기 때문
  • 리터럴
    • 그 자체로 값을 의미하는 것. image.png
    • 2020, 123, 3.14, “ABC”와 같은 값들을 리터럴이라고 하는데 본래 이러한 값들은 상수라 불러야 하지만, 프로그래밍에서 상수는 ‘값을 한 번 저장하면 변경할 수 없는 저장공간’으로 정의했기 때문에 이와 구분하기 위해 그 자체로 값을 의미하는 명칭은 리터럴로 정의했다.
  • 변수 선언 및 초기화하는 방법
    public class Test {
    	
    	int tony = "26"; // 인스턴스 변수는 heap 영역에 생성
    	
    	
    	public void hello(){
    		int captain = "36"; // 지역 변수는 stack 영역에 생성
    	}
    }
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
    • 타입 변환 : 변수 또는 상수의 타입을 다른 타입을 변환하는 것
      • 서로 다른 타입간의 연산을 수행해야 하는 경우가 존재. 이때 연산을 수행하기 전 서로의 타입을 일치시켜야 됨. 이렇게 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 형변환이라고 한다.

        double value = 123.456;
        int score = (int)value;
        System.out.println(score); // 123
      • 기본형은 boolean을 제외한 나머지 타입은 서로 형 변환이 가능하다. 하지만 값의 범위가 다르므로 형변환을 통해 값의 범위 차이 만큼 데이터의 손실이 발생할 수 있다.

  • 1차 및 2차 배열 선언하기
    • 배열의 선언
      int[] score;
      String[] name;
    • 배열의 생성
      int[] number = new int [10];
      • 이때 배열의 길이는 최초 생성 시 선언한 길이에서 정적이므로 길이의 변경을 원할 때는 새로운 배열을 생성해야 한다.
  • 타입 추론, var
    • 자바 컴파일러에서 타입을 추론하는 것을 Type Inference 이라 한다.
      이 타입 추론을 하기 위해 메서드 호출과 호출할 때 사용하는 인수(혹 인수들)를 결정하기 위한 선언부를 살펴본다. 추론 알고리즘을 통해 인수 타입을 결정하고 가능하다면 결과가 할당되는 타입이나 반환 타입도 추론한다.
      ```java
      static <T> T pick(T a1, T a2) { return a2; }
      public static void main(String[] args) {
      		Serializable d = pick("d", new ArrayList<String());
      }
      ```
profile
I can do this all day

0개의 댓글