변수 (Variable)
변수란?
- 코드에서 중복되는 내용을 해결하고 내용을 담아두기 위한 것
- 변수의 종류
- 지역 변수 (local variables) : 특정 지역, 즉 중괄호 내에서 선언된 변수
- 매개 변수 (parameters) : 메소드에 넘겨주는 변수
- 인스턴스 변수 (instance variables) : 클래스 안, 메소드 밖에 선언된 변수
- 클래스 변수 (class variables) : 인스턴스 변수와 같지만 타입 앞에 static 예약어가 붙은 변수
ex) Variable Example
public class Car {
int speed; // 인스턴스 변수
static int color; // 클래스 변수
public void speedUp(int speed /* 매개변수 */ ){ ~ }
public void break(){
int zero = 0; // 지역 변수
}
}
- 변수의 종류마다 생명주기가 다르다.
- 지역 변수 : 선언한 중괄호 내에서만 유효하다.
- 매개 변수 : 메소드가 호출될 때부터 메소드가 끝날 때 소멸된다.
- 인스턴스 변수 : 객체가 생성될 때 시작되고 객체를 참조하는 다른 객체가 없으면 소멸된다.
- 클래스 변수 : 클래스가 처음 호출될 때 시작되고 자바 프로그램이 끝날 때 소멸된다.
- 변수의 생명 주기가 다른 이유는 사용하는 용도가 다르고 코드 복잡성이나 메모리 효율 때문이다.
- 변수는 꼭 필요한 범위로 한정해서 사용하는 것이 좋다.
- 변수 명명규칙 (꼭 지켜야하는 것)
- 첫 문자는 유니코드 문자, 알파벳, $, _ 만 가능하지만 보통 $ 와 _로 시작하지 않는다.
- 두 번째 문자부터는 유니코드, 알파벳, $, _ 상관없다.
- 메소드 명명규칙처럼 여러 단어인 경우 맨 첫 문자만 소문자로 그 이후 단어들의 첫 글자는 대문자로 한다.
- 상수(constant value)인 경우 모두 대문자로 지정하며 단어와 단어 사이에는 _로 구분한다.
- 변수 명에는 공백이 들어갈 수 없다.
- 자바의 예약어를 변수명으로 사용할 수 없다.
변수(variable)는 변하는 값, 가변적인 값을 의미
상수(constant value)는 절대 변하지 않는 값을 의미
- 이름을 지정하기 위한 관례 (안지켜도 되지만 지키면 좋은 것)
- 메소드 명, 변수 명 지정할 때 camel case로 표기한다. (클래스, 상수, 패키지 관례는 다르다.)
- 소문자로 작성하되 두 단어 이상이 오는 경우 두 번째 단어부터 첫 글자는 대문자로 작성한다.
- ex) myAccount
- 클래스 명을 지정할 때는 pascal case로 표기한다.
- 모든 단어의 첫 글자는 대문자로 작성한다.
- 상수는 모든 글자를 대문자로 작성한다.
- 패키지는 모든 글자를 소문자로 작성한다.
- 자바에서 어떤 것이든 이름을 지을 때는 의미 있게 지어야한다.
- int a, b; 이런식으로 지으면 안돼!!
- 메소드 명, 변수 명 지정할 때 camel case로 표기한다. (클래스, 상수, 패키지 관례는 다르다.)
- 지역 변수 특징
- 서로 다른 중괄호 내에서 같은 이름의 변수로 선언이 되어도 다른 변수 취급
- 선언된 중괄호 내에서만 유효하기에 당연한 것....
- 같은 중괄호 내에서 같은 이름의 변수를 선언하는 것은 당연히 안된다! (컴파일 에러)
- 변수 선언 시 되도록 하나의 메소드에서 하나의 이름만 사용하는 것을 권장!
자바에서 객체가 더 이상 사용되지 않으면 가비지 콜렉터에 의해 자동으로 메모리 청소가 된다.
- 클래스 변수와 인스턴스 변수는 컴파일러가 자동으로 기본 값을 넣어주지만 지역 변수는 반드시 초기화를 해줘야 한다.
자료형(타입)
자료형 종류
- 기본 자료형 (8개) : 바로 초기화가 가능한 자료형
- 숫자 타입 (타입의 범위가 작은 순서대로 bsil fd)
- 정수형
- byte
- short
- int
- long
- char
- 소수형
- float, double
- 정수형
- boolean
- 숫자 타입 (타입의 범위가 작은 순서대로 bsil fd)
- 참조 자료형 : new 키워드를 사용해서 초기화하는 자료형
- 참조 자료형 중 예외 : String은 객체를 생성하지 않고 기본 자료형처럼 바로 초기화 가능 (new 키워드를 사용해 객체 생성하는 것도 가능)
초기화는 변수 선언 후 변수를 사용하기 위해 처음으로 값을 저장하는 것, 이후에 값을 저장하는 것은 할당이다.
- 모든 자바의 숫자 타입들은 2의 배수로 범위가 정해진다.
- 기본형과 참조형의 가장 핵심적인 차이
- 기본형은 값을 저장, 참조형은 참조(주소)값을 저장
- 기본형은 선언과 동시에 사이즈가 정적으로 정해진다, 참조형은 동적으로 런타임 시점에 사이즈가 정해진다.
- 기본형 ex) int - 4byte, short - 2byte로 사이즈가 정적으로 정해진다.
- 참조형 ex) int size = 1000; new int [size];과 같이 런타임(실행)시점에 사이즈를 동적으로 정한다.
정수형 타입
- 자바 정수형 타입별 범위
- byte : -2⁷ ~ 2⁷ - 1 (1 byte)
- short : -2¹⁵ ~ 2¹⁵ - 1 (2 byte)
- int : -2³¹ ~ 2^³¹ - 1 (4 byte)
- long : -2⁶³ ~ 2⁶³ - 1 (8 byte)
- char : 0 ~ 2¹⁶ - 1
- 정수형 중 unsigned 인(부호가 없는) 것은 char 뿐
- 기본 자료형 숫자 타입(char 제외)에서 부호 표현하는 방식
- 맨 앞의 값이 0이면 양수, 1이면 음수
- 모든 값이 0이면서 맨 앞의 값만 0인 경우는 0이지만 1인 경우 해당 타입의 최솟값을 의미
- ex) byte에서 맨 앞인 2⁷자리의 값을 포함한 모든 값이 0이면 값은 0이지만 맨 앞의 값인 2⁷자리의 값이 1인 경우 byte 타입의 최소 값인 -2⁷이다.
- 맨 앞의 값이 0이고 두 번째 자리값부터 1인 경우 최대값을 의미
- |최소값| = |최대값| + 1
2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ | 값 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -2⁷ |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 큰 범위의 int, long 타입이 있는데 byte, short가 왜 존재할까?
- 저장 공간은 한정적이고 적은 공간에 보다 많은 내용을 저장하기 위해서
- long 타입과 float 타입 사용시 유의 사항
- 숫자 뒤에 L과 f(F)를 붙여줘야한다.
ex) long, float Example
public static void main(String [] args) {
long num1 = 7777L; // l 없이 7777만 쓰게되면 컴파일 오류 발생
float num2 = 77.77f; // f 없이 77.77만 쓰게되면 컴파일 오류 발생
}
- 실무에서 잘 사용하지 않는 자료형 타입
- byte : 표현할 수 있는 범위가 너무 작고 자바는 기본적으로 4 byte(int)를 효율적으로 계산하도록 설계되어 있다.
- byte를 직접 선언하고 숫자를 대입해서 사용하는 경우는 거의 없다
- 대신 파일을 byte 단위로 다루기 때문에 파일 전송 / 복사 등에 주로 사용된다.
- short : byte와 같은 이유, 그렇기에 정수형은 되도록 int 타입을 사용한다.
- float : 표현 범위가 너무 작고 정밀도가 낮기에 double을 주로 사용한다.
- char : 문자 하나만 사용하는 경우는 거의 없고 String을 통해 문자 하나를 표현할 수 있기에 String을 주로 사용한다.
- byte : 표현할 수 있는 범위가 너무 작고 자바는 기본적으로 4 byte(int)를 효율적으로 계산하도록 설계되어 있다.
Char
- char은 보통 문자와 관련된 부분에서 사용
- 정의할 때 보통 '를 사용한다.
- 부호가 존재하지 않기에 음수를 표현하지 못한다.
- 문자열이 아닌 문자가 와야한다.
- ASCKII 코드로 변환할 수 있다.
- A = 65, a = 97 ....
- char 값을 지정하는 방법
- 'a'와 같이 직접 값을 넣는 방식
- \u와 4개의 16진수 값을 넣는 방식 ( 0 ~ 65,535 이내 값)
- ex) 97인 경우 '\u0097'로 작성
ASKII : 영문 알파벳을 사용하는 대표적인 문자 인코딩이다.
1byte 단위의 문자들이며 알파벳, 숫자 기호, 각종 값들이 존재한다.
자바에서는 그 외 값들을 Unicode라는 값들을 2byte로 표현했다.
실수형
- 실수형 타입별 범위
- float : 32bit (부호1자리 + 지수8자리 + 가수23자리) (4 byte)
- double : 64bit (부호1자리 + 지수11자리 + 가수52자리) (8 byte)
- 실수형이 제공하는 범위를 넘어서면 값의 정확성이 보장되지 않는다.
- 실수형은 소수점 값을 처리하기 위해 사용된다.
- 정수형은 일반적으로 int형을 실수형은 double을 많이 사용한다.
Boolean 타입
- boolean 타입은 참(true) / 거짓(false)만 값으로 가질 수 있다.
- 더하기, 빼기와 같은 기본 연산도 불가능.
기본 자료형의 기본 값
- 모든 자료형은 값을 지정하지 않으면 기본 값을 사용한다.
- 지역 변수로 기본 자료형을 사용하면 기본 값이 자동으로 적용되지 않는다!!!!! (컴파일 불가)
- 지역 변수로 사용하는 경우 별도의 값을 반드시 지정해줘야한다.
- 인스턴스 변수, 클래스 변수, 매개 변수는 값을 지정하지 않아도 컴파일은 가능하다.
- 변수의 값이 기본 값이라고 해도 명시적으로 기본 값 지정하는 것이 좋다.
- 모든 숫자의 기본 값은 0 / 0.0
- char만 예외적으로 공백이 기본 값 ( '\u0000' )
- boolean의 기본 값은 false
간단 내용 정리
1. 네 가지 종류의 변수 구분 방법
ㅡ> 변수가 선언된 위치와 static 예약어의 유무로 구분이 가능하다.
2. 변수의 이름을 지을 때 대문자로 가능한가?
ㅡ> 불가능, 변수의 이름은 소문자 / 유니코드 / _ / $로 가능하며 여러 단어가 오는 경우 맨 첫 문자를 제외한 다른 단어의 첫 글자는 대문자로 가능하다.
3. 자료형에는 기본 자료형과 어떤 자료형이 있는가?
ㅡ> new 키워드로 초기화하는 참조 자료
4. 기본 자료형은 몇가지가 있는가?
ㅡ> 8가지, byte / short / int / long / char / float / double / boolean
5. 기본 자료형 중 정수형에는 어떤 것들이 있나요?
ㅡ> byte, short, int, long, char
6. byte는 몇 bit로 되어 있나요?
ㅡ> 8bit
7. byte는 왜 만들어졌을까?
ㅡ> 저장 공간은 한정적이기에 적은 공간에 보다 많은 내용을 저장하기 위해서
8. int와 long 타입 중 어떤 타입이 더 큰 숫자를 처리할 수 있나요?
ㅡ> int의 범위는 -2³¹ ~ 2^³¹ - 1 이고 long의 범위는 -2⁶³ ~ 2⁶³ - 1로 long이 더 큰 숫자를 처리할 수 있다.
9. 소수점을 처리하는 타입은 어떤 것이 있나요?
ㅡ> 실수형으로는 float과 double이 있다.
10. char는 정수형인가요?
ㅡ> char는 정수형이다.
11. a라는 것을 char로 정의할 때 어떤 기호로 감싸주나요?
ㅡ> ' (홑따옴표)
12. true와 false 두개의 값만을 가지는 타입은 무엇인가요?
ㅡ> boolean 타입
출처: 이상민, <자바의 신 VOL.1> 로드북
'Java > 자바의 신 VOL.1' 카테고리의 다른 글
06. 제가 조건을 좀 따져요 (1) | 2024.06.19 |
---|---|
05. 계산을 하고 싶어요 (1) | 2024.06.19 |
03. 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (1) | 2024.06.18 |
02. Hello God Of Java (0) | 2024.06.18 |
01. 프로그래밍이란 무엇인가? (0) | 2024.06.17 |