글 번호: 29 작성자: gihun 작성시간: 2023-03-14 15:43:51.543 조회수: 255

자바 기본 문법


기본 문법

변수와 리터럴

int i =1;

기본형

예시)

Book b = new Book();

메모리로 표현한 int i = 1;

1byte

2byte

3byte

4byte

00000000

00000000

00000000

00000001

변수명은 아무 이름이나 될 수 없습니다.

정수타입 변수 x,y,z를 선언하려면?

int x;
int y;
int z;

또는

int x, y, z;

정수 타입 변수 x,y,z를 선언하는데 각각 5, 10, 15 값을 가지도록 선언한다.

int x = 5;
int y = 15;
int z = 15;

또는

int x = 5, y = 10, z = 15;

정수 타입의 변수를 선언하고 출력하기

public class IntPrint {
	public static void main(String[] args) {
		int i = 1;
		System.out.println(i);
		System.out.println(100);
	}
}
1
100

논리형 타입과 논리 연산자

자바의 타입에는 기본형 타입 (primitive type) 과 레퍼런스 타입 (reference type) 2가지 종류가 있다.

참인가? 거짓인가?

논리형 타입 boolean 사용하기

논리형 타입은 언제 사용할까?

참(true)과 거짓(false)이 나오는 식

비교 연산자란?

10 > 5
boolean flag = flase;
flag = 10 > 5;

예제1

package 자바_기본_문법;

public class BooleanTest1 {
    public static void main(String[] args) {
        boolean flag1 = false;
        boolean flag2 = false;
        boolean flag3 = false;
        boolean flag4 = false;
        boolean flag5 = false;
        
        flag1 = 10 > 5;
        flag2 = 10 < 5;
        flag3 = 10 >= 10;
        flag4 = 10 <= 10;
        flag5 = 10 == 10;

        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3);
        System.out.println(flag4);
        System.out.println(flag5);
    }
}

논리연산자 and (&&)와 or (||)

a > 20 && a < 50
a > 20 || a < 50

2가지 조건을 모두 만족해야 하는 경우엔 and 연산자인 &&를 사용하고, 2가지 조건 주 하나만 만족해도 될 경우에는 ||를 사용한다.


&& 대신에 &를 || 대신에 | 를 사용해도 같은 결과가 나온다.

논리 연산자 ^(exclusive-or 또는 XOR 라고 말한다.)

a > 10 ^ a < 20 

부정 연산자 !

boolean a = !(10 > 5);

논리 연산자 정리

IMG_803B31CC0561-1.jpeg

예제2

package 자바_기본_문법;

public class BooleanTest2 {
    public static void main(String[] args) {
        boolean flag1 = false;
        boolean flag2 = false;
        boolean flag3 = false;
        boolean flag4 = false;
        boolean flag5 = false;
        boolean flag6 = false;
        
        // &&는 앞이 거짓이면 뒤는 실생하지 않는다. 
        flag1 = 10 > 5 && 5 < 20;
        flag2 = 10 > 5 & 5 < 20;
        // || 역시 앞이 참이면 뒤는 실행하지 않는다.
        flag3 = 10 >= 10 || 5 > 6;
        flag4 = 10 >= 10 | 5 > 6;
        flag5 = 10 == 10 ^ 5 == 4;
        flag6 = !flag5;

        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3);
        System.out.println(flag4);
        System.out.println(flag5);
        System.out.println(flag6);
    }
}

불린형 타입은 메모리를 얼마나 사용할까?

정수와 실수 그리고 산술 연산자

정수형 타입 byte, short, int, long

IMG_CAB1FF5FE10A-1.jpeg

실수형 타입 float, double

각 타입별 값의 범위

실수형 타입

크기

값의 범위

리터럴 타입 접미사

float

4바이트

(3.4 X 10^-38) ~ (3.4 X 10^38)

F또는 f

double

8바이트

(1.7 X 10^-308) ~ (1.7 X 10^308)

D또는 d (생략 가능함)

float과 double의 유효 자릿수 차이

실수형 타입

지수의 길이

가수의 길이

유효 자릿수

float

8 비트

23 비트

소수 부분 6자리까지 오차없이 표현할 수 있음

double

11 비트

52 비트

소수 부분 15자리까지 오차없이 표현할 수 있음

산술 연산자

a = 5 + 4;
b = 4 - 3;
c = 3 * 2;
d = 5 / 2;
e = 4 % 3;

증가 연산자와 감소 연산자

++a , a++ , --a , a--
a = 5;
a++;

b = 4;
b--;

산술 대입 연산자

a = 5;
a += 3;

b = 4;
b -= 2;

c = 8;
c *= 2;

d = 4;
d /= 2;

e = 5;
e %= 2;

괄호 ()

a = 3;
b = 5;

c = a * (b+5);
d = a * b + 5;

정수와 실수의 최솟값과 최댓값

package 자바_기본_문법;

public class NumberExam01 {
    public static void main(String[] args) {
        int maxInt = Integer.MAX_VALUE;
        int minInt = Integer.MIN_VALUE;

        double maxDouble = Double.MAX_VALUE;
        double minDouble = Double.MIN_VALUE;

        System.out.println(maxInt);
        System.out.println(minInt);

        System.out.println(maxDouble);
        System.out.println(minDouble);
    }
}

오버플로우(overflow)

package 자바_기본_문법;

public class NumberOverflow {
    public static void main(String[] args) {
        int value = 10;
        int maxInt = Integer.MAX_VALUE;

        System.out.println(value + 1);
        System.out.println(maxInt + 1);
    }
}

타입의 변환

수학시간에 배웠던 내용을 기억해보자.

double형 타입은 정수값이 잘 대입된다.

double d1 = 50;
double d2 = 500L;

int형 타입에 실수를 대입하면 오류가 발생한다.

int i1 = 50.0;
int i2 = 25.4f;

실수 값을 정수에 저장하려면 형 변환을 해야한다.

int i1 = (int)50.0;
int i2 = (int)25.6f;

크기가 큰 타입은 작은 타입을 저장할 수 있다.

short s = 5;
int 타입의 변수는 byte, short 타입의 값을 저장할 수 있다.
short 타입의 변수는 byte 타입의 값을 저장할 수 있다.

예제 : 형변환시 주의할 점

package 자바_기본_문법;

public class primitiveCastExam4 {
    public static void main(String[] args) {
        long x2 = 50;
        int i2 = (int)x2;
        System.out.println(x2);
        System.out.println(i2);

        long x3 = Long.MAX_VALUE;
        int i3 = (int)x3;
        System.out.println(x3);
        System.out.println(i3);
    }
}

문자(char)타입

문자타입

IMG_23E88C39C3B5-1.jpeg

문자 타입은 정수 타입이기도 하다.

예제 - 문자를 정수형으로, 정수를 문자로 변환

package 자바_기본_문법;

public class CharExam2 {
    public static void main(String[] args) {
        char c1 = 'a';

        System.out.println((int)c1);

        char c2 = (char)97;

        System.out.println(c2);
    }
}

비트 연산자

비트(bit)와 바이트(byte)

비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자이다.

IMG_F640E90208C3-1.jpeg

비트연산자는 바이트를 구성하고 있는 bit를 연산하는 연산자이다.

    00000000
&   11111111
------------
    00000000

>> 와 <<

예제 shift 연산자

package 자바_기본_문법;

public class BitOperatorExam1 {
    public static void main(String[] args) {
        int a = 4;
        int b = a >> 1; // 2^1 으로 나눈다.
        System.out.println(b);

        int c = 4;
        int d = c << 1; // 2^1 으로 곱한다.
        System.out.println(d);

        // 숫자 4를 1byte로 표현하면
        // 00000100
        // int는 4byte이기 때문에 숫자 4
        // 00000000 00000000 00000000 00000100 이 된다. (3의 경우 00000011)
        // 우측으로 1 시프트
        // 00000000 00000000 00000000 00000010 2가된다.
    }
}

>>> 는 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이된다.

생각해볼 문제

조건문 if와 삼항연산자

if 첫번째 사용법

if(조건문) {
	조건문이 참일 경우 실행되는 블록
}

예제

package 자바_기본_문법;

public class IfExam1 {
    public static void main(String[] args) {
        int a = 5;

        if(a > 4) {
            System.out.println("a는 4보다 큽니다.");
        }
    }
}

if 두번째 사용법

if(조건문) {
	조건문이 참일 경우 실행되는 블록
} else {
	조건문이 거짓일 경우 실행되는 블록
}

예제 2

package 자바_기본_문법;

public class IFExam2 {
    public static void main(String[] args) {
        int a = 3;

        if(a>4) {
            System.out.println("a는 4보다 큽니다.");
        } else {
            System.out.println("a는 4이하입니다.");
        }
    }
}

if 세번째 사용법

if(조건문1) {
	조건문1이 참일 경우 실행되는 블록
} else if(조건문2) {
	조건문2가 참일 경우 실행되는 블록
} else {
	조건문1이나 조건문2에 해당되지 않을 경우 실행되는 블록 
}

예제3

package 자바_기본_문법;

public class IfExam3 {
    public static void main(String[] args) {
        int score = 50;

        if(score >= 90) {
            System.out.println("A");
        } else if(score >= 80) {
            System.out.println("B");
        } else if (score >= 70) {
            System.out.println("C");
        } else if (score >= 60) {
            System.out.println("D");
        } else {
            System.out.println("F");
        }
        System.out.println("프로그램 종료");
    }
}

if 문장에 중괄호가 없을 경우?

package 자바_기본_문법;

public class IfExam4 {
    public static void main(String[] args) {
        int a = 10;

        if (a > 5)
            System.out.println("a는 10보다 큽니다.");
        System.out.println("hello");
    }
}

삼항연산자

조건식 ? 반환값1 : 반환값2

예 - 삼항연산자

package 자바_기본_문법;

public class IfExam5 {
    public static void main(String[] args) {
        int a = 10;

        int value = (a > 5) ? 20 : 30;

        System.out.println(value);
    }
}

조건문 switch

switch

switch 사용법

switch (변수) {
	case1:
			변수가 값1일때 실행된다.
			break;
	case2:
			변수가 값2일 때 실행된다.
			break;
	...
	defualt:
			변수의 값이 어떤 case애도 해당하지 않을 경우 실행된다.
}

예제1

package 자바_기본_문법;

public class SwitchExam1 {
    public static void main(String[] args) {
        int num = 1;
        switch (num) {
            case 1:
                System.out.println("1입니다.");
            case 2:
                System.out.println("2입니다.");
            case 3:
                System.out.println("3입니다.");
        }
    }
}

예제2

package 자바_기본_문법;

public class SwitchExam2 {
    public static void main(String[] args) {
        int num = 1;
        switch (num) {
            case 1 :
                System.out.println("1입니다.");
                break;
            case 2 :
                System.out.println("2입니다.");
                break;
            case 3 :
                System.out.println("3입니다.");
                break;
            default :
                System.out.println("1,2,3이 아닙니다.");
        }
    }
}

예제3

package 자바_기본_문법;

public class SwitchExam3 {
    public static void main(String[] args) {
        char ch = 'a';
        switch(ch) {
            case 'a' :
            case 'A' :
                System.out.println("A입니다.");
                break;
            case 'B':
            case 'b':
                System.out.println("B입니다.");
                break;
            case 'c':
            case 'C':
                System.out.println("C입니다.");
                break;
            default:
                System.out.println("A,B,C가 아닙니다.");
        }
    }
}

예제 4

package 자바_기본_문법;

public class SwitchExam4 {
    public static void main(String[] args) {
        String str = "감자";
        switch (str) {
            case "감자":
                System.out.println("감자입니다.");
                break;
            case "고구마:":
                System.out.println("고구마입니다.");
                break;
            default:
                System.out.println("감자와 고구마가 아닙니다.");
        }
    }
}

찾아보기

반복문 while과 IntelliJ의 디버그모드로 실행하기

while

while 사용법

변수의 초기화
while (탈출 조건식) {
	탈출 조건석이 참일 경우 실행되는 코드;
	변수의 증감식;
}

예제 1

package 자바_기본_문법;

public class WhileExam1 {
    public static void main(String[] args) {
            int i = 1;
            while (i <= 5) {
                System.out.println(i);
                i++;
        }
    }
}

예제2

package 자바_기본_문법;

public class WhileExam2 {
    public static void main(String[] args) {
        int i = 1;
        while (true) {
            // break 는 반복문을 빠져나감 continue는 '조건문'만 실행시키지 않고 반복문은 이어서 실행 
            if(i == 1) break;
            System.out.println(i);
            i++;
        }
    }
}

while문과 후위 증감식

package 자바_기본_문법;

public class WhileExam3 {
    public static void main(String[] args) {
        int i = 0;
        while (i++ < 10) {
            System.out.println(i);
        }
    }
}

while문과 continue

예제 3

package 자바_기본_문법;

public class WhileExam4 {
    public static void main(String[] args) {
        int i = 0;
        while (i++ < 10) {
            if(i % 2 != 0)
                continue;
            System.out.println(i);
        }
    }
}

반복문 do while

do / while 사용법

변수의 초기롸 
do {
		탈출 조건식이 참일 경우 실행되는 코드;
		변수의 증감식;
} while (탈출 조건식);

예제 1

package 자바_기본_문법;

public class DoWhileExam1 {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println(i);
            i++;
        } while (i <= 10);
    }
}

예제 2

package 자바_기본_문법;

public class DoWhileExam2 {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println(i);
            i++;
        } while (i < 1);
    }
}

반복문 for

for

for 사용법

for (변수의 초기화; 탈출조건식; 증감식) {
	탈출 조건식이 참인 경우 실행되는 부분;
}

예제 1

package 자바_기본_문법;

public class ForExam1 {
    public static void main(String[] args) {
        for(int i=0; i<10; i++) {
            System.out.println("*");
        }
    }
}

예제2

package 자바_기본_문법;

public class ForExam2 {
    public static void main(String[] args) {
        for(int i=1; i<=10; i++) {
            System.out.println(i);
        }
    }
}

중첩 반복문

중첩 반복문을 이용한 구구단 출력 1/4

중첩 반복문을 이용한 구구단 출력 2/4

package 자바_기본_문법;

public class StringExam {
    public static void main(String[] args) {
        String str1 = "hello" + 1;
        String str2 = "hello" + true;
        String str3 = "hello" + 50.4;

        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }
}

중첩 반복문을 이용한 구구단 출력 3/4

package 자바_기본_문법;

public class Gugudan1 {
    public static void main(String[] args) {
        for(int i=1; i<=9; i++) {
            System.out.println("1 * "+i+" = "+(i*1));
        }
    }
}

중첩 반복문을 이용한 구구단 출력 4/4

package 자바_기본_문법;

public class Gugudan2 {
    public static void main(String[] args) {
        for(int k=1; k<=9; k++) {
            for(int i=1; i<=9; i++) {
                System.out.println(k+" * "+i+" = "+(k*i));
            }
            System.out.println();
        }
    }
}

반복문과 label

break와 continue문의 한계

예제1

package 자바_기본_문법;

public class LabelExam1 {
    public static void main(String[] args) {
        outter:
        for(int i=0; i<3; i++) {
            for(int k=0; k<3; k++) {
                if(i==0 && k ==2)
                    break outter;
                System.out.println(i+", "+k);
            }
        }
    }
}

예제2

package 자바_기본_문법;

public class LabelExam2 {
    public static void main(String[] args) {
        outter:
        for(int i=0; i<3; i++) {
            for(int k=0; k<3; k++) {
                if(i==0 && k==2)
                    continue outter;
                System.out.println(i+", "+k);
            }
        }
    }
}


댓글 리스트

Created by 송바래

✉ gihun3645@naver.com

🚩경기도, 성남시