본문 바로가기

Language/JAVA

[명품 JAVA programming] CHAPTER 2 자바 기본 프로그래밍

2.2 식별자

클래스 이름 : 대문자로 시작

변수, 메소드 이름 : 소문자로 시작

상수 : 이름 전체 대문자 표기

 

 

2.3 자바의 데이터 타입

  • 자바 기본타입
논리타입 boolean 1bit, True of False
문자타입 char 2byte
정수타입 byte 1byte
short 2byte
int 4byte
long 8byte
실수타입 float 4byte
double 8byte

8bit = 1byte

 

 

  • 문자열

문자열은 기본 타입에 속하지 않음

JDK에서 제공하는 String 클래스 이용

 

문자열과 기본 타입은 + 연산 실행 가능

→ 기본 타입의 값이 문자열로 바뀌고 두 문자열이 연결된 새로운 문자열 생성

(+ 연산자를 재정의해서 사용)

 

 

  • 변수 선언

변수 : 데이터를 저장하는 공간

변수 선언시 타입 크기의 메모리 할당되며, 프로그램은 실행 중에 값을 쓰고 읽는 공간으로 사용

(int형 변수 선언시 4byte 공간 할당)

 

 

  • 리터럴

리터럴(literal) : 프로그램에 직접 표현한 값

* 강제 형변환

long : 숫자 뒤 'L' 또는 'ㅣ'

float : 'f' 또는 'F'

double : 'd' 또는 'D'

 

특수문자 리터럴

\b : 백스페이스(backspace)

\t : 탭(tab)

\n : 라인피드(line feed)

\f : 폼피드(form feed)

\r : carriage return

\" : 이중 인용부호(double quote)

\' : 단일 인용부호(single quote)

\\ : back slash

 

자바는 숫자로 참, 거짓 사용 불가

public class ex {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = 10>0;
        // boolean c = 1;
        while(true){
            System.out.println("출력 능");
        }
        /*
        while(1){
            System.out.println("출력 불가");
        }
        */
    }
}

 

null 리터럴 : 값을 아직 할당하지 않음 표시

기본타입에는 사용 불가하고 객체 레퍼런스에 대입 (String str = null; -- 문자열 초기화 가능)

문자열은 string 클래스의 객체

 

var 키워드 : 미리 어떤 타입의 변수인지 선언x, 대입 되는 값에 따라 변수 타입이 달라짐

 

 

  • 상수

상수 변수 선언시 final 키워드 사용

final double PI = 3.141592;

 - 상수는 한 번 초기화 하면 변경 불가

 

 

  • 타입 변환

변수나 상수 혹은 리터럴 타입을 다른 타입으로 변경

 1) 작은 타입 변환

public class ex {
    public static void main(String[] args) {
        long m = 25; // 리터럴 25는 int 타입. 25가 long 타입으로 자동 변환
        double d = 3.14*10; // 실수 연산을 하기 위해 10 → 10.0으로 자동 변환
    }
}

 

 2) 강제 타입 변환 : 캐스팅(casting)

public class ex {
    public static void main(String[] args) {
        int n = 300;
        // byte b = n; 컴파일 오류. int 타입은 byte 타입으로 자동 형변환x
        byte b = (byte)n; // n을 byte 타입으로 강제 변환. b = 44
    }
}

 

(byte) : casting으로 타입을 명시적으로 형변환

그러나 강제 변환을 하면 컴파일 오류가 발생하지 않을 뿐 300에서 256을 초과한 만큼, 즉 44(300%256=44)가 변수 b에 저장되어 데이터 손실 발생

 

실수를 정수로 강제 형변환 하면 소수점 이하의 손실 발생

public class ex {
    public static void main(String[] args) {
        double d = 1.9;
        int n = (int)d; // d=1
    }
}

 

 

2.4 자바에서 키 입력

System.in : 표준 입력 스트림

 

* 클래스를 사용하려면 객체를 생성해야 함

 

 

  • 조건 연산

3개의 피연산자로 구성 : 삼항(ternary) 연산자라고도 함

condition ? opr2 : opr3

조건문 condition이 true이면 opr2, false이면 opr3

opr_ : 식 / 값 가능

 

조건연산을 이용한 두 숫자의 차의 절댓값 구하기

public class ex {
    public static void main(String[] args) {
        int a = 13;
        int b = 29;
        System.out.println("두 수의 차 : "+((a>b)?(a-b):b-a));
    }
}

 

 

2.6 조건문

조건식의 결과는 boolean

 

예제 2-13

점수와 학년을 입력받아 60점 이상이면 합격, 미만이면 불합격을 출력. 4학년의 경우 70점 이상이여야 합격

import java.util.*;

public class ex {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
       
        System.out.print("점수를 입력하세요(1~100) : ");
        int score = scan.nextInt();
        System.out.print("학년을 입력하세요(1~4) : ");
        int grade = scan.nextInt();

       
        if(score>=60){
            if(grade != 4)
                System.out.print("합격");
            else if(score>=70)
                System.out.print("합격");
            else
                System.out.print("불합격");
        }
        else
            System.out.print("불합격");
           
        scan.close();
    }
}

 

  • switch 문

값에 따라 여러 방향으로 분기하는 경우

switch(식) {
            case 값1 :
                실행문장 1;
                break;
            case 값2 :
                실행문장 2;
                break;
            ...
            default :
                실행문장 n;
        }

1) '식' 계산

2 ) 식의 결과 값과 일치하는 case문으로 분기

3) case문의 '실행문장' 실행

4) break를 만나면 switch문을 벗어남 (break가 없으면 그냥 밑으로 내려감)

 * default문은 생략 가능

   실행문장은 { } 로 둘러싸지 않음

 

예제 2-14

입력 성적에 대한 학점 부여

import java.util.*;

public class ex {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
       
        System.out.print("점수를 입력하세요(1~100) : ");
        char grade;
        int score = scan.nextInt();

        switch (score/10){
            case 10:
            case 9:
                grade = 'A';
                break;
            case 8:
                grade = 'B';
                break;
            case 7:
                grade = 'C';
                break;
            default:
                grade = 'D';
        }

        System.out.println("당신의 학점은 "+grade+" 입니다.");
           
        scan.close();
    }
}

 

break 문 : switch문을 벗어나도록 해줌

 

case문의 값 : 정수 리터럴, 문자 리터럴, 문자열 리터럴만 허용 (변수나 식은 사용 불가)