프로그램 (Program)
컴퓨터의 자료 표현
Hello World!
주석(Comment)
// 내용 : 한 줄 주석, 해당 기호가 있는 위치부터 그 줄 끝까지 주석처리
/* 내용 */ : 여러 줄 주석, 해당 범위의 내용 주석 처리
/** 내용 */ : 문서화 주석, Documentation API를 위한 주석 처리
주석 작성하는 것을 습관화하자!
출력 메서드
System.out.printf("%d기 %d반", 15,1); // printf : 변수를 넣어서 출력할 때Java 파일이 실행될 때 매커니즘
Write Once, Run Anywhere
/**
* 직접 만든 클래스입니다.
*/
public class Java01_Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
System.out.println("hh");
// 한 줄 주석
/*
* 여러 줄
* 주석입니다람쥐!
*/
}
}
변수(Variable)
변수 작명 규칙
자료형(데이터타입, Data Type)
변수의 선언
int a;
int b;
double c,d;변수의 초기화
a = 10;
b = 100;
int f = 1000;변수의 종류
형 변환 (Type Casting)
묵시적 형 변환(Implicit Casting)
작은 데이터 타입을 큰 데이터 타입으로 변환
데이터의 손실이 없음
따라서 자동으로 변환
int a = 10;
double b = a; // int -> double (자동 변환)```
명시적 형 변환 (Explicit Casting)
큰 데이터 타입을 작은 데이터 타입으로 변환
데이터 손실 가능성 있음
따라서 직접 명시해줘서 변환함
double x = 9.99;
int y = (int) x; // double -> int (명시적 변환)```
잼미니 보충 설명
자바에서 형변환의 '크기' 기준은 메모리 용량(Byte)이 아니라 표현할 수 있는 수의 범위입니다.
자료 내에도 언급되어 있듯이, 작은 타입에서 큰 타입으로 가는 것은 묵시적(자동) 형변환이 가능하지만, 반대는 명시적(강제) 형변환을 해야 합니다.
| 자료형 | 메모리 크기 | 표현 범위 (대략적 비교) | 기준 |
|---|---|---|---|
| long | 8 Byte | 약 | 정수만 표현 |
| float | 4 Byte | 약 | 소수점 포함 (지수 방식) |
*long(8바이트)은 float(4바이트)**보다 메모리는 2배나 많이 차지하지만, 정수만 담을 수 있습니다.
float은 부동 소수점 방식을 사용하여 메모리는 작아도 표현할 수 있는 숫자의 범위가 훨씬 넓습니다.
따라서 자바는 float을 long보다 "큰" 타입으로 간주합니다.
long → float (묵시적): 80평짜리 집(long)에 있는 짐을 40평짜리 집(float)으로 옮기는데, 새 집의 천장이 훨씬 높아서 짐이 다 들어가는 상황과 비슷합니다. 데이터 손실 우려가 적다고 판단해 자동으로 해줍니다.
**float → long (명시적):** 반대로 아무리 80평이라도 천장이 낮은 집(long)에 천장이 높은 집(float)의 짐(소수점 데이터 등)을 넣으려고 하면, 윗부분이 잘려 나갈 수 있습니다(데이터 손실 가능성). 그래서 개발자가 직접 `(long)`이라고 명시해줘야 합니다.
질문하신 내용 중 자료의 예시 부분을 다시 보면 아래와 같은 규칙이 적용됩니다.
long → float: 작은 범위(정수)에서 큰 범위(실수)로 가는 것이므로 묵시적(자동) 형변환입니다.
**float → long:** 큰 범위(실수)에서 작은 범위(정수)로 가는 것이므로 소수점이 잘려 나가는 데이터 손실이 발생할 수 있어 **명시적(강제)** 형변환을 해야 합니다.
요약하자면: 자바는 메모리 용량이 아니라 "누가 더 넓은 범위의 숫자를 담을 수 있는가"를 형변환의 기준으로 삼습니다. 그래서 정수 < 실수 순서로 타입이 크다고 보는 것이죠.
이 개념이 확실히 잡히셨나요? 혹시 실습 코드에서 float f = 23234.234324324f; 처럼 f를 붙이는 이유와 연결해서 더 설명이 필요하신가요?
연산자
연산자 종류
산술 연산자
+, -, *, /, %비교 연산자
논리 연산자
조건을 조합하여 참 또는 거짓(boolean)을 반환
작성 순서에 따라 효율적인 연산 가능 (Short-Circuit Evaluation)
종류
- && (앰퍼센드)
- ||
- !
결과를 더 이상 확인할 필요가 없을 경우, 남은 조건을 연산하지 않고 넘어가는 방식
대입(복합) 연산자
단항 연산자
기타 연산자
연산자 우선순위
제어문
제어문의 종류
if문
if (조건식 ) {
// 조건식이 참일 때 실행될 코드 블록
} if-else문
if (조건식) {
// 조건식이 참일 때 실행될 코드 블록
} else {
// 조건식이 거짓일 때 실행될 코드 블록
}중첩 if 문
if (조건식A){
// 조건식 A가 참일 때 실행
if(조건식B){
// 조건식 A,B 모두 참일 때 실행
} else {
// 조건식 A는 참, B는 거짓일 때 실행
}
} else {
// 조건식 A가 거짓일 때 사용
}if - else if - else 문
if - else if / if - if
switch 문
인자로 선택변수를 받아 변수의 값에 따라서 실행 블록이 결정
값이 일치하는 case부터 시작해서 break를 만나면 종료
일치하는 값이 없다면 default에서 시작
switch(변수){
case 값1:
// 변수의 값이 값1과 일치할 때 실행될 코드 블록
break;
case 값2:
// 변수의 값이 값2과 일치할 때 실행될 코드 블록
break;
// ... 더 많은 case
default :
// 변수의 값이 모든 case와 일치하지 않을 때 실행될 코드 블록
}
변수 자리에 올 수 있는 값
switch expression 문 (java 14 ~ )
for문
while 문
do-while 문
do {
// 반복할 코드 블록
} while (조건식);
break 문
continue 문