- 남궁성님의 자바의 정석 기초편 유튜브 강의를 보며 공부 후 정리하였습니다.
1. 변수 Variable 란?
프로그래밍에서의 변수는 하나의 값을 저장하는 메모리 공간을 의미. 이때의 메모리 공간이란 보통 램 Ram의 메모리 주소를 의미한다. 즉, 메모리 공간 = Ram 메모리 주소라고 생각하면 쉬울 듯.
단, 이때 하나의 변수에는 하나의 값만 들어갈 수 있다. 새로 값이 들어온다면 기존 값은 사라지고 새로운 값만 남는다. 결국 한 집에 2명 이상 사는 것은 허락할 수 없다.
2. 변수의 선언
- 변수의 선언 이유 : 값 data 을 저장할 공간을 마련하기 위해서
- 선언 방법 : 변수타입 변수 이름;
1
2
3
4
5
6
|
String Im; // 변수타입 변수명
Im = "나"; // Im에 '나' 입력
Im = "나난"; // Im 에 '나난' 입력
System.out.println(Im); // 출력
출력 : 나난 // Im 변수에는 하나의 값만 넣어질 수 있고, 새로 나난 이라는 값이 왔기에 기존의 '나'는 없어짐
|
cs |
- 변수의 초기화 : 변수에 처음으로 값을 저장하는 것
- 변수를 처음 만들었을 때는 선언과 동시에 초기화를 하는 게 좋음
- 즉 위에 보다 아랫것이 더 좋은 방식
12345String Im = "나"; // 변수타입 변수명Im = "나난"; // Im 에 '나난' 입력System.out.println(Im); // 출력출력 : 나난c
3. 변수의 종류
- 클래스 변수 : 클래스 영역에서 선언되어 클래스가 메모리에 올라갈 때 메모리에 할당됨. 즉 메모리에 딱 한 번만 올라가며 클래스 변수의 값은 모든 인스턴스가 공통된 값을 공유하게 됨 ⇒ 모든 인스턴스가 고유의 값으로 시작하기 위해서는 클래스 변수 사용
- 인스턴스 변수 : 클래스 영역에서 선언되어 인스턴스가 생성 될 때 생성되며, 인스턴스 별로 다른 값을 가질 수 있음 ⇒ 모든 인스턴스가 고유의 값을 사용하게 만들기 위해서는 인스턴스 변수 사용
- 지역 변수 : 메서드 내에서 선언되어 메서드 내에서만 사용할 수 있는 변수. 메서드가 실행될 때 메모리를 할당받으며 메서드가 끝나면 소멸되어 사용 불가.
변수의 종류 | 선언 위치 | 생성 시기(메모리 할당 시기) |
클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 인스턴스가 생성될 때 | |
지역 변수 | 클래스 이외의 영역(메서드, 생성자, 초기화 블록) | 변수 선언문이 수행되었을 때 |
4. 변수, 상수 , 리터럴
- 변수 Variable : 하나의 값을 저장하기 위한 공간
- 상수 constant : 한 번만 값을 저장 가능한 변수 ⇒ final 키워드 붙여 선언, 값 변경 불가
- 리터럴 literal : 그 자체로 값을 의미하는 것 ⇒ 변수 선언 시의 좌항 우항에서 우항쪽(data)
5. 변수에 따른 자료 기본형
변수의 타입은 저장할 값에 의해 결정된다. 예를 들면 단순한 문자 1개만 저장하려고 한다면 char를 사용해야 하며, 변수에 실수를 저장한다면 double을 사용해야 한다.
이러한 변수에 따른 자료 기본형은 아래 표를 참고한다.
자료형 | 표현할 수 있는 값의 범위 | 크기 byte |
boolean | false, true => 논리형 | 1 |
char | 0 ~ 65535 (2^16) => 단일 문자 | 2 |
String | 문자열 저장 역할 & 하나의 클래스 & 참조형 | |
byte | -128 ~ 127 (-2^7 ~ 2^7 -1) | 1 |
short | -32768 ~ 32767 (-2^15 ~ 2^15 -1) | 2 |
int | 약 -21억 ~ 21억 (-2^31 ~ 2^31 -1) => 정수 기본 | 4 |
long | 약 -920경 ~ 920경(-2^31 ~ 2^31 -1) | 8 |
float | 1.4E-45 ~ 3.4E38 | 4 |
double | 4.9E-324 ~ 1.8E308 => 실수 기본 | 8 |
- 참조형은 기본형을 제외한 나머지 String System 같은 것들을 의미한다. 이 참조형은 기본으로 있는 것들도 있고, 사용자가 마음대로 추가도 가능하다(추후 더 자세히 설명)
6. 리터럴의 접두사와 접미사
리터럴의 접미사는 대체로 정수와 실수 즉, 숫자 쪽에서만 쓰는 게 보통이다. 리터럴 접미사를 붙이는 경우는 해당 타입의 범위를 넘어서는 값을 저장하려고 할 때 붙이게 된다. 이때 실수에서는 float 의 f 와 double 의 d 를 접미사로 사용하는데 double 의 d 는 생략이 가능하나 f 의 리티럴 접미사인 f는 생략 불가능하다. 물론 d 도 double 의 범위를 넘어가게 되면 꼭 붙여야 하며, f 의 경우는 범위를 넘어가던 아니던 무조건 붙여야 한다.
아래처럼 사용 가능하다.
- 10. ⇒ 10.0
- .10 ⇒ 0.10 : double 타입의 0.10, double 의 d 가 생략됨
- 10f ⇒ float 타입의 10.0
!! 아래의 경우에는 변수와 리터럴 타입이 불일치해도 에러가 없다
- 범위가 변수 > 리터럴 인 경우
- int i = 'A' // int > char
- long l = 123 // long > int
- double d = 1000f // double > float
!! 아래의 경우에는 변수와 리터럴 타입이 불일치하면 에러가 발생한다.
- 범위가 변수 < 리터럴 인 경우
- int i = 300000000000 // int 의 범위 +- 20억을 벗어난다
- long l = 3.14 // long < float
- float f = 3.14 // float < double
!! byte, short 변수에 int 리터럴 저장 가능
- 단 변수 타입 int 의 범위 이내여야 함
- byte b = 100 // byte 의 범위 -128 ~ 127 이내에 속하기 때문에 가능
- byte c = 128 // byte 범위 벗어나기 때문에 에러 발생
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 123, ob0101, 077, 100L | L |
실수형 | 3.14, -100, 1.4f | f, d |
문자형 | 'A' '1' | 없음 |
문자열 | 'ABC' "123" "true" | 없음 |
7. 문자와 문자열
5. 변수에 따른 자료 기본형 표에서 확인했듯이 char 은 한 문자를 저장하고, String 은 여러 문자(문자열) 을 저장할 수 있다.
자세한 건 아래 코드 확인.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
char ch = 'A';
char ch = 'AB'; // 에러 발생, 하나의 문자만 저장 가능
char ch =''; // 에러 발생, 빈 문자열 변환 불가능
String s = "AB";
String s = "A"; // 얘는 하나던 문자열이던 상관 없음
String s = ""; // 빈 문자열도 출력 가능
String s1 = "A"+"B"; // 문자열끼리 결합도 가능
s1 = "AB";
String s2 = "" + 7;
// 이런 식으로 문자열과 숫자도 결합 가능, 이는 String 이 문자열끼리만 결합되는 성질을 이용하여 7을 문자열로 변환 후 ""와 합쳐서 문자열로 변하게 됨
// 문자열의 결합은 왼쪽-> 오른쪽으로 진행됨 아래의 둘은 서로 전혀
String s3 = ""+7+7 -> "7"+7-> "7"+"7" -> "77" // s3 = 77
String s4 = 7+7+"" -> 14+"" // s4 = 14+""
|
cs |
결론적으로!!
- 문자열 겹합 시에는 + 기호를 사용한다 => "A" + "B"
- 문자열 + any type => 문자열 && any type + 문자열 => 문자열
- 문자열의 결합은 왼쪽 -> 오른쪽으로 진행됨
- char 는 하나의 문자만 String 은 2가지 이상의 문자, 문자열 저장이 가능함
- String은 자료형이자 하나의 클래스!!
'Java - 기본기' 카테고리의 다른 글
Java 입출력(I/O), 스트림(Stream), 버퍼(Buffer) 개념 및 사용법 (2) | 2021.09.26 |
---|---|
5. 반올림-Math.round(), 비교, 조건, 논리, 대입, 복합 대입 연산자 (0) | 2021.09.16 |
4. 증감 연산자, 부호 연산자, 형변환 , 자동 형변환 + 아스키코드 (0) | 2021.09.13 |
3. Scanner 사용, 정수형 오버플로우, 타입 간 변환, 연산자와 종류 (0) | 2021.09.09 |
2. 변수 다루기 - 기본형 심화, printf 를 이용한 출력, 입력 받기 (1) | 2021.09.02 |
댓글