리터럴 (Literal)
- 리터럴은 데이터 그 자체. 변수 및 상수에 넣는 변하지 않는 데이터를 의미한다.
- 변수나 상수는 메모리에 할당된 공간, 리터럴은 해당 할당된 공간에 저장되는 값이라고 할 수 있다.
// 1.문자
//- 홑따옴표 (작은따옴표) *큰 따옴표 사용 가능
System.out.println('A');
System.out.println('한');
// 2. 문자열
//- 쌍따옴표 (큰따옴표) * 작은 따옴표 사용 불가
System.out.println("Hello");
System.out.println("안녕");
// 3. 숫자
//- 그냥 입력한다.
//- 0으로 시작하면 다른 숫자가 되니 주의한다.
System.out.println(100);
System.out.println(1.23456789);
// 4. 논리값
//- 소문자로 그냥 입력한다.
System.out.println(false);
System.out.println(true);
// 5. 이스케이프 문자
// \n : 줄 바꿈
// \t : 탭 (줄 맞춤)
// \" : 더블쿼터 쌍따옴표
// \' : 쿼터 홑따옴표
System.out.println("Hello\nJava");
System.out.println("Hello\tJava");
System.out.println("Hi\tJava");
System.out.println("\"Hello\" Java");
System.out.println("\'Hello\' Java");
변수 (Variables)
- 데이터를 저장하는 메모리 공간(장소)이다.
- 변수는 선언하고 사용한다.
1) 변수의 선언은 어디서든 할 수 있다.
2) 변수의 스코프 타임: 변수에 접근할 수 있는 영역. 변수가 선언된 코드블록({})에서만 유효하다. - 변수명 규칙
1) 숫자, 영문, 한글, 밑줄(_)을 섞어서 사용할 수 있다.
2) 한글을 사용하지는 않는다.
3) 첫 글자는 숫자일 수 없다. + 숫자로만 구성할 수 없다.
4) camel case 규칙을 따른다. (ex: yourHome, myAge) - 오버플로우 : 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상
예) int 형의 최대 값(2147483647)을 초과하는 숫자가 나타나게 되는 경우 오버플로우로 인해 데이터가 -2147483648(int형의 최소 값)이 된다.
이 경우 시스템에러가 나진 않지마 값이 완전히 달라지기 때문에 출력된 값이 이상한 경우 오버플로우를 의심해보는 것이 좋다. (알고리즘 문제에서 자주 일어남) - 언더플로우 : 오버플로우의 반대 개념. 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상
예) int 형의 최소 값(-2147483648)보다 작은 숫자를 입력하는 경우 언더플로우로 인해 데이터가 2147483647(int형의 최대값)이 된다.
int myAge = 29; // 정수형 변수 myAge의 선언과 29라는 값을 초기화
int a; // 정수형 변수 a 선언.
System.out.println(myAge); // 29가 출력
System.out.println(a); // 초기화가 이뤄지지 않은 상태라 오류가 남. 값을 넣어줘야 a사용 가능함
- 변수의 스코프와 라이프타임
1) Instance Variables: 클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수
scope: static 메소드를 제외한 클래스 전체
lifetime: 객체가 메모리에서 활용될 때까지
2) Class Variables: 클래스 내부와 클래스 외부의 블록({})에서 선언되고 static으로 표시된 변수
scope: 클래스 모든 영역
lifetime: 프로그램이 끝날 때까지 혹은 클래스가 메모리에 로드되는 동안
3) Local Variables: 인스턴스 및 클래스 변수가 아닌 모든 변수
scope: 선언 된 블록({}) 내부
lifetime: 컨트롤이 선언 된 블록을 떠날 때까지
상수 (Constant)
- 메인함수(public static void man) 바깥에 final로 선언 한다.
- 한번 선언이 된다면 절대로 바뀔 수 없다.
- 상수형에 넣는 데이터는 숫자 뿐만 아니라 클래스나 구조체 같이 기본형에서 파생된 객체나 유도형 같은 데이터도 넣을 수 있다.
- 상수명 규칙
1) 모두 대문자를 사용한다.
2) 단어 사이는 언더바로 연결한다. - 상수형도 데이터 선언시 초기화와 데이터 선언 먼저 해놓고 생성자에서 데이터를 초기화하는 것 모두 가능하다.
객체마다 상수 값이 다를 때: 생성자에서 데이터 초기화
객체마다 상수 값이 같을 때: 선언과 동시에 데이터 초기화
public class Ex1_variable {
final static double PI = 3.141592; //상수 더블형 PI 선언
public static void main(String[] args) {
int myAge = 29;
int r;
r=30;
System.out.println(r);
System.out.println(myAge);
System.out.println("myAge");
System.out.println(r*r*PI);
}
}
데이터 타입
기본자료형 (primitive)
- 정수형
1) byte: 1byte -> 파일 처리 용으로 byte[] 형태로 사용한다.
범위: -128 ~ 127
기본값: 0
2) short: 2byte -> 자주 안씀.
범위: -32,768 ~ 32,767
기본값: 0
3) int: 4byte -> 주로 사용한다. *주로 사용
범위: -2,147,483,648 ~ 2,147,483,647
기본값: 0
4) long: 8byte -> int 로 부족할 때 사용한다. *주로 사용
범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
기본값: 0L - 실수형
1) float: 4byte -> 자주 안씀.
범위: +-1.40129846432481707e-45 ~ 3.40282346638528860e+38
기본값: 0.0f
2) double: 8byte -> 주로 사용한다.
범위: +-4.94065645841246544e-324d ~ 1.79769313486231570e+308d
기본값: 0.0d - 문자형
1) char: 2byte -> 전 세계 모든 문자의 표현이 가능하다.
범위: 모든 유니코드 문자
기본값: 0 - 논리형
boolean: true 또는 false 저장용이다.
기본값: false
참조자료형 (Reference type)
- 값이 아닌 값이 저장된 메모리 주소를 저장하는 자료형이다.
- 메모리의 주소란?
1) 메모리 고유의 번지수이다.
2) 1바이트마다 고유의 번호가 16진수(0x로 시작하는 값)로 부여되어 있다. - 기본자료형이 아닌 모든 자료형은 참조자료형이다.
- 참조자료형의 대표 String
1) String a = "Hello"; // Hello 가 저장된 주소값(번지수)을 a 에 저장한다.
2) String b = new String("Hello"); // Hello 가 저장된 주소값(번지수)를 b 에 저장한다. -> a Hello와 b Hello 는 다를 수 있다. (주소값, 번지수가 다르기 때문에)
기본자료형과 참조자료형의 차이
- 객체를 생성할 때 new의 사용여부.
참조자료형은 객체를 생성할 때 new가 필요함. 유일하게 new없이도 객체를 생성할 수 있는 참조 자료형 -> String! - 기본자료형에서는 사칙연산을 포함 여러 연산이 가능하지만, 참조 자료형에서는 사칙 연산자는 '+'를 제외하고 사용할 수 없다.
참고
www.tcpschool.com/java/java_datatype_basic
www.youtube.com/watch?v=cOHYKJD_-bc&list=PLRx0vPvlEmdBjfCADjCc41aD4G0bmdl4R&index=2
'Backend > Study Halle - Java' 카테고리의 다른 글
온라인 자바 스터디 4주차 - 제어문 (0) | 2020.12.16 |
---|---|
온라인 자바 스터디 3주차 - 연산자 (0) | 2020.12.12 |
온라인 자바 스터디 2주차 - (2) 타입의 변환, var 그리고 배열 (0) | 2020.12.05 |
온라인 자바 스터디 1주차 - 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 (0) | 2020.11.28 |