-
Java 항해일지 - 2. 자바 데이터 타입, 변수 그리고 배열공부일기/자바 스터디 2020. 11. 18. 16:44
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입은 총 8가지이다.
종류 타입 값의 범위 기본 값 논리형 boolean true, false false 정수형 byte -128 ~ 127 0 short -32,768 ~ 32,767 0 int(기본) -2,147,483,648 ~ 2,147,483,647 0 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0L char 0 ~ 65,535 '\u0000' 실수형 float (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 0.0F double(기본) (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 0.0 - 프리미티브 타입과 레퍼런스 타입
- 메모리 공간에 직접 데이터를 담는지? 다른 곳을 참조하는 주소 값을 담는지로 구분.
- - 프리미티브 타입 : 메모리에 직접 데이터를 담는 타입. 숫자(Number), 불린(Boolean)
- 정수 타입: "byte", "short", "int", "long", "char"
- 부동 소수점 타입: "float", "double"
- 불리언 타입: "True". "False"
- 메모리 공간에 직접 데이터를 담는지? 다른 곳을 참조하는 주소 값을 담는지로 구분.
- - 레퍼런스 타입 : 다른 것을 참조하기 위한 주소 값이 들어가 있음.
- 클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입
- 리터럴
- 리터럴이란? 변수 및 상수에 저장되는 값 자체
- 변수와 상수는 메모리에 할당된 공간이라면 리터럴은 이 공간에 저장되는 값이라고 할 수 있다.
- 종류: 정수(int), 실수(double), 문자(char), 논리, 문자열(String) 리터럴
- 변수 선언 및 초기화하는 방법
- 변수 선언: 내가 사용할 데이터를 저장하기 위해 메모리를 잡는 행위
- 변수 초기화: 변수에 처음 값을 대입하는 것
- 변수 선언: 내가 사용할 데이터를 저장하기 위해 메모리를 잡는 행위
// 변수 선언 자료형 변수이름; // 변수 초기화 변수이름 = 리터럴; // 선언된 변수에 값을 대입하거나 자료형 변수이름 = 리터럴; // 선언과 동시에 초기화
파이썬을 공부하다 자바를 처음 공부하니 변수 선언하는게 좀 낯설고 불편하다.
- 변수의 스코프와 라이프타임
- 변수의 스코프: 프로그램상에서 사용되는 변수들의 사용 가능한 범위/ 변수가 존재할 수 있는 영역
{ } 로 한 영역이 생성되면 해당 영역에 관한 스코프가 형성된다. - 클래스 영역에서 선언한 변수를 전역 변수(global variable)라고 한다. 클래스 내의 모든 곳에서 사용 가능하다.
클래스 안의 메소드에서 선언한 변수를 지역 변수(local variable)라고 한다. 메소드 안에서만 사용 가능하다.
메인 메소드에서는 static 타입(한 번 할당되면 프로그램 종료시까지 회수되지 않고 메모리에 할당)이 아니면 바로 호출할 수 없다고 한다. - 라이프타임: 변수가 메모리에 할당된 시점부터 반환되는 시점까지의 시간. 프로그램이 함수 내에 진입할 때 메모리에 할당되고, 빠져나갈 때 해제가 일어난다.
- 변수의 스코프: 프로그램상에서 사용되는 변수들의 사용 가능한 범위/ 변수가 존재할 수 있는 영역
public class ScopeTest { // Class 영역 String sClassVal = "Class Value"; // Class 영역에 선언한 변수(Global Variable) static String sStaticVal = "Static Value"; // static은 클래스 내에서 공유되어 아무데서나 사용 가능 public void method1() { // 메소드 영역 String sMethod1Val = "method1 Value"; // Method 영역에 선언한 변수(Local Variable) System.out.println(sClassVal); // Class 영역 안에 있는 메소드에서는 클래스 변수 사용 가능 } // 메소드 영역 public static void main(String[] args) { // 메인 메소드는 static 변수가 아닐 경우 객체화해야 클래스 변수 사용 가능 System.out.println(sStaticVal); ScopeTest s = new ScopeTest(); System.out.println(s.sClassVal); } } // Class 영역 끝
예제 코드 출처: wakestand.tistory.com/179
실행시 순서대로 2, 8 출력. 이해하는데 많은 도움이 되어 그대로 가져왔다.
- 타입 변환, 캐스팅 그리고 타입 프로모션
타입캐스팅이란?
- 간단하게 말해서 자료형을 바꾸는 행위. 타입을 바꿈으로써 변환과정에서 데이터의 손실이나 변형이 올 수 있다. (강제 형변환)
타입 프로모션이란?
- 작은 메모리 크기의 데이터 타입을 큰 메모리 크기의 데이터 타입으로 변환하는 행위 (자동 형변환)
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
long에서 float으로 가는 이유는 표현할 수 있는 수가 float이 더 많기 때문이다.
// 강제 형변환 예시 int intValue = 1; byte byteValue = (byte) intValue; int intValue = 1; short shortValue = (short) intValue; // 변환하고자 하는 값이 데이터 타입의 범위를 벗어나게 되면 엉뚱한 정수 값이 나오므로 // 특정 변수의 최대 값이 얼마인지 잘 파악하고 사용해야 한다.
- 1차 및 2차 배열 선언하기
- 1차원 배열
배열에 들어가는 값들 타입 뒤에 []를 붙여주면 된다. 선언한 배열은 [] 앞의 타입 값만 저장할 수 있다.
아래와 같은 예시의 경우 배열타입은 char[], 배열명은 charArray, 10개의 값을 가질 수 있는 1차원 배열이다.
값을 집어 넣을 경우 charArray[0] = 0, charArray[1] = 1 .. 와 같이 인덱스 값으로 집어넣을 수 있다.
But 반복문을 이용할 경우 편리함 !
자바는 반복문도 다르기에 예시에 추가해봤다.char[] charArr = new char[10]; for(int i = 0; i< 10; i++){ charArr[i] = i; } // 0부터 9까지 숫자를 저장하는 코드. // 위와 같은 코드는 배열의 길이가 달라지게 되면 모든 반복문의 코드를 수정해야 한다. // 따라서 유지보수를 위해 아래와 같은 반복문을 사용한다. char[] charArr = new char[10]; for(int i=0; i < charArr.length, i++){ charArr[i] = i; }
- 2차원 배열
int[][] Arr = new int[2][3]; // 2행 3열의 표를 생각하면 된다. // 가변크기의 2차원 배열도 생성 가능하다 int[][] Arr2 = new int[3][]; Arr2[0] = new int[1]; Arr2[1] = new int[2]; Arr2[2] = new int[3]; int[][] Arr2 = {{1}, {2,3}, {4,5,6}}; // Arr2의 배열에 값을 선언
- 타입 추론, var
타입추론
타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능.
var
Java 10부터 지원. 지역변수를 선언할 때 초기값을 통하여 데이터 타입을 추론한다.
코드 양을 줄일 수 있고, 가독성을 높인다.
var i = 1; // int 추론 var str = "Hello World" // String으로 추론 var list = new ArrayList<String>(); // ArrayList<String>으로 추론
참고.
programmers.co.kr/learn/courses/5/lessons/135
'공부일기 > 자바 스터디' 카테고리의 다른 글
Java 항해일지 - 6. 상속 (0) 2020.12.24 Java 항해일지 - 5. 클래스 (0) 2020.12.23 Java 항해일지 - 4. 제어문 및 과제 (0) 2020.12.12 Java 항해일지 - 3. 연산자 (0) 2020.11.25 Java 항해일지 - 1. JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) 2020.11.17 - 프리미티브 타입 종류와 값의 범위 그리고 기본 값