korean IT student

[Java-Live-Study] 2주차 - 자바 데이터 타입, 변수 그리고 배열 본문

back-end/JAVA

[Java-Live-Study] 2주차 - 자바 데이터 타입, 변수 그리고 배열

현창이 2021. 8. 4. 16:24

목표

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

학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

 

1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값

 

  타입 기본값 값의 범위 값의 크기
정수형 byte 0 -128 ~ 127 1byte
short 0 -32,768 ~ 32,767 2byte
int 0  -2,147,483,648   
    ~ 2,147,483,647
4byte
long 0L 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8byte
실수형 float 0.0f (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 4byte
double 0.0 (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 8byte
문자형 char '\u0000' 0 ~ 65,535 2byte
논리형 boolean FALSE false, ture 1byte

 

 

2. 프리미티브 타입과 레퍼런스 타입

 윈시타입(Primitive Type)

  - primitive type은 실제 데이터 값을 저장하는 타입

  - primitive type 값은 기본값이 있기 때문에 null이 존재 하지 않는다. 

  - 실제 값을 저장하는 공간으로 stack 메모리에 저장된다.

  - 만약 값의 범위를 벗어나면 컴파일 에러가 발생한다.

 참조타입(Reference Type)

  - class, interface, enum, array, String type

  - 원시타입을 제외한 모든 타입은 참조형타입

  - 빈 객체를 의미하는 null 존재

  - 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 Heap 메모리에 저장

 

int a = 3;

int b = 5;

Car c = new Car("KIA", 30);

 

위의 코드를 메모리에 저장되는 모습을 이미지화 시켜보자면 다음과 같다

3. 리터럴

  • 데이터 그 자체를 의미한다. 변수에 넣는 변하지 않는 데이터를 의미한다.
  • 프로그램에서 직접 표현한 값이다.
  • 소스 코드의 고정된 값을 대표하는 용어이다.
  • 정수, 실수, 문자, 논리, 문자열 리터럴이 존재한다.

4. 변수 선언 및 초기화하는 방법

   자바의 변수는 다음과 같은 종류로 구분할 수 있습니다.

  • 인스턴스 변수: 클래스 선언시 static 키워드 없이 선언된 필드입니다. 이 필드는 인스턴스 별로 다른 값을 가질 수 있기 떄문에, 인스턴스 변수라고 불립니다.
  • 클래스 변수: 클래스 선언시 static 키워드와 함께 선언된 필드입니다. 이 필드는 모든 인스턴스들이 공유하는 값입니다. 클래스 명으로 접근이 가능하고, 클래스 하나에 한 값이기 때문에 클래스 변수라고 불립니다.
  • 로컬 변수: 메서드 선언 사이에 등장하는 변수로 다른 클래스에서 접근할 수 없는 변수입니다. 메서드 영역에서만 임시로 사용되는 변수입니다.
  • 매개 변수: 매개 변수는 메서드의 인자로 전달되는 변수를 의미합니다.

인스턴스 변수와 클래스 변수는 멤버 변수라고 통칭하기도 합니다. 멤버 변수는 꼭 초기화를 해주지 않더라도 기본값으로 초기화되지만, 로컬 변수는 반드시 초기화를 해주어야 합니다.

5. 변수의 스코프와 라이프타임

   프로그램에서 사용된 변수들은 사용 가능한 범위를 가진다. 그 범위를 변수의 스코프라고 한다.

   변수가 선언된 블럭이 그 변수의 사용 범위이다.

 

 

변수 타입 스코프 라이프타임
인스턴스 변수 (static 블록과 static 메서드를 제외한) 클래스 전체 객체가 생성되고 객체가 메모리에 살아있는 동안
클래스 변수 클래스 전체 클래스가 초기화되고 프로그램이 끝날 때 까지
로컬 변수 변수가 선언된 블록내부 변수 선언 이후 부터 블록을 벗어날 때까지

출처 : https://www.tutorialspoint.com/scope-and-lifetime-of-variables-in-java

 

6. 타입 변환, 캐스팅 그리고 타입 프로모션

  타입변환

    - 하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환

    - 묵시적 타입 변환(자동 타입 변환), 명시적 타입 변환(강제 타입 변환) 두 가지가 있다.

 

  묵시적 타입 변환(자동 타입 변환)

num1의 결과는 10.0 : double 변수에 int 데이터를 대입함으로 , int 데이터가 double로 자동 타입 변환된다.

num2의 결과는 int 가 표현할 수 있는 범위보다 더 큰 double를 넣으므로 데이터 손실이 발생해서 컴파일 오류가 발생

num3의 결과는 float 와 double 데이터의 산술 연산을 수행한다. float 데이터가 double로 자동 타입 변환된다.

 

  명시적 타입 변환(강제 타입 변환)

result1의 결과는 0.0 : 나눗셈 연산 결과로는 int 형인 0이 반환되지만 double 변수에 결과가 대입될때 0.0으로 자동 변환된다.

result2의 결과는 0.25 : 피연산자 중 하나의 타입이 double 형이 되면, 나눗셈 연산을 위해 나머지 하나의 피 연산자도 double형으로 자동으로 타입 변환이 된다. 

 

7. 1차 및 2차 배열 선언하기

1차 배열 : 타입[] 배열이름 = new 타입[배열길이]; 로 배열 선언과 생성을 동시에 할 수 있다.

배열 길이를 초과하는 인덱스를 사용하면 ArrayIndexOutOfBounds 예외가 발생한다.

길이가 3인 int형 배열 선언 및 생성하고 0번째에는 10을, 1번째에는 100을, 2번째에는 1000을 초기화한다. 그리고 출력한다.

 

2차 배열 : 타입[][] 배열이름 = new 타입[배열길이][배열길이]; 로 배열 선언과 생성을 동시에 할 수 있다.

2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이다. 

int[][] arr = new int[2][3];

 


8. 타입 추론, var

  타입 추론 

   - 정적 타이핑을 지원하는 언어에서, 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능, 반복되는 타입 선언을 줄여주고, 코드의 가독성을 높여준다.

  - java 10에서 타입 추론을 지원하는 var 키워드가 추가되었다. 

참고 : https://www.baeldung.com/java-10-local-variable-type-inference

 

 

   

 

 

<참고>

https://roeldowney.tistory.com/466

https://velog.io/@dion/%EB%B0%B1%EA%B8%B0%EC%84%A0%EB%8B%98-%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%8A%A4%ED%84%B0%EB%94%94-2%EC%A3%BC%EC%B0%A8-%EC%9E%90%EB%B0%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EB%B3%80%EC%88%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%B0%B0%EC%97%B4

Comments