Variable

eunsol Jo·2022년 1월 1일
0

☕️  Java

목록 보기
2/4

Primitive Type

종류데이터형크기범위
논리형boolean1bytetrue / false
문자형char2byte'\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터)
정수형byte1byte-128 ~ 127
short2byte-32,768 ~ 32,767
int4byte-2,147,483,648 ~ 2,147,483,647( -21억 ~ + 21억)
long8byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807(-100경 ~ + 100경)
실수형float4byte1.4E-45 ~ 3.4028235E38
double8byte4.9E-324 ~ 1.7976931348623157E308

▶︎ 유니코드
자바는 모든 문자를 유니코드로 처리한다.
이는 국제표준규약으로 세계 모든 문자를 코드값으로 매핑한 것이다.
2byte = 16bit = 88bit = 256256 = 65,536개 → 의 정수에 문자들이 매핑됨
*UTF-8 은 유니코드의 대표적인 인코딩방법이다.
▶︎ 아스키코드
미국의표준부호로 영어권 문자들을 코드로 매핑한 것이다.
7bit = 128개 → 0~127의 정수에 문자들이 매핑됨

범위 계산

출처 : www.codechobo.com

부호:S(sign)

  • 부호(+/-)를 표현하기 위한 비트
  • unsigned? = 부호가 없다. 예를들어 unsigned short = char 라고 생각하면 된다.
  • 1.7부터 unsigned를 지원 (잘 사용되지는 않음)
  • unsigned int의 경우 부호를 표현할 필요가 없으므로 더 큰범위의 양의 정수를 표현 할 수 있다.

지수:E(exponent) & 가수:M(mantissa/fraction)

  • 부동소수점 = 소수점의 위치를 고정하지 않고, 근사치를 표현
  • 지수 : 부호있는 정수
  • 가수 : 실제 값을 저장하는 부분(ex. float은 23자리의 2진수를 표현가능 = 7자리의 10진수 표현가능)
  • 정밀도(=몇자리까지 오차없이 표현가능한가) : float(7자리), double(15자리)
  • 하지만 실제로 해당 오차가 너무큼 (부동소수점 = 소수점의 위치를 고정하지 않고, 근사치를 표현)
  • 보다 정확한 계산을 하기위해서는 BigDecimal타입을 사용하는것 권장

오버플로우

byte b = 128; // 컴파일에러!

byte b = 127;
System.out.println(++b); // sout : -128 *최대값보다 커져서 최소값으로 돌아옴

Primitive Type & Reference Type

  • 기본형 (Primitive Type) : 실제값을 저장
  • 참조형 (Reference Type) : 메모리(Heap)의 주소값을 저장 (기본형을 제외한 모두)

Literal

변수(variable) : 하나의 값을 저장하기 위한 공간

상수(constant) : 한 번만 값을 저장할 수 있는 공간 *변경불가

리터럴(literal) : 그 자체로 값을 의미하는것 = 데이터 그 자체

논리형

boolean b = true;

문자형

char ch1 = 'A';
char ch2 = 65;       // sout : A
char ch3 = '\u0041'; // sout : A  *\u다음에 4자리 16진수로, 2바이트의 유니코드(Unicode)
char tab = '\t';

정수형

byte b = 127;
short s = 32767;

int i = 100;
int u = 1_000_000;
int bin = 0b1101;  // 0b로 시작 = 2진수, sout : 13
int oct = 0100;    // 0으로 시작 = 8진수, sout : 64
int hex = 0x100;   // 0x로 시작 = 16진수, sout : 256

long l = 10000000000L; // int범위 이상입력후 L(=l)생략시 컴파일에러! *정수형의 기본형은 int

실수형

float f = 3.14f;   // 소수점 입력후 f(=F)생략시 컴파일에러!  *실수형의 기본형은 double
float f = 10;      // sout : 10.0
float f = 3.14e3f; // sout : 3140.0

double d = 3.14d; // d(=D)생략가능
double d = 10.;   // sout : 10.0
double d = .10;   // sout : 0.1
double d = 1e1;   // sout : 10.0

문자열

String str1 = new String("abc");
String str2 = "abc";

변수 선언및 초기화

변수의 종류 : 클래스변수 & 인스턴스변수 & 지역변수

// 클래스영역 
{
			int iv;        // 인스턴스변수
			static int cv; // 클래스변수

		// 메서드영역
		{
				int lv = 0 ; // 지역변수
		}
}

클래스변수(static변수)

  • 클래스영역에 선언됨
  • 클래스내 같은 저장공간 = 어떤 인스턴스에서 값 변경시 모든 인스턴스에 영향
  • 인스턴스 생성없이 변수 접근가능

인스턴스변수

  • 클래스영역에 선언됨
  • 각 인스턴스별로 독립적인 저장공간을 가진다.

지역변수

  • 메서드영역에 선언됨
  • 사용전 반드시 초기화 필요
  • 같은 변수명의 클래스변수가 있어도 지역변수가 우선됨

변수의 Naming convention

  1. 대소문자가 구분 되며, 길이의 제한이 없음
  2. 예약어 사용 불가능 ex. true(X), True(O)
  3. 숫자로 시작할수 없음
  4. 특수문자는 _$ 만 허용

변수 기본값

자료형기본값
booleanfalse
char'\u0000'
byte0
short0
int0
long0
float0.0f
double0.0d or 0.0
참조형null

변수의 Scope& LifeTime

변수종류선언위치생성시기메모리 해제 시기
클래스변수(static변수)클래스영역클래스가 메모리에 올라갈때
(인스턴스 생성전 사용 가능)프로그램 종료시
인스턴스변수클래스영역인스턴스가 생성되었을 때인스턴스 참조해제시
지역변수클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부)변수 선언문이 수행되었을 때메소드 종료시
  • 클래스 변수는 모든 인스턴스가 공유한다.
  • 매개변수도 메서드내에서만 사용되므로, 지역변수 이다.
  • 클래스 메서드는 인스턴스 변수/메서드를 사용할 수 없다. (클래스메서드가 생성된 시점에 인스턴스변수/메서드는 생성되지 않았을 수 있음)
  • 인스턴스멤버 끼리의 호출은 언제나 가능 → 인스턴스멤버 존재 = 인스턴스가 이미 생성됨
public class TEST {
    int iv = 0;

  	void im(){
        iv = 8;
    }

    static void cm(){
        iv = 7;// 컴파일 에러 발생! 
				// → 클래스메서드에서 인스턴스변수 사용불가, 클래스변수(static)로 변경해서 사용
      	im();// 컴파일 에러 발생! → 클래스메서드에서 인스턴스메서드 사용불가
    }
}

타입변환 : Casting(명시적) & Type Promotion(묵시적)

Type Promotion(묵시적)


출처 : www.codechobo.com

int i = 10;
long l = i;

⇒ 보다 작은 타입으로 변환시에는 묵시적인 타입변환이 일어난다.

Casting(명시적)

long l = 10;
int i = (int) l;

// 값손실
long l = 10000000000l;
int i = (int) l; // sout : 1410065408

⇒ 보다 큰 타입으로 변환시에는 캐스팅을 명시적으로 해주어야 한다. 이때 값 손실을 유의해야한다.

1차 및 2차 배열 선언

//1차원 배열 선언방법
int[] arr = new int[1];
int[] arr2 = new int[]{10,20,30};
int[] arr3 = {10,20,30}

//2차원 배열 선언방법
int[][] arr = new int[2][3];
int[][] arr2 = new int[][]{{10,20,30},{10,20,30}};
int[][] arr3 = {{10,20,30}, {10,20,30}}
  • 배열은 주소값을 저장한다.

타입추론 : var

  • 코드 작성시에는 타입을 정하지 않고, 컴파일러가 타입을 유추
  • Java10부터 지원됨
  • 지역변수
  • 선언과 동시에 초기화 필수

출처
자바의 정석
https://perfectacle.github.io/2016/12/31/Java-study-002day/
https://needjarvis.tistory.com/643
https://blog.naver.com/swoh1227/222149491648

profile
Later never comes 👩🏻‍💻

0개의 댓글