자바에서 변수
-> 값을 저장하기 위한 이름이 붙은 메모리 공간
프로그램이 데이터를 일시적으로 기억하고 활용할 수 있게 해준다.
변수는 사용하기 전에 반드시 선언해야 하며, 선언 시에는 자료형(예: int, double, String)과 함께 변수 이름을 명시한다.
자바는 정적 타입 언어이므로 변수의 자료형이 고정되며, 다른 자료형의 값을 저장하려 하면 컴파일 에러가 발생한다.
변수는 선언된 위치와 사용 방법에 따라 지역 변수, 멤버 변수(필드), 클래스 변수(static)로 나뉘며, 각각의 용도와 메모리 저장 위치가 다르다.
package lesson01;
public class Ex01_Variable {
public static void main(String[] args) {
int age = 20;
double height = 160.5;
String name = "김사과";
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("키: " + height);
}
}
이름: 김사과
나이: 20
키: 160.5
데이터 타입(Data Type) : 변수에 어떤 종류의 데이터를 저장할 수 있는지
byte1바이트byte a = 100;-128 ~ 127 정수
short2바이트short b = 30000;작은 정수
int4바이트int c = 100000;일반적인 정수 타입
long8바이트long d = 10000000000L;큰 정수, 끝에 L 붙이기
float4바이트float e = 3.14f;소수점 숫자, 끝에 f
double8바이트double f = 3.141592;더 정밀한 소수
char2바이트char g = 'A';한 글자 문자, 작은따옴표 ' ' 사용
boolean1바이트 (논리값)boolean h = true;true 또는 false
String 문자열 저장 (한 글자 이상) String name = "홍길동";
배열 같은 타입의 데이터를 여러 개 저장 int[] numbers = {1, 2, 3};
클래스 사용자 정의 클래스의 객체 Person p = new Person();
package lesson01;
public class Ex02_DataType {
public static void main(String[] args) {
int age = 20; // 정수형
double height = 160.5; // 실수형
char grade = 'A'; // 문자형
boolean isStudent = true; // 논리형
String name = "김사과"; // 문자열(참조형)
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("키: " + height);
System.out.println("학점: " + grade);
System.out.println("학생 여부: " + isStudent);
}
}
이름: 김사과
나이: 20
키: 160.5
학점: A
학생 여부: true
자바에서 형 변환(Type Casting)
-> 변수나 값의 자료형을 다른 자료형으로 바꾸는 과정
숫자 타입 간(예: int → double)에는 자동 변환 가능
크기가 큰 타입에서 작은 타입으로 바꿀 때는 명시적 형 변환(casting)이 필요.
int num = 100;
double result = num; // int → double 자동 변환
System.out.println(result); // 출력: 100.0
double pi = 3.14159;
int intPi = (int) pi; // double → int 명시적 형 변환
System.out.println(intPi); // 출력: 3
package lesson01;
public class Ex03_TypeCasting {
public static void main(String[] args) {
int score = 90;
double average = score;
System.out.println("자동 형 변환 결과: "+ average);
double pi = 3.14159;
int truncatedPi = (int) pi;
System.out.println("강제 형 변환 결과: "+ truncatedPi);
char grade = 'A';
int gradeCode = grade;
System.out.println("문자 A의 유니코드 값: "+ gradeCode);
int code = 66;
char letter = (char) code;
System.out.println("유니코드 66에 해당하는 문자: "+ letter);
}
}
자동 형 변환 결과: 90.0
강제 형 변환 결과: 3
문자 A의 유니코드 값: 65
유니코드 66에 해당하는 문자: B
🤔❓자바에서 float가 long보다 "더 큰 타입"인 이유❔
float : 4바이트, 실수형 (부동소수점)
long : 8바이트, 정수형
| 구분 | long | float |
|---|---|---|
| 타입 크기 | 64비트 | 32비트 |
| 값 범위 | ±9.2 x 1018 | ±3.4 x 1038 |
| 정밀도 | 매우 높음 (정수 정확히 표현) | 낮음 (약 7자리) |
| 표현 방식 | 정수 | 부동소수점 |
| 자동 형변환 | long → float: 가능float → long: 불가능 (명시적 형변환 필요) | |
→ float의 표현 가능한 수의 절대 범위는 long보다 훨씬 크다.
→ 하지만 실제로 정밀한 계산이나 큰 정수를 다룰 때는 long이 더 안정적이다.
package lesson01;
public class Ex04_FloatLong {
public static void main(String[] args) {
long bigNumber = 100000000000L;
float converted = bigNumber;
System.out.println("long-> float 변환: "+converted);
float pi = 3.14159f;
long piToLong = (long) pi;
System.out.println("float-> long 변환: "+piToLong);
}
}
long-> float 변환: 9.9999998E10
float-> long 변환: 3
변수나 값에 대해 연산(계산, 비교 등)을 수행할 수 있도록 도와주는 기호 또는 예약어.
+ 덧셈 3 + 2 -> 5
- 뺄셈 5 - 2 -> 3
* 곱셈 4 * 2 -> 8
/ 나눗셈 5 / 2 -> 2 (정수 나눗셈)
% 나머지 (mod) 5 % 2 -> 1
💥 정수끼리 나누면 소수점은 버려진다. 5 / 2 = 2,
소수를 얻으려면 5.0 / 2처럼 하나 이상이 실수여야 한다.
= 대입 int a = 10;
복합 대입 연산자
+= 더해서 대입 a += 3;
-= 빼서 대입 a -= 2;
*= 곱해서 대입 a *= 5;
/= 나눠서 대입 a /= 2;
%= 나머지 대입 a %= 3;
== 같음 3 == 3 true
!= 같지 않음 3 != 2 true
> 크다 5 > 2 true
< 작다 2 < 5 true
>= 크거나 같다 5 >= 5 true
<= 작거나 같다 4 <= 3 false
&& AND (그리고) true && false -> false
|| OR (또는) true || false OR (또는)
! NOT (부정) !true -> false
++ 1 증가 a++ 사용 후 증가 (후위)
-- 1 감소 --a 사용 전 감소 (전위)
조건 ? 참일 때 값 : 거짓일 때 값
2진수로 연산을 수행할 때 사용한다.
& AND
| OR
^ XOR
~ NOT (반전)
<< 왼쪽 쉬프트
>> 오른쪽 쉬프트
수업 시간에 다룬 예제 코드들은 이렇게 정리가 되어 있다...