- 타입 변환 (형 변환)

연산은 기본적으로 같은 타입의 피연산자와 수행한다.

서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동으로 변환된다.

 

※ 같은 크기 일 때 정수 < 실수 < 문자열 순이다.

 

- 강제 타입 변환 (강제 형 변환)

(타입 변환할 자료형 타입) 변수명;

ex) int -> byte (byte) 변수명


타입 변환 사용해보기!

public class TypeConv1 {
    public static void main(String[] args) {
        byte var1 = 10;
        int var2 = var1;    // 자동 형변환 (작은공간 -> 큰 공간)
        System.out.println(var2);

        int var3 = 128;
        byte var4 =  (byte)var3;    // 강제 형변환 ( 큰 공간 -> 작은 공간)
        System.out.println(var4);   // -128 출력 (byte의 값보다 크기 때문에, byte: -128~127)

        char var5 ='A';     // 2byte 유니코드
        int var6 = var5;    // char -> int (자동 형변환)

        System.out.println(var6);   // 아스키 코드값으로 출력

        int var7 = 10;
        double var8 = 3.0;
        int var9 =3;
        System.out.println(var7 / var9);    // 정수 / 정수 = 정수
        System.out.println(var7 / var8);    // 정수 / 실수 = 실수

    }
}

위 코드의 결과

 

더보기

var2의 경우 작은 공간에서 큰 공간으로 변환시켜주어서 잘 나오는 것을 확인할 수 있다.

var3 =128은 byte의 공간보다 크기 때문에 넘쳐서 128이 아닌 -128이 나오는 것을 확인할 수 있다.

문자의 경우 각 문자마다 대응되는 숫자가 있다. 따라서 char형인 문자를 int에 담아주면 아스키코드에 맞추어 숫자(65)가 출력되는 것을 확인할 수 있다.


✔️ Scanner 클래스

자바에서 여러 가지 데이터를 입력받을 수 있도록 도와주는 대표적인 입력 관련 클래스이다.

java.util 패키지에 존재한다.

 

 

 

✔️ 변수와 객체

변수

Stack에 저장된다.

 

 

객체

 Heap에 값이 저장되고 그 주소 값이 Stack에 참조 변수의 이름으로 저장된다.

클래스이름 변수이름(참조변수) = new 생성자명();

Stack : 기본적으로 저장되는 공간
Heap : String 같은 여러 데이터들을 저장하기 위한 공간

 


✔️ String 클래스

String str = new String("자바");

String str = "자바";  // 리터럴 표기법, 클래스(Heap에 저장)

 

== (같다, Stack에서만 가능(주소 비교))

. equals(클래스의 같다 비교 시 사용,  Heap에서만 가능)

 

String str1 = "자바";

String str2 = str1;

위 두 개는 == 로 비교하면 같다가 나옴 (주소를 전달해준 것이기 때문에 Stack에 있는 참조 변수의 주소가 같기 때문임.)


- 제어문

프로그램의 흐름을 제어하는 문장을 의미한다.

 

 

1. if문

if문 (조건식) 조건식의 결과가 true인 경우 실행할 문장;

if문 (조건식) {
	조건식의 결과가 true인 경우 실행할 문장;
    ...
}

첫 번째의 경우는 문장이 하나일 때 사용하고, 두 번째의 경우는 실행할 문장이 하나 이상인 경우에 사용한다.

두 번째의 경우에는 { } (중괄호) 안에 있는 문장이 다 실행되어야 if문을 벗어난다.

 

 

 

* if ~ else 문과 if ~ else if 문

if (조건식) {
		조건식의 결과가 true인 경우 실행할 문장;
        ...
} else {
		조건식의 결과가 false인 경우 실행할 문장;
        ...
}


if(조건식) {
	조건식1의 결과가 true인 경우 실행할 문장;
    ...
} else if (조건식2) {
	조건식2의 결과가 true인 경우 실행할 문장;
    ...
} else {
	위의 조건식의 결과 모두가 false인 경우 실행할 문장;
    ...
}

첫 번째의 if ~ else문은 조건식 하나로 true, false가 나뉘는 경우에 사용한다.

두 번째의 if ~ else if문은 여러 조건식으로 true, false가 나뉘고 마지막에 모든 조건식의 결과가 false인 경우에 실행하는 문장을 넣을 수 있다.

 


if문을 이용한 성적 프로그램 만들기!

import java.util.Scanner;

public class example {
    public static void main(String[] args) {
        /*    성적 프로그램
             1. 3과목 변수를 만들어 값을 입력받음 (Scanner를 사용)
             2. 위 점수를 변수에 저장하고 총점과 평균, 학점을 구함
                  ex) kor + math + com, (kor + math +com) / 3
              단, 학점은 평균을 기준으로 90점이상은 A,  80점이상은 B, 70점 이상은 C,
              60점 이상은 D 나머지 F
        */

        Scanner sc = new Scanner(System.in);

        System.out.print("국어 점수를 입력하세요 : ");
        int kor = sc.nextInt();
        System.out.print("수학 점수를 입력하세요 : ");
        int math = sc.nextInt();
        System.out.print("영어 점수를 입력하세요 : ");
        int eng = sc.nextInt();

        System.out.println();

        int sum = kor + math + eng;
        double avg = sum / 3.0;

        System.out.println("성적의 총점 : " + sum);
        System.out.println("성적의 평균 : " + avg);

        if(avg >= 90) {
            System.out.println("A학점 입니다.");
        } else if (avg >= 80) {
            System.out.println("B학점 입니다.");
        } else if (avg >= 70) {
            System.out.println("C학점 입니다.");
        } else if (avg >= 60) {
            System.out.println("D학점 입니다.");
        } else {
            System.out.println("F학점 입니다.");
        }
    }
}

위 코드의 결과

 


2. switch문

if문과 비슷하지만 조금 더 정형화된 형태를 가지고 있다.

특정 값과 일치하는 값을 찾아 실행한다.

switch (변수) {
	case 값1 :
    	값1 == 변수 일 경우 실행할 문장;
        ...
   		break;
	case 값2:
    	값2 == 변수 일 경우 실행할 문장;
        break;
    ...
    default:
    	값이 변수와 모두 다를 경우 실행할 문장;
}

 


switch문을 이용해 월을 입력했을 때, 월에 맞는 마지막 날 출력하기!

 

import java.util.Scanner;

public class example {
    public static void main(String[] args) {
       // Switch문으로 월 입력 시 일 출력
        Scanner sc = new Scanner(System.in);

        System.out.print("월 을 입력하세요 : ");
        int month = sc.nextInt();

        switch (month) {
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                System.out.println("31일");
                break;
            case 4: case 6: case 9: case 11:
                System.out.println("30일");
                break;
            case 2:
                System.out.println("28일 또는 29일");
                break;
            default:
                System.out.println("1~12까지 숫자를 입력하세요!");
                break;
        }
    }
}

위 코드의 결과_1
위 코드의 결과_2
위 코드의 결과_3
위 코드의 결과_4


switch문을 이용해 성적 프로그램 만들기!

 

import java.util.Scanner;

public class example {
    public static void main(String[] args) {
      /*  성적 프로그램
            1. 3과목 변수를 만들어 값을 입력받음 (Scanner를 사용)
            2. 위 점수를 변수에 저장하고 총점과 평균, 학점을 구함
                    ex) kor + math + com, (kor + math +com) / 3
              단, 학점은 평균을 기준으로 90점이상은 A,  80점이상은 B, 70점 이상은 C,
              60점 이상은 D 나머지 F
           3. switch문으로 작성
        */

        Scanner sc = new Scanner(System.in);

        System.out.print("국어 점수를 입력하세요 : ");
        int kor = sc.nextInt();
        System.out.print("수학 점수를 입력하세요 : ");
        int math = sc.nextInt();
        System.out.print("역사 점수를 입력하세요 : ");
        int his = sc.nextInt();

        int sum = kor + math + his;
        double avg = (sum / 3);
        int con = (int)(avg / 10);

        System.out.println("성적 총점 : " + sum);
        System.out.println("성적 평균 : " + avg);
        System.out.print("학점은 ");

        switch(con) {
            case 10: case 9:
                System.out.println("A학점 입니다.");
                break;
            case 8:
                System.out.println("B학점 입니다.");
                break;
            case 7:
                System.out.println("C학점 입니다.");
                break;
            case 6:
                System.out.println("D학점 입니다.");
                break;
            default:
                System.out.println("F학점 입니다.");
                break;
        }
    }
}

위 코드의 결과

switch문은 if문과 다르게 범위를 지정할 수 없다. 숫자의 경우 딱 떨어지게 조건을 주어야하기 때문에 double형인 avg를 10으로 나누고 그것을 int형으로 바꾸어주어서 소수점 아래 자리를 날려주어 딱 떨어지게 조건을 준다.

 

 

 

복사했습니다!