변수(variable) : 변하는 데이터를 담을 수 있는 그릇(저장소)
2-1. 변수 시작
Var1.java
package variable;
public class Var1 {
public static void main(String[] args) {
System.out.println(20); // 변경 10 -> 20
System.out.println(20); // 변경 10 -> 20
System.out.println(20); // 변경 10 -> 20
}
}
- 10에서 20으로 모든 줄을 하나씩 변경해야하는 번거로움이 있다.
Var2.java
package variable;
public class Var2 {
public static void main(String[] args) {
int a; // 변수 선언
a = 20; // 변수 초기화값을 변경 10 -> 20
System.out.println(a);
System.out.println(a);
System.out.println(a);
}
}
- 숫자를 담을 수 있는 그릇(a)을 선언하고, 10을 a라는 그릇에 (대입)넣는다.
- 변수 하나를 변경함으로 간단하게 출력값을 모두 변경할 수 있다.
- 변수 초기화 : 선언한 변수에 처음으로 값을 대입하여 저장하는 것.
2-2. 변수 값 변경
Var3.java
package variable;
public class Var3 {
public static void main(String[] args) {
int a; // 변수 선언
a = 10; // 변수 초기화
System.out.println(a); // 10 출력
a = 50; // 변수 값 변경
System.out.println(a); // 50 출력
}
}
- 변수 a 에 저장된 값을 언제든 바꿀 수 있다.
2-3. 변수 선언과 초기화
변수 선언
변수 선언하면 컴퓨터의 메모리 공간을 확보해 그곳에 데이터를 저장 가능하다.
변수 이름을 통해 메모리 공간에 접근 가능하다.
Var4.java
package variable;
public class Var4 {
public static void main(String[] args) {
int a; // 하나씩 선언
int b;
int c, d; // 한번에 여러개 선언
}
}
변수 초기화
선언한 변수에 처음으로 값을 저장하는 것
Var5.java
package variable;
public class Var5 {
public static void main(String[] args) {
// 1. 변수 선언, 초기화 각각 따로
int a;
a = 1;
System.out.println(a);
// 2. 변수 선언, 초기화 한번에
int b = 2;
System.out.println(b);
// 3. 여러 변수 선언, 초기화 동시에
int c = 3, d = 4;
System.out.println(c);
System.out.println(d);
}
}
- 변수 선언과 초기화, 각각 따로
- 변수 선언과 초기화, 동시에
- 여러 변수 선언과 초기화 동시에
Var6.java (초기화 하지 않은 변수 읽기)
package variable;
public class Var6 {
public static void main(String[] args) {
int a;
System.out.println(a);
// 컴퍼일 에러가 난 부분은 주석처리 => 안하면 다른 예제 실행할 때 이 부분에서 컴파일 에러가 발생함
// 컴파일 에러 => java: variable a might not have been initialized
}
}
- 변수가 초기화 되지 않았다는 컴파일 오류 발생
- 자바는 변수를 초기화 하도록 강제한다. 왜?
- 컴퓨터에서 메모리는 여러 시스템이 함께 사용하는 공간 => 어떠한 값들이 계속 저장됨
- 변수 선언 시 메모리상 어떤 공간을 차지하고 사용하는데, 그 공간에 기존에 어떤 값이 있었는지 아무도 모른다.
- => 변수를 초기화하지 않으면 이상한 값이 출력될 수 있다.
지금 학습하는 변수는 지역 변수(Local Variable)이다. 지역 변수는 개발자가 직접 초기화
클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화 진행
컴파일 에러: 자바 문법이 맞지 않을 때 발생하는 에러.
컴파일로 '.class' 파일을 만드려고 하는데 변수 초기화를 안해서 에러남.
오류를 빨리, 명확하게 찾을 수 있기에 좋은 에러 (안 좋은 에러는 런타임 에러)
2-4. 변수 타입1
Var7.java
package variable;
public class Var7 {
public static void main(String[] args) {
int a = 100; // 정수
double b = 10.5; // 실수
boolean c = true; // 불리언(boolean) true, false 입력 가능
char d = 'A'; // 문자 하나
String e = "Hello Java"; // 문자열, 문자열을 다루기 위한 특별한 타입
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
- 변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재
- 이런 형식을 영어로 '타입(type)', 한글로는 '형식' 또는 '형' => int 타입, 형식, 형
- 자신에 타입에 맞는 데이터 사용
type | 설명 | 예 | |
int | 정수 | -1, 0, 1, 100, 1000 | |
double | 실수 | -0.5, 1.5, 100.123 | |
boolean | 불리언 | 참과 거짓을 판단하는 곳에서 사용 | true, false |
char | 문자 하나 | 작은따옴표( ' ) 사용 | 'A', '가' |
String | 문자열 | 큰따옴표( " ) 사용 | "Hello Java", "자바" |
String은 첫 글자가 대문자로 시작. 클래스를 배워야 자세히 이해할 수 있다.
리터럴 (literal)
리터럴(literal)이라는 단어의 어원이 문자 또는 글자를 의미
int a = 100; // 정수 리터럴 (100)
double b = 10.5; // 실수 리터럴 (10.5)
boolean c = true; // 불리언 리터럴 (ture)
char d = 'A'; // 문자 하나 리터럴 ('A')
String e = "Hello Java"; // 문자열 리터럴("Hello Java")
- 코드에서 개발자가 직접 적은 100 , 10.5 , true , 'A' , "Hello Java" 와 같은 고정된 값을 프로그래밍 용어로 리터럴(literal)이라 한다.
- 변수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이다. 따라서 리터럴 자체는 변하지 않는다.
2-5. 변수 타입2
숫자타입
Var8.java
package variable;
public class Var8 {
public static void main(String[] args) {
// 정수
byte b = 127; // -128 ~ 127
short s = 32767; // -32,768 ~ 32,767
int i = 2147483647; // -2,147,483,648 ~ 2,147,483,647 (약 21억)
long l = 9223372036854775807L; // L or l(소문자는 추천안함)
// -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
//실수
float f = 10.0f; // f
double d = 10.0;
}
}
- 변수를 선언하면 표현 범위에 따라 메모리 공간을 차지한다.
- 메모리를 많이 사용할 수록 큰 숫자 표현이 가능하다.
- 정수형은 $ 2^8 $, $ 2^{16} $, $ 2^{32} $, $ 2^{64} $ 순으로 메모리 공간 크기를 가진다.
정수형
- byte : -128 ~ 127 (1byte, 2⁸)
- short : -32,768 ~ 32,767 (2byte, 2¹⁶)
- int : -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, 2³²)
- long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, 2⁶⁴)
실수형
- float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, 2³²)
- double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, 2⁶⁴)
기타
- boolean : true , false (1byte)
- char : 문자 하나(2byte)
- String : 문자열을 표현한다. 메모리 사용량은 문자 길이에 따라 동적으로 달라진다.
릴터럴 타입 지정
- 정수 리터럴은 int를 기본으로 사용
- 실수 리터럴은 doulble이 기본
변수 타입 정리
다음 타입은 실무에서 사용하지 않음
- byte : 표현 길이가 너무 작다. 또 자바는 기본으로 4byte( int )를 효율적으로 계산하도록 설계되어 있다. int 를 사용하자.
- byte 타입을 직접 선언하고 여기에 숫자 값을 대입해서 계산하는 일은 거의 없다.
- 대신에 파일을 바이트 단위로 다루기 때문에 파일 전송, 파일 복사 등에 주로 사용된다.
- short : 표현 길이가 너무 작다. int 를 사용하자
- float : 표현 길이와 정밀도가 낮다. 실수형은 double 을 사용하자.
- char : 문자 하나를 표현하는 일은 거의 없다. 문자 하나를 표현할 때도 문자열을 사용할 수 있다.
- 예를 들어 String a = "b" 와 같이 사용하면 된다.
메모리 용량은 매우 저렴하기에 용량을 절약하기보다 개발 속도나 효율(컴파일 속도)에 초점을 맞추는게 더 효과적
자주 사용하는 타입
- 정수 - int , long : 자바는 정수에 기본으로 int 를 사용한다. 만약 20억이 넘을 것 같으면 long 을 쓰면 된 다.
- 파일을 다룰 때는 byte 를 사용한다.
- 실수 - double : 실수는 고민하지 말고 double 을 쓰면 된다.
- 불린형 - boolean : true , false 참 거짓을 표현한다. 이후 조건문에서 자주 사용된다.
- 문자열 - String : 문자를 다룰 때는 문자 하나든 문자열이든 모두 String 을 사용하는 것이 편리하다.
2-6. 변수 명명 규칙
자바에서 변수의 이름을 짓는데는 규칙과 관례가 있다.
규칙은 필수이다. 규칙을 지키지 않으면 컴파일 오류가 발생한다.
관례는 필수는 아니지만 전세계 개발자가 해당 관례를 따르기 때문에 사실상 규칙이라고 생각해도 된다.
규칙
- 변수 이름은 숫자로 시작할 수 없다. (예: 1num , 1st )
- 그러나 숫자를 이름에 포함하는 것은 가능하다 (예: myVar1 , num1 ).
- 이름에는 공백이 들어갈 수 없다.
- 자바의 예약어를 변수 이름으로 사용할 수 없다. (예: int , class , public )
- 변수 이름에는 영문자( a-z , A-Z ), 숫자( 0-9 ), 달러 기호( $ ) 또는 밑줄( _ )만 사용할 수 있다.
관례
- 소문자로 시작하는 낙타 표기법
- 변수 이름은 소문자로 시작하는 것이 일반적이다. 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 소문자로 시작하고 그 이후의 각 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용한다. (예: orderDetail , myAccount )
자바 언어의 관례 정리
- 클래스는 대문자로 시작, 나머지는 소문자로 시작 + 낙타 표기법
- 클래스: Person , OrderDetail
- 변수를 포함한 나머지: firstName , userAccount
- 여기에 예외가 딱 2개 있다.
- 상수는 모두 대문자를 사용하고 언더바로 구분한다. (상수는 뒤에서 학습)
- USER_LIMIT
- 패키지는 모두 소문자를 사용한다. (패키지는 뒤에서 학습)
- org.spring.boot
- 상수는 모두 대문자를 사용하고 언더바로 구분한다. (상수는 뒤에서 학습)
변수 이름은 의미있고, 그 용도를 명확하게 설명해야 한다.
- a , b : 이런 변수는 용도를 설명하지 않는다. 단순한 예제에서만 사용하는 것이 좋다.
- studentCount , maxScore , userAccount , orderCount : 용도를 명확하게 설명한다.
2-7. 문제와 풀이
VarEx1.java
package variable.ex;
public class VarEx1 {
public static void main(String[] args) {
/*
다음 코드에 반복해서 나오는 숫자 4 , 3 을 다른 숫자로 한번에 변경할 수 있도록
다음을 변수 num1 , num2 를 사용하도록 변경해보세요.
*/
System.out.println(4 + 3);
System.out.println(4 - 3);
System.out.println(4 * 3);
int num1 = 4;
int num2 = 3;
System.out.println(4 + 3);
System.out.println(4 - 3);
System.out.println(4 * 3);
}
}
VarEx2.java
package variable.ex;
public class VarEx2 {
public static void main(String[] args) {
/*
1. 변수 num1 을 선언하고, 이에 10을 할당하세요.
2. 변수 num2 를 선언하고, 이에 20을 할당하세요.
3. 두 변수의 합을 구하고, 그 결과를 새로운 변수 sum 에 저장하세요.
4. sum 변수의 값을 출력하세요.
*/
int num1 = 10;
int num2 = 20;
int sum = num1 + num2;
System.out.println(sum);
}
}
VarEx3.java
package variable.ex;
public class VarEx3 {
public static void main(String[] args) {
/*
long 타입의 변수를 선언하고,
그 변수를 10000000000(백억)으로 초기화한 후 출력하는 프로그램을 작성하세요.
boolean 타입의 변수를 선언하고, 그 변수를 true 로 초기화한 후 출력하는 프로그램을 작성하세요.
*/
long longVar = 10000000000L;
System.out.println(longVar);
boolean booleanVar = true;
System.out.println(booleanVar);
}
}
'IT > 김영한의JAVA입문_inFlearn' 카테고리의 다른 글
4. 조건문 - if문1~3 / switch문 / 삼항 연산자 / 문제와 풀이1~2 (1) | 2024.12.24 |
---|---|
3. 연산자 - 산술 연산자 / 문자열 더하기 / 연산자 우선순위 / 증감 연산자 / 비교 연산자 / 논리 연산자 / 대입 연산자 (1) | 2024.12.19 |
1. 자바란, (1) | 2024.11.29 |
자바 프로그램 실행 + 주석(comment) (0) | 2024.11.29 |
개발환경설정 (1) | 2024.11.29 |