본문 바로가기

(08.19) java 기초 - 변수, 타입, 형변환, 연산자, 조건문

@starweb2025. 8. 25. 12:50

[ 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

starweb
@starweb :: starweb 님의 블로그

starweb 님의 블로그 입니다.

공감하셨다면 구독도 환영합니다!

목차