[ 2주차 - 0819 ]
금일 커리큘럼
├ 09:00 ~ 12:00 자바 프로그래밍 기초 (변수와 데이터 타입, 형변환)
└ 13:00 ~ 18:00 자바 프로그래밍 기초 (연산자, 조건문)
1. 변수와 기본 타입
변수
- 변수 (varirable) : 값을 저장하는 식별자 (메모리공간에 붙임)
- 리터럴 (literal) : 식별자에 넣은 값 그 자체 = 변수 값
/*
* int - 데이터 타입
* num - 변수명
* = - 대입 연산자
* 100 - 리터럴 (변수 값)
*/
int num = 100;
변수 선언법
// 한줄 선언
int a;
int b;
// 한줄 여러개 선언
int c, d, e;
// 선언과 동시 초기값
double pie = 3.14;
// const 형 변경불가 절대값 선언
final int MAX_HOUR = 24;
2. 데이터 타입
자바 타입은 기본타입(자료형), 래퍼런스 타입(참조형) 나뉨
- 기본 타입 : 실제 값을 직접 저장하는 타입
- 메모리 공간에 값 자체가 저장됨
- 예시: byte, short, int, long, float, double, char, boolean (총 8가지)
- 래퍼런스 타입 : 객체의 주소(참조값)를 저장하는 타입
- 값이 아닌 객체의 위치를 저장
- 예시: String, 배열(Array), 클래스, 인터페이스 등
기본타입 - 정수형
// 정수형
byte a = 1; // 1byte 정수 (-128 ~ 127)
short b = 2; // 2byte 정수 (-32,768 ~ 32,767)
int c = 3; // 4byte 정수 (-21.4억 ~ 21.4억)
long d = 4; // 8byte 정수 (-9,000조 ~ 9,0000조)
long e = 100000L; // 롱타입은 L 붙여서쓰는거 권장..!
// 진법표기식
int _default = 42; // 기본정수 (10진수)
int format_2 = 0b101010; // 2진수 (42)
int format_8 = 052; // 8진수 (42)
int format_16 = 0x2A; // 16진수 (42)
// 콤마표기식 (java7+)
int num1 = 1_000_000;
long num2 = 2_200_000_000L;
기본타입 - 실수형
// 실수형
float f1 = 3.14f; // 4byte 실수 (F 접미사 필수)
double d1 = 3.14; // 8byte 실수
double d2 = 3.14d; // 명시적 double
double d3 = 1.0e3; // 지수 표기법 (1000.0)
기본타입 - 논리형
// 논리형 (1byte)
boolean isTrue = true;
boolean isFalse = false;
boolean result = (10 > 5);
int num1 = 10;
int num2 = 20;
boolean result2 = num1 > num2;
기본타입 - 문자형
// 문자형 (2byte)
char a1 = 'A'; // 작은따옴표, 문자열 하나
char a2 = 65; // 유니코드 값 (A)
char a3 = '\u0041'; // 이스케이프 (A)
형변환?
- 변수나 값의 데이터 타입을 다른 타입으로 변환하는 것
- 예를 들어,
int값을double로 바꾸거나,double값을int로 바꾸는 것 - 자바에서는 자동 형변환(묵시적 변환)과 강제 형변환(명시적 변환) 두 가지 방식이 있음.
int a1 = 10;
double b1 = a1; // = 10.0; 자동 형변환
double a2 = 3.14;
int b2 = (int)a2; // = 3; 강제 형변환, 소수점 이하 버림
char a3 = 'A';
int b3 = (int)a3; // = 65; 유니코드값으로 변환
char c3 = (char)65; // = 'A'; 문자로 변환
참조타입 - String 문자열
String nickName = "꿈꾸는 라이언";
String userInfo = "안녕하세요! 잘 부탁드려요~";
int age = 20;
String ageStr = "나이 : " + age + "세"; // 나이 : 20세
// 합치기 example
int num = 20;
String strDt = "name";
String innerText1 = strDt + ": 라이언" + num + 25; // name: 라이언2025
String innerText2 = strDt + ": 라이언" + (num + 25); // name: 라이언45
String innerText3 = strDt.concat(": 라이언"); // name: 라이언
3. 이스케이프 시퀀스
이스케이프 시퀀스
\n: 줄바꿈\t: 탭\": 큰따옴표\': 작은따옴표\\: 백슬래시\r: 캐리지 리턴
// 줄바꿈
System.out.println("첫 번째 줄\n두 번째 줄");
System.out.println();
/*
* 출력 결과
* 첫 번째 줄
* 두 번째 줄
*/
// 탭
System.out.println("이름\t나이\t성별");
System.out.println("라이언\t99\t남");
System.out.println();
/*
* 출력 결과
* 이름 나이 성별
* 라이언 99 남
*/
// 따옴표
System.out.println("꿈꾸는라이언 : \"안녕하세요!\"");
System.out.println("char a = \'A\';");
System.out.println();
/*
* 출력 결과
* 꿈꾸는라이언 : "안녕하세요!"
* char a = 'A';
*/
// 백슬래시
System.out.println("path : C:\\Users\\Documents");
/*
* 출력 결과
* path : C:\Users\Documents
* char a = 'A';
*/
4. 연산자
산술 연산자
// 산술 연산
int a = 10, b = 3;
int calcNum;
calcNum = a + b; // 13
calcNum = a - b; // 7
calcNum = a * b; // 30
calcNum = a / b; // 3 (int로 정수몫만 나옴)
calcNum = a % b; // 1 (나머지값 0:짝, 1:홀)
비교 연산자
// 비교 연산
int a = 5, b = 10;
boolean result;
result = (a == b); // false
result = (a != b); // false
result = (a < b); // true
result = (a > b); // false
result = (a >= b); // false
result = (a <= b); // true
논리 연산자
// 논리 연산
boolean a = true, b = false;
boolean result;
result = (a && b); // false (and)
result = (a || b); // true (or)
result = (!a); // false (not)
result = (a ^ b); // true (xor) - 서로다르면 true
// 논리연산 관련 평가 과정
int a = 1, b = 2;
boolean result = ((a++) > b) && (a < (b++));
System.out.println(a + ", " + b); // 2, 2
/*
* && : 전위 false 면 후위 조건은 평가하지 않음
* a(1) > b(2) = false -> 이후 a = 2
* 앞단 false로 연산 END
* 따라서 b는 그대로 2 임.
*/
int c = 1, d = 2;
boolean result = ((c++) < d) || (c > (d++));
System.out.println(c + ", " + d); // 2, 2
/*
* || : 전위 true 면 후위 조건은 평가하지 않음
* c(1) < d(2) = true -> 이후 c = 2
* 앞단 true로 연산 END
* 따라서 d는 그대로 2 임.
*/
대입, 증감 연산자
int num = 0;
// 대입연산
num += 5; // num = num + 5; (0+5=5)
num -= 3; // num = num - 3; (5-3=2)
num *= 2; // num = num * 2; (2*2=4)
num /= 4; // num = num / 4; (4/4=1)
num %= 2; // num = num % 2; (1%2=1)
// 증감연산 (현재 num = 1)
System.out.println(++num); // 2
System.out.println(num++); // 2 (다음로직에적용)
System.out.println(num--); // 3 (다음로직에적용)
System.out.println(--num); // 1
/*
* ++a, --a 전위 계산
* a++, a-- 후위 계산
*/
5. 타입변환
byte _byte = 10;
int _int;
byte _byte2;
// 명시적 변환 (자동변환) 4byte << 1byte
_int = _byte;
// _byte2 = _int (불가) 1byte << 4byte
// 강제적 변환 OK
_byte2 = (byte)_int;
// 변환시 처리 방식 주의
int a = 131, b = 22;
double calc = (double)a/b; // 타입 변환 후 계산 적용
double calc2 = (double)(a/b); // 인트 계산 후 타입 변환 적용
System.out.println("double calc = (double)a/b\n" + calc + ", // 타입먼저 전환 후 계산됨 (5.95...)");
System.out.println("double calc2 = (double)(a/b)\n" + calc2 + ", // 인트끼리 먼저 계산 후 타입변환됨 (5)");
산술 승격
byte a = 10;
byte b = 20;
// byte result = a + b; // error
int result = a + b;
TIP
산술 승격 규칙byte, short, char연산 시 →int로 승격
피연산자 중 더 큰 타입으로 승격하여 연산
JVM은 int를 기본 연산 단위로 사용하여 성능을 최적화
32비트(int) 단위로 처리하는 것이 현대 CPU에서 가장 효율적
6. 서식지정 프린트
String name = "라이언";
int age = 99;
double myKey = 199.9d;
System.out.printf("이름: %s, 나이: %d, 키 : %.1f \n", name, age, myKey);
/*
* 출력결과
* 이름: 라이언, 나이: 99, 키 : 199.9
*/
서식 지정자
%s: 스트링%d: 정수형%f: 실수형 (소수점 자릿수 표현 :%.1f,%.2f...)%c: 문자형 char%b: 불리언%n: 줄바꿈 (os독립적)
7. 데이터값 오버플로우 관찰하기
// int 오버플로우
int numMax = Integer.MAX_VALUE;
int max = numMax; // int의 max : 2147483647
int min = (numMax + 1); // int의 min : -2147483648 (max + 1)
// byte 오버플로우
byte b = 127;
b = (byte)(b + 1); // byte의 max = 127에서 + 1 -> -128
// int 언더플로우
int numMin = Integer.MIN_VALUE;
int min2 = numMin; // int의 min : -2147483648
int max2 = (numMin - 1); // int의 max : 2147483647 (min - 1)
/*
* Integer ?
* 자바 api의 java.lang 패키지에 포함된 클래스
* 기본형 int를 객체(참조형)로 다루고 싶을 때 사용 (예: 컬렉션에 저장 등)
*/
설명
- 오버플로우 : 타입의 최대값을 넘으면 최소값으로 순환
- 언더플로우 : 타입의 최소값을 넘으면 최대값으로 순환
Integer는 기본형 int를 객체로 다루는 래퍼 클래스.
8. 조건문
조건문 (if)
int score = 95;
System.out.printf("점수 : %d", score);
// 기본 (if-else)
if(score >= 60) {
System.out.print(", 합격\n");
} else {
System.out.print(", 불합격\n");
}
// 추가조건 (else-if)
char grade;
if(score >= 90) grade = 'A';
else if(score >= 80) grade = 'B';
else if(score >= 70) grade = 'C';
else if(score >= 60) grade = 'D';
else if(score >= 50) grade = 'E';
else grade = 'F';
System.out.printf("등급 : %c%n", grade);
삼항 연산자
int score = 95;
// 삼항 연산
// (a < b) ? true실행 : false실행
System.out.printf((score >= 60) ? "점수 : %d, 합격%n" : "점수 : %d, 불합격%n", score);
조건문 (swich)
int month = (int)(Math.random()*12) + 1;
System.out.printf("랜덤선택 %d월, ", month);
switch (month) {
case 12:
case 1:
case 2:
System.err.println("겨울");
break;
case 3:
case 4:
case 5:
System.err.println("봄");
break;
case 6:
case 7:
case 8:
System.err.println("여름");
break;
case 9:
case 10:
case 11:
System.err.println("가을");
break;
default:
break;
}
break 없을떄 발생되는 과정
// 브레이크없을때 발생되는 과정
int score = 1;
switch (score) {
case 1:
System.out.print("A");
// break 없음!
case 2:
System.out.print("B");
// break 없음!
case 3:
System.out.print("C");
// break 없음!
case 4:
System.out.print("D");
// break 없음!
default:
System.out.print("F");
}
/*
* 출력 결과
* ABCD
*/
WARNING
브레이크 권장하는 이유
break문이 없으면 해당 case부터 다음 모든 case들이 실행됨 (fall-through)
etc.
- JVM에서
public static void main(String[] args)메인 메서드를 이런 형태로 불러서 씀- 메인메서드는 무조건 퍼블릭 접근제어자여야 하고, 스태틱으로 해야 메모리로 올라감.
멋사 부트캠프 개인학습 git : https://github.com/star1431/backend
'멋사 - 부트캠프 19기 : Java > Java' 카테고리의 다른 글
| (08.25) java 기초 - 상속, getter & setter, 오버라이딩 & 오버로딩, 다형성 (0) | 2025.08.25 |
|---|---|
| (08.22) java 기초 - 생성자, this, 메서드체이닝, 패키지, static (2) | 2025.08.25 |
| (08.21) java 기초 - 다차원배열, 객체지향, 클래스, 필드, 메서드 (1) | 2025.08.25 |
| (08.20) java 기초 - 반복문(while & for) , 배열 (1) | 2025.08.25 |
| (08.18) java 기초 - 자바개념, JDK, IDE, 식별, 접근제어자 (0) | 2025.08.25 |