No. 01

 

 

조건문


조건문은 프로그래밍에 있어서 매우 중요하다. 조건문을 이용하여 조건의 참,거짓에 따라 서로 다른 작업을 수행할 수 있다.

조건문에 사용하는 조건식의 결과는 반드시 true 또는 false이어야 하며, 다음과 같은 종류가 있다.

if문, if-else문, if-else if문, switch




No. 02

 

 

단순 if문


if문

if(조건식) {

  ... 실행 문장...

}

  • 가장 기본적인 조건문이다.
  • '조건식'과 '괄호{}'로 이루어져 있다. 괄호를 '블럭(block)'이라고 한다.
  • 블럭 내의 문장이 하나뿐일 경우 괄호{}를 생략할 수 있다. (가독성을 위해 생략하지 않는 것을 추천)
  • 조건식이 참(true)이면  if 내부의 실행 문장이 실행되며, 거짓(false)이면 if문을 벗어난다.


예제1 (짝수, 홀수 판단)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("짝수 홀수를 판단할 숫자를 입력하세요.");        
        String input = scanner.nextLine();        
        int n = Integer.parseInt(input);        
        
        //짝수일 때만 실행
        if(n%2 ==0) {
            System.out.println(n+"은 짝수입니다.");
        }
        
        //홀수일 때만 실행
        if(n%2 != 0) System.out.println(n+"은 홀수입니다.");         
 
    }//main
    
}//class
                                                          Colored By Color Scripter

실행 결과

짝수 홀수를 판단할 숫자를 입력하세요.

23

23은 홀수입니다.


if문을 사용하여 짝수인지 홀수인지 구분하는 예제이다. 입력한 n을 나눈 나머지가 0이면 짝수이고 아니면 홀수이다.

if문의 조건식이 true 일 때만 if문 내부의 실행문장을 실행하고 false일 때는 건너띈다.

실행문장이 하나일 경우에만 괄호{}를 생략 가능하다.



◈ 예제2 (학점 판단)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);        
        char grade = ' ';
        
        if(score >= 90) { grade = 'A'; }
        
        if(score >= 80 && score <=89) { grade = 'B'; }
        
        if(score >= 70 && score <=79) { grade = 'C'; }
        
        if(score >= 60 && score <=69) { grade = 'D'; }
        
        if(score <=59) { grade = 'F'; }
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                           Colored By Color Scripter


실행 결과

점수를 입력하세요.

84

당신의 학점은 : B


점수를 입력받아 학점을 판단하는 예제이다.




No. 03

 

 

if-else문


단순 if문은 if문의 조건식이 참일 경우에만 실행 문장이 실행되고, 조건식이 거짓인 경우에는 아무 일도 하지 않고 if문을 벗어난다.

if-else문은 조건식이 거짓인 경우에 else블럭의 문장을 수행한다. 조건 연산자와 같은 역할을 하지만 가독성에서 뛰어 나기 때문에 if-else문을 선호한다.


if-else문

if (조건식) {

 조건식이 참일 경우 ... 실행 문장...

}

else {

 조건식이 거짓일 경우 ... 실행 문장...

}

  • else문 역시 실행문장을 블럭{}으로 감싸주어야 한다.
  • 조건식이 참(true)일 경우는 if문 블럭안의 실행문장을 거짓(false)일 경우 else문 블럭안의 실행 문장을 수행한다.


◈ 예제 (짝수, 홀수 판단)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("짝수 홀수를 판단할 숫자를 입력하세요.");        
        String input = scanner.nextLine();        
        int n = Integer.parseInt(input);
        
        if(n%2 ==0) {
            System.out.println(n+"은 짝수 입니다.");
        }
        else {
            System.out.println(n+"은 홀수 입니다.");
        }    
 
    }//main
    
}//class
                                                        Colored By Color Scripter


실행 결과

짝수 홀수를 판단할 숫자를 입력하세요.

23

23은 홀수입니다.


단순 if문은 if문의 수에 따라 조건식도 적어야 하지만 둘 중 하나를 선택해야 할 경우 if-else문을 사용하면 더 효율적으로 프로그래밍 할 수 있다.

조건 연산자로도 같은 결과를 볼 수 있지만 가독성 면에서 if-else문이 더 좋다.



No. 04

 

 

if-else if문 (다중 if문)


if-else문의 두 가지 경우 중 하나가 실행되는 구조다. 처리해야 할 경우의 수가 셋 이상일 경우에는 여러 개의 조건식을 쓸 수 있는 'if- else if'문을 사용하면 된다. 다중 if문은 여러 가지 모양으로 구성할 수 있으나 전형적인 모양은 다음과 같다.


if-else if문

if (조건식1) {

   조건식1이 참일 경우 ... 실행 문장...

}

else if (조건식 2) {

   조건식2가 참일 경우 ... 실행 문장...

}

else if (조건식 3) {

   조건식3이 참일 경우 ... 실행 문장...

}

else if (조건식 n) {

   조건식n이 참일 경우 ... 실행 문장...

}

else{

   위의 조건식 모두를 만족하지 않을 경우 ... 실행 문장...   

}

  • 여러 개의 조건식중 참(true)인 조건식을 만나면 해당 블럭의 실행문장을 수행하고 if문 전체를 벗어난다.(하나만 실행하고 종료)
  • 첫 번째 조건식부터 순서대로 비교한다.
  • else 블럭은 생략가능하다.


◈ 예제 (학점 판단)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);
        char grade = ' ';
        
        if (score >= 90) { grade = 'A'; }
        else if(score >= 80) { grade = 'B'; } // score >= 80 && score <= 89
        else if(score >=70) { grade = 'C'; }  // score >= 70 && score <= 79
        else if(score >= 60) { grade = 'D'; } // score >= 60 && score <= 69
        else { grade = 'F'; }  // score <= 59
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                                                        Colored By Color Scripter


실행 결과

점수를 입력하세요.

84

당신의 학점은 : B


첫 번째 조건식부터 차례대로 판단하기 때문에 90이상이 아니면 다음 if문을 검사하기 때문에 'score>=80 && score<=89'의 조건을 중복 해서 적지 않고 'score>=80'로 간단히 쓸 수 있다.

단순 if문으로 여러개 사용할 때보다 속도면에서도 효율적이다. 단순 if문은 조건식마다 모두 검사하는 반면 if-else if문은 차례로 조건식을 검사하면서 만족하는 조건식이 있으면 문장을 수행하고 다음 if문은 검사하지도 않고 종료하기 떄문이다.




No. 05

 

 

중첩 if문


if문 블럭 내에 또 다른 if문을 사용할 수 있다. 이것을 중첩 if문이라고 부르며, 횟수에느 제한이 없다.


◈ 예제1 (팔굽혀펴기 등급 판단)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("당신의 나이를 입력하세요.");
        String input1 = scanner.nextLine();        
        int age = Integer.parseInt(input1);        
        
        System.out.println("팔굽혀펴기 횟수를 입력하세요.");        
        String input2 = scanner.nextLine();        
        int score = Integer.parseInt(input2);
        String grade = "";
        
        if(age <=25) { //나이가 25세 이하일 경우
            if(score >=72) {
                grade="특급";            
            }
            else if(score >= 64) {
                grade = "1급";
            }
            else if(score >= 56) {
                grade = "2급";
            }            
        }        
        else if(age <= 30) { // 26~30세 일 경우
            if(score >=70) {
                grade="특급";            
            }
            else if(score >= 62) {
                grade = "1급";
            }
            else if(score >= 54) {
                grade = "2급";
            }            
        }
        
        System.out.println("팔굽혀 펴기 등급  : "+grade);        
 
    }//main
    
}//class
                                                   Colored By Color Scripter


실행 결과

당신의 나이를 입력하세요.

23

팔굽혀 펴기 횟수를 입력하세요.

65

팔굽혀 펴기 등급  : 1급


팔굽혀펴기 등급을 판단하는 예제이다. 체력검정의 경우 나이에 따른 횟수에 등급이 판단되므로 위와 같이 중첩if문을 사용하여 프로그래밍 할 수 있다.

중첩 if문을 사용할 때 처럼 복잡해지는 경우 블럭{}으로 잘 구분해주어야 가독성에도 좋고 예상하지 못한 결과를 피할 수 있다.



No. 06

 

 

switch문


하나의 식의 값에 따라 여러 결과를 내고자 하는 경우 if문을 사용하게 되면 else-if를 계속 추가해야 하므로 조건식이 많아져서 복잡해지고 처리 시간도 많이 걸린다. 그래서 처리할 경우의 수가 많은 경우에는 if문보다 switch문으로 작성하는 것이 좋다. 다만, switch문은 제약조건이 있기 때문에 if문으로 처리 해야 하는 경우도 있다.


switch문

switch (조건식) {

case 값1 :

조건식이 값1일 경우 ... 실행 문장...

break;

case 값2 :

조건식이 값2일 경우 ... 실행 문장...

break;

case 값n :

    조건식이 값n일 경우 ... 실행 문장...

break;

default :

조건식의 결과에 맞는 값이 없는 경우 ... 실행 문장... 

}

  • 조건식을 계산하고 결과와 일치하는 case문으로 이동하여 문장을 실행한다.
  • switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
  • case문의 값은 중복되지 않아야 한다.
  • break문이나 switch문의 끝을 만나면 switch문을 빠져나간다.
  • break문을 적지 않으면 다음 case문이 조건식의 값이 아니더라도 실행하므로 적어주어야 한다. (고의적으로 생략하는 경우도 있다.)


◈ 예제1 (학점 판단)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);
        char grade = ' ';
        
        switch(score/10) {
            case 10 :
                grade = 'A';
                break;
            case 9 :
                grade = 'A';
                break;
            case 8 :
                grade = 'B';
                break;
            case 7 :
                grade = 'C';
                break;
            case 6 :
                grade = 'D';
                break;
            default :
                grade = 'F';
                
        }//switch
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                      Colored By Color Scripter


실행 결과

점수를 입력하세요.

75

당신의 학점은 : C


점수를 입력받아 학점을 판단하는 예제이다. 조건식을 보면 score/10 인데 점수를 나누면 몫을 얻을 수 있고 몇점대인지 알 수 있다.

이때 몇점대인지의 결과만 가지고 case문으로 판단하여 학점을 판단할 수 있다.



◈ 예제2 (학점 판단)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Scanner;
 
public class ControlStatement {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("점수를 입력하세요.");        
        String input = scanner.nextLine();        
        int score = Integer.parseInt(input);
        char grade = ' ';
        
        switch(score/10) {
            case 10 :            
            case 9 :
                grade = 'A';
                break;
            case 8 :
                grade = 'B';
                break;
            case 7 :
                grade = 'C';
                break;
            case 6 :
                grade = 'D';
                break;
            default :
                grade = 'F';
                
        }//switch
        
        System.out.println("당신의 학점은 : "+grade);
 
    }//main
    
}//class
                                     Colored By Color Scripter


실행 결과

점수를 입력하세요.

75

당신의 학점은 : C


위의 결과와 같은 결과를 얻을 수 있지만 한가지 다른 것이 있다. 예제1에서는 만점을 받았을 경우 10 일때와 9일때 둘다 grade변수에 일일이 학점을 입력해주었으나 위와 같이 break문을 생략하면 10점일때와 9점일때 모두 하나의 실행문장으로 처리될 수 있다.

올바른 방법으로 이용한다면 문제가 되지 않지만 실수로 break문을 생략했다면 원하지 않는 결과가 나올 수 있으니 주의하여 사용하자.


switch문 역시 if문처럼 중첩으로 사용할 수 있으며, if문과도 조합하여 사용할 수도 있다.




'JAVA' 카테고리의 다른 글

[Java 16] 증감 연산자, 조건 연산자  (0) 2017.11.26
[Java 15] 논리 연산자, 비트 연산자, 쉬프트 연산자  (0) 2017.11.25
[Java 14] 비교 연산자  (0) 2017.11.23
[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21

No. 01

 

 

증감 연산자  ++  --


증감연산자는 변수 자신의 값을 1증가 시키거나 감소시킨다. 연산자가 피연산자 앞 또는 뒤에 붙는가에 따라서 값이 달라지므로 주의하여야 한다.



예제1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Operator {
 
    public static void main(String[] args) {
        //증감 연산자의 독립 사용
        
        int i = 1;
        
        i++; // i = i + 1;과 같다.
        System.out.println("i++의 결과 :"+i);
        
        i = 1;
        ++i; // i = i + 1;과 같다.
        System.out.println("++i의 결과 :"+i);
        
        i = 1;
        i--; // i = i - 1;과 같다.
        System.out.println("i--의 결과 :"+i);
        
        i = 1;
        i--; // i = i - 1;과 같다.
        System.out.println("--i의 결과 :"+i);        
                        
    }//main    
 
}//class
                              Colored By Color Scripter


실행 결과

i++의 결과 : 2

++i의 결과 : 2

i--의 결과 : 0

--i의 결과 : 0


위의 예제처럼 단독으로 증감 연산자를 사용시 연산자를 사용한 위치에 대한 결과의 차이가 없다.



◈ 예제2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Operator {
 
    public static void main(String[] args) {
        //증감 연산자의 독립 사용이 아닐 때
        
        int i = 1, j = 0;
        
        j = i++; // 연산 과정 : 1] j = i를 실행, 2] i를 1 증가 
        System.out.printf("j = i++의 결과 : i=%d, j=%d%n",i,j);
        
        i = 1;
        j = 0;
        j = ++i; // 연산 과정 : 1] i를 1증가, 2] j = i를 실행
        System.out.printf("j = ++i의 결과 : i=%d, j=%d%n",i,j);
        
        i = 1;
        j = 0;
        j = i--; // 연산 과정 : 1] j = i를 실행, 2] i를 1 감소 
        System.out.printf("j = i--의 결과 : i=%d, j=%d%n",i,j);
        
        i = 1;
        j = 0;
        j = --i; // 연산 과정 : 1] i를 1감소, 2] j = i를 실행
        System.out.printf("j = --i의 결과 : i=%d, j=%d%n",i,j);        
                        
    }//main    
 
}//class
                                                     Colored By Color Scripter


실행 결과

j = i++의 결과 : i=2, j=1

j = ++i의 결과 : i=2, j=2

j = i--의 결과 : i=0, j=1

j = --i의 결과 : i=0, j=0


· 증감 연산자가 단독으로 사용되지 않은 경우 연산자의 위치에 따른 결과는 다르다. 그러므로 사용시 위치에 주의해서 사용해야 한다.

· 뒤에 사용할 때는 앞의 식을 먼저 실행시킨후 자신의 값을 증가시키거나 감소시킨다.

· 앞에 사용할 때는 자신의 값을 증가시키거나 감소시킨후 식을 계산한다.




No. 02

 

 

조건 연산자  ? :


조건 연산자는 세 개의 피연산자로 구성되어 삼항 연산자라고도 한다. 


조건 연산자

조건식 ? 식1 : 식2

  • 조건식이 참(true)일 때 결과는 식1의 값이 된다.
  • 조건식이 거짓(false)일 때 결과는 식2의 값이 된다.
  • 조건식을 괄호()로 둘러싸면 가독성을 높일 수 있지만 필수는 아니다.


◈ 예제1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Operator {
 
    public static void main(String[] args) {
        //조건 연산자  ? :
        
        int a = 10, b = 20;
        int result;
        
        // 1] 변수를 사용하여 저장
        result = (a>b)? (a-b) : (b-a);        
        System.out.println("1] 두 수의 차이 : "+result);
        
        // 2] 변수를 사용하지 않고 바로 출력
        System.out.println("2] 두 수의 차이 : "+ ((a>b)? (a-b) : (b-a)));        
        
    }//main    
 
}//class
                                                               Colored By Color Scripter


실행 결과

1] 두 수의 차이 : 10

2] 두 수의 차이 : 10


변수를 사용하여 저장할 수도 있고, 다른 연산과 바찬가지로 바로 print문 안에 사용하여 결과를 출력할 수도 있다.

두 수의 차이를 구하는 것이기 때문에 a에서 바로 b를 빼버리면 b가 클 경우 '-'값이 나오기 때문에 조건 연산자로 차이값만을 구할 수 있도록 하였다.

a>b보다 크다는 조건식이 참이면 a에서 b를 바로 빼고, 거짓이면 b에서 a를 빼서 차이값을 구한다.



◈ 예제2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Scanner;
 
public class Operator {
 
    public static void main(String[] args) {
        //조건 연산자  ? :
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("알파벳인지 판단할 문자를 입력하세요.");
        String strC = scanner.nextLine();
        char c = strC.charAt(0);
        System.out.println((('a'<=c && c<='z') || ('A'<=c && c<='Z'))? "입력한 문자는 알파벳이다.": "입력한 문자는 알파벳이 아니다.");
        
    }//main    
 
}//class
                                                                                                                              Colored By Color Scripter


실행 결과

알파벳인지 판단할 문자를 입력하세요.

입력한 문자는 알파벳이 아니다.


조건식에 따른 결과로 수식뿐만 아니라 문자열도 나오게 할 수 있다.




'JAVA' 카테고리의 다른 글

[Java 17] 조건문 - if, switch  (0) 2017.11.27
[Java 15] 논리 연산자, 비트 연산자, 쉬프트 연산자  (0) 2017.11.25
[Java 14] 비교 연산자  (0) 2017.11.23
[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21

No. 01

 

 

논리 연산자  &&  ||  !


논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용한다.

논리 연산자 '&&'은 '그리고(AND)'에 해당하며, '||'은 '또는(OR)'에 해당한다.




논리 연산자의 연산 결과1

x

y

x || y

x && y

 true

true

true

true

 true

false

true

false

false

true

true

false

false

false

false

false


논리 연산자의 연산 결과2

x

!x

true

false

false

true



예제1 (AND, OR 연산자)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;
 
public class Operator {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        //1] 10 < x < 20에 있는지 판단
        System.out.println("1] 10과 20사이에 있는지 판단할 숫자 x를 입력하세요.");
        String strX = scanner.nextLine();
        int x = Integer.parseInt(strX);
        System.out.printf("x=%d, x > 10 && x < 20 인가?  %b%n",x, x>10 && x<20);
        System.out.println();
        
        //2] i가 2의 배수 또는 3의 배수인지 판단
        System.out.println("2] 2의 배수 또는 3의 배수인지 판단할 숫자 i를 입력하세요.");
        String strI = scanner.nextLine();
        int i = Integer.parseInt(strI);
        System.out.printf("i=%d, i%%2==0 || i%%3==0 인가?  %b%n",i, i%2==0 || i%3==0);
        System.out.println();
        
        //3] c가 알파벳인지 아닌지 판단
        System.out.println("3] 알파벳인지 판단할 문자 c를 입력하세요.");
        String strC = scanner.nextLine();
        char c = strC.charAt(0); //String -> char로 변환하는 메소드
        System.out.printf("c=%c, 입력한 문자는 알파벳인가?  %b%n",c, ('a'<=c && c<='z') || ('A'<=c && c<='Z'));
        
    }//main
 
}//class
                                                                                                          Colored By Color Scripter


실행 결과

1] 10과 20사이에 있는지 판단할 숫자 x를 입력하세요.

23

x=23, x > 10 && x < 20 인가?  false


2] 2의 배수 또는 3의 배수인지 판단할 숫자 i를 입력하세요.

41

i=41, i%2==0 || i%3==0 인가?  false


3] 알파벳인지 판단할 문자 c를 입력하세요.

B

c=B, 문자 c는 알파벳인가?  true


1]의 경우 일상생활에서 표현하는 것은 10 < x < 20 과 같이 표현할 수 있지만 자바에서는 이런 문법이 없고 하나씩 비교한다음 AND 연산자로 묶어 주어야 한다. x가 10보다 큰것도 만족하고 x가 20보다 작은것도 만족했을 때만 true가 나오는 것을 볼 수 있다.

2]의 경우 OR연산자를 사용한 경우로 2의 배수일때나 3의 배수 둘중 하나만 만족하여도 true가 나온다. 입력한 41은 둘다 만족하지 않았기 때문에 false값이 나왔다.

3]의 경우처럼 여러개의 연산도 논리연산자로 이어서 사용할 수 있다.



◈ 예제2(부정 연산자)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Operator {
 
    public static void main(String[] args) {
        
        boolean b = true;
        int i = 15;
        
        System.out.printf("b=%b, !b의 결과 : %b%n",b,!b);
        System.out.printf("i=%d, !(i>10 && i<20)의 결과 : %b%n",i, !(i>10 && i<20)); 
        
    }//main
 
}//class
                                                                       Colored By Color Scripter


실행 결과

b=true, !b의 결과 : false

i=15, !(i>10 && i<20)의 결과 : false


부정 연산자를 사용하면 피연산자의 논리값에 반대되는 결과를 반환한다.

피 연산자가 true이면 false를, false이면 true를 반환한다.




No. 02

 

 

비트 연산자  &  |  ^  ~


비트 연산자는 피연산자의 각 비트들을 대상으로 연산이 이루어지며 총 4개의 연산자가 있다.




비트 연산자의 연산 결과1

x

y

x | y

x & y

x ^ y

1

1

1

1

0

1

0

1

0

1

0

1

1

0

1

0

0

0

0

0


비트 연산자의 연산 결과2

x

~x

1

0

0

1



◈ 예제(비트 연산자)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 10; //2진수로 변환시 1010
        int y = 12; //2진수로 변환시 1100
        
        System.out.println("x = \t"+toBinaryString(x));
        System.out.println("y = \t"+toBinaryString(y));
        System.out.println("x|y = \t"+toBinaryString(x|y));
        System.out.println("x&y = \t"+toBinaryString(x&y));
        System.out.println("x^y = \t"+toBinaryString(x^y));
        System.out.println("~x = \t"+toBinaryString(~x));
                        
    }//main
    
    //10진 정수를 2진수로 변환하는 메서드
    static String toBinaryString(int number) {
        String zero = "00000000000000000000000000000000";
        String binary = zero + Integer.toBinaryString(number);
        return binary.substring(binary.length()-32);    
    }
 
}//class
                                                Colored By Color Scripter


실행 결과


toBainaryString() 메서드는 신경쓸 필요 없다 단지 비트연산자가 컴퓨터 내부에서 어떻게 처리되는지 문자열로 표현해주기 위해 사용했다.

비트 연산자를 사용한 결과가 어떻게 나오는지 볼 수 있다. 

· 비트AND연산자'&'은 피연산자 양 쪽이 모두 1이일 때만 1을 결과로 얻고, 그 외에는 0을 얻는다.

· 비트OR연산자'|'은 피연산자 중 한쪽이 1이면 1을 결과로 얻고, 그 외에는 0을 얻는다.

· 비트XOT연산자 '^'은 피연산자의 값이 서로 다를 때만 1을 결과로 얻고, 그 외에는 0을 얻는다.

· 비트 전환 연산자는 0은 1로, 1은 0으로 바꾼다.




No. 03

 

 

쉬프트 연산자  <<  >>


쉬프트 연산자는 피연산자의 각 비트들을 '오른쪽(>>)' 또는 '왼쪽(<<)'으로 이동시킨다.





◈ 예제(쉬프트 연산자)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 10; //2진수로 변환시 1010
        int y = 12; //2진수로 변환시 1100
        
        System.out.println("x = \t\t"+toBinaryString(x));        
        System.out.println("x >> 1 = \t"+toBinaryString(x >> 1));// 오른쪽으로 1칸 이동
        System.out.println("x >> 2 = \t"+toBinaryString(x >> 2));// 오른쪽으로 2칸 이동
        System.out.println("y = \t\t"+toBinaryString(y));
        System.out.println("y << 1 = \t"+toBinaryString(y << 1));// 왼쪽으로 1칸 이동
        System.out.println("y << 2 = \t"+toBinaryString(y << 2));// 왼쪽으로 2칸 이동
                        
    }//main
    
    //10진 정수를 2진수로 변환하는 메서드
    static String toBinaryString(int number) {
        String zero = "00000000000000000000000000000000";
        String binary = zero + Integer.toBinaryString(number);
        return binary.substring(binary.length()-32);    
    }
 
}//class
                                                                          Colored By Color Scripter


실행 결과


지정한 숫자만큼 자리를 이동하는 것을 볼 수 있다.


· 왼쪽 쉬프트(<<n)는 을 곱한 결과와 같다.

· 오른쪽 쉬프트(>>n)는 으로 나눈 결과와 같다.




'JAVA' 카테고리의 다른 글

[Java 17] 조건문 - if, switch  (0) 2017.11.27
[Java 16] 증감 연산자, 조건 연산자  (0) 2017.11.26
[Java 14] 비교 연산자  (0) 2017.11.23
[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21

No. 01

 

 

비교 연산자(Comparison Operator)


변수나 상수의 값을 비교할 때 쓰이는 연산자로서 결과가 항상 true 또는 false인 논리값(boolean)이다.

비교하는 피연산자의 타입이 서로 다를 경우에는 자료형의 범위가 큰 쪽으로 자동 형변환하여 타입을 일치시킨 후에 비교한다.





No. 02

 

 

대소비교 연산자  <  >  <=  >=


두 피연산자의 값의 크기를 비교하는 연산자이다. boolean을 제외한 기본형에 사용할 수 있지만, 참조형에는 사용할 수 없다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Operator {
 
    public static void main(String[] args) {        
        //대소비교 연산자 < > <= >=
        
        //'A'유니코드:65, 'B'유니코드:66
        System.out.printf("'A' > 'B' \t 결과:%b%n", 'A' > 'B');
        System.out.printf("'A' < 'B' \t 결과:%b%n", 'A' < 'B');
        
        int x = 100;
        
        System.out.printf("x >= 100 \t 결과:%b%n", x >= 100);
        System.out.printf("x <= 10 \t 결과:%b%n", x <= 10);                    
 
    }//main
 
}//class
                                                                  Colored By Color Scripter


실행 결과

'A' > 'B' 결과:false

'A' < 'B' 결과:true

x >= 100 결과:true

x <= 10 결과:false


· 문자의 비교시에는 유니코드로 비교된다.




No. 03

 

 

등가비교 연산자  ==  !=


두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다. 참조형을 포함한 모든 자료형에 사용할 수 있다.

기본형의 경우 저장되어 있는 값을 비교하고 참조형의 경우 객체의 주소값을 비교한다.


◈ 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        //등가비교 연산자 == !=
                
        System.out.printf("10 == 10.0f \t 결과:%b%n", 10 == 10.0f);//float형으로 자동현변환 후 비교됨
        System.out.printf("'1' == 1 \t 결과:%b%n", '1' == 1);    //문자'1'의 유니코드는 49                
        System.out.printf("'A'+1 == 'B' \t 결과:%b%n", 'A'+1 == 'B');
        
        int x = 100;
        System.out.printf("x != 100 \t 결과:%b%n", x != 100);//같지 않을 경우 true                    
 
    }//main
 
}//class
                                                                                               Colored By Color Scripter


실행 결과

10 == 10.0f 결과:true

'1' == 1            결과:false

'A'+1 == 'B' 결과:true

x != 100        결과:false


· 타입이 다를 경우 범위가 더 큰 쪽으로 자동 형변환되어 타입을 일치시킨 후 비교된다.



◈ 예제2 (문자열의 비교)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Operator {
 
    public static void main(String[] args) {
        
        //문자열의 비교
        String str1 = "Hello";
        String str2 = new String("Hello");
                
        System.out.printf("str1==\"Hello\\t결과:%b%n",str1=="Hello");
        System.out.printf("str2==\"Hello\\t결과:%b%n",str2=="Hello");
        
        //문자열 비교시에는 equals() 메소드를 사용해야 한다.
        System.out.printf("str2.equals(\"Hello\") \t결과:%b%n",str2.equals("Hello"));    
        
    }//main
 
}//class
                                                                           Colored By Color Scripter


실행 결과

str1=="Hello" 결과:true

str2=="Hello" 결과:false

str2.equals("Hello") 결과:true


str1과 str2 두개 다 "Hello"의 문자열을 저장하고 있다. 그럼에도 불구하고 결과 값이 다른이유는 str1의 경우는 String은 클래스이지만 특별한 경우로 기본자료형처럼 표현하여 사용할 수 있게 허용한다. 그래서 문자열과 비교에 결과 값이 생각한대로 잘 나온 것이고, str2의 경우는 정식 방법대로 new를 사용하여 객체를 생성하고 그안에 "Hello"라는 문자열을 저장하였다. 이럴 경우에는 str2에 직접적으로 "Hello"라는 문자열이 저장되는 것이 아니고 "Hello"라는 문자열이 저장된 주소가 저장되어 있다. 그래서 결과값이 false가 나온 것이다.

해결 방법으로는 앞선 String 메소드로 설명해 주었던 equals() 메소드를 사용하는 것이다. equals() 메소드의 경우 str2에 주소값이 저장되어 있는데 그 주소값으로 찾아가 그 안에 저장된 "Hello" 문자열과 비교해주는 메소드이다. 그러므로 문자열을 비교할 때 주소값이 저장되어 있는지 값이 저장되어 있는지 신경쓰지 않고 비교를 하려면 equals() 메소드를 사용하면 된다.




No. 01

 

 

산술 연산자(Arithmetic Operator)


산술 연산자는 가장 많이 사용하는 연산자로 수식 계산에 사용된다. 사칙연산은 일상생활에서 자주 사용하여 익숙하지만 몇 가지만 주의하면 된다.





No. 02

 

 

사칙 연산자


사칙 연산은 이미 알고 있는 것처럼 곱셉(*), 나눗셈(/), 나머지(%) 연산자가 덧셈(+), 뺄셈(-)연산자보다 우선순위가 높으므로 먼저 처리된다.

그리고 나눗셈 연산자에서 피연산자가 정수형일 경우 0으로 나눌 수 없다.


예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 5;
        int y = 2;
        
        System.out.printf("%d + %d = %d%n",x, y, x+y);
        System.out.printf("%d - %d = %d%n",x, y, x-y);
        System.out.printf("%d * %d = %d%n",x, y, x*y);
        System.out.printf("%d / %d = %d%n",x, y, x/y);
        System.out.printf("%d / %f = %f%n",x, (float)y, x/(float)y);
 
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

5 + 2 = 7

5 - 2 = 3

5 * 2 = 10

5 / 2 = 2

5 / 2.000000 = 2.500000


두 변수 x,y의 사칙연산 결과를 출력하는 예제이다.

정수에 대한 '/'는 우리가 흔히 생각하는 연산과 조금 다르다. 정수 연산에서 '/' 연산자는 정수 몫을 구한다.

int형이므로 정수만 남고 소수점 이하는 버려진다. 올바른 연산 결과를 얻기 위해서는 두개의 피연산자 중 한 쪽을 실수형으로 형변환해야 한다.

그래야 타입이 일치하지 않으므로 int타입보다 범위가 넓은 실수형(float 또는 double)으로 자동형변환 된 후 연산을 수행한다.

위의 예제에서는 변수 y를 float형으로 형변환 시킨 후 연산을 수행하였다. 결과 값도 역시 float형이다.



◈ 예제2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Operator {
 
    public static void main(String[] args) {
        
        byte x = 10;
        byte y = 30;
        //byte result = x + y;//[x] 에러 발생
        byte result = (byte)(x+y);        
        
        System.out.println(result);
 
    }//main
 
}//class
                       Colored By Color Scripter


실행 결과

40


위의 예제에서 주석처리한 연산처럼 프로그램을 실행하면 에러가 발생한다. 그 이유는 a와 b는 모두 int형보다 작은 byte형이기 때문에 x와 y를 int형으로 변환한 다음 연산을 수행한다. 그래서 int형인 연산결과를 byte형에 담지 못하는 것이다. 연산 결과를 byte형으로 형변환해주어야 byte형 변수에 저장할 수 있다. 그래서 자바에서 정수 연산시 int형을 사용하는 것을 추천한다.



◈ 예제3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Operator {
 
    public static void main(String[] args) {
        
        byte x = 10;
        byte y = 30;        
        byte result1 = (byte)(x*y); //데이터 손실 발생, byte형의 범위:-128~127    
        int result2 = x*y; //해결책 : int형 변수에 담는다.
                
        System.out.println("result1:"+result1);
        System.out.println("result2:"+result2);
 
    }//main
 
}//class
                                                                  Colored By Color Scripter


실행 결과

result1:44

result2:300


위의 예제에서 result1의 결과는 x,y의 연산 결과를 byte형으로 변환해줬음에도 불구하고 예상치 못한 값이 저장되었다.

그 이유는 x,y의 연산결과가 byte형의 범위인 '-128~127'을 넘기 때문에 데이터 손실이 일어났다.

이를 해결하기 위한 방법으로는 더 큰 값을 저장할 수 있는 정수형 변수에 저장하는 것이다. 위의 예제에서는 int형 변수에 저장하였다.



◈ 예제4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 1000000;
        int y = 3000000;        
            
        long result1 = x*y; //x,y의 연산 결과는 이미 int형 
        long result2 = x*(long)y; //해결방법 : 한쪽을 'long으로 형변환
                
        System.out.println(result1);
        System.out.println(result2);
 
    }//main
 
}//class
                                                     Colored By Color Scripter


실행 결과

2112827392

3000000000000


위의 예제에서는 result1은 long형으로 x,y의 연산결과의 충분히 저장할 수 있으나, 결과는 전혀 다른 값이다.

그 이유는 x,y의 연산 결과는 이미 int형이므로 이미 데이터의 손실이 생겨 long형에 저장하여도 결과는 마찬가지이다.

이를 해결하기 위한 방법으로는 한쪽을 long형으로 형변환하여 연산 결과도 long형으로 나오도록 한 뒤 저장해야 한다.




No. 03

 

 

나머지 연산자 %


나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값이 결과이다. 나머지 연산의 용도는 다양하지만 주로 짝수, 홀수 또는 배수 검사 등에 사용된다.


◈ 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 5;
        int y = 2;
        
        System.out.printf("%d를 %d로 나눈 몫:%d%n",x,y,x/y);
        System.out.printf("%d를 %d로 나눈 나머지:%d%n",x,y,x%y);        
 
    }//main
 
}//class
                                                          Colored By Color Scripter


실행 결과

5를 2로 나눈 몫:2

5를 2로 나눈 나머지:1


위의 예제와 같이 나머지를 정수 값으로 구한다. 예제를 보면 따로 설명없이 이해할 수 있을 것이다.



◈ 예제2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
public class Operator {
 
    public static void main(String[] args) {
                
        String strNumber;
        int number, result;
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("[홀수/짝수 판별] 숫자를 입력하세요.");
        strNumber = scanner.nextLine();
        number = Integer.parseInt(strNumber);
        result = number % 2;
        
        System.out.println("2로 나눈 결과 값 : "+result);        
 
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

[홀수/짝수 판별] 숫자를 입력하세요.

25

2로 나눈 결과 값 : 1


위의 예제는 숫자를 입력받아 2로 나눈 나머지 값을 출력하는 프로그램이다.

나눈 결과 값이 0이면 홀수 1이면 짝수라고 판단할 수 있다. 이처럼 나머지 연산자를 응용하여 사용할 수 있다.




No. 04

 

 

문자의 사칙연산


사칙연산은 숫자뿐만 아니라 문자도 가능하다. 문자는 실제로 컴퓨터 내부에서 아스키코드나 유니코드로 바뀌어 저장되므로 정수간의 연산과 동일취급 된다.



◈ 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Operator {
 
    public static void main(String[] args) {
        
        char zero = '0';
        char nine = '9';
        
        int number = nine - zero;
        //[1]int number = '9' - '0';
        //[2]int number = 57 - 48;
        //[3]int number = 9;
                
        System.out.println(number);        
 
    }//main
 
}//class
                       Colored By Color Scripter


실행 결과

9


위의 예제는 문자를 숫자로 변환한 프로그램이다.

문자의 연산이 가능한 이유는 말했듯이 문자형은 컴퓨터 내부에 아스키 코드나 유니코드로 저장된다. 아스키 코드를 보면 문자'0'의 아스키코드는 48이고 문자'9'의 아스키 코드는 57이다. 그러므로 숫자형식으로 된 문자'9'에서 문자 '0'을 빼면 실제 숫자값을 얻을수가 있다.

c.f) 아스키 코드나 유니코드는 '0'~'9'까지의 문자가 연속적으로 배치되어 있다. 또한 'A'~'Z', 'a'~'z' 역시 마찬가지이므로 이를 이용할 수도 있다.



◈ 예제2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        char c1 = 'A';
        
        int i = c1 + 1;        
        //char c2 = c1 + 1;//에러 발생, 결과 값은 int형인 66
        char c2 = (char)(c1+1);//해결방법 : 결과값을 char형으로 형변환
                
        System.out.println("i:"+i);
        System.out.println("c2:"+c2);        
 
    }//main
 
}//class
                                                     Colored By Color Scripter


실행 결과

i:66

c2:B


위의 예제에서 알 수 있듯이 문자형과 정수형인 숫자 1의 결과 값은 int형이다. 그렇기 때문에 int형에는 저장이 가능하지만 형변환 없이 char형에는 저장할 수가 없다. 그러므로 결과 값을 다시 char형으로 형변환 해주면 'A'의 다음 문자인 'B'를 char형으로 저장할 수 있다.




No. 01

 

 

연산자(operator)란?


주어진 식을 계산하여 결과를 얻어내는 과정을 연산이라고 하며, 연산을 수행하는 기호를 연산자라고 한다.

자바의 연산 종류 및 연산자는 다양하지만, 하나씩 배워 나가면 쉽게 익숙해질 것이다.


▣ 연산자와 피연산자

연산을 수행하려면 반드시 연산의 대상이 있어야 하는데, 이를 피연산자(operand)라고 한다.



연산자(operator) : 연산을 수행하는 기호(+,-,*,/ 등)

피연산자(operand) : 연산자의 작업 대상(변수, 상수, 수식)

  • 'a + 5'이라는 식이 있을 때, '+'는 두 피연산자를 더해서 결과를 반환하는 덧셈 연산자이고, 변수 x와 상수 3은 이 연산자의 피연산자이다.
  • 연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.
  • 대부분의 연산자는 두 개의 피연산자를 필요로 하며, 하나 또는 세개의 피연산자를 필요로 하는 연산자도 있다.




No. 02

 

 

연산자의 종류


연산자의 종류는 다양하지만 많이 사용하는 연산자는 일부분이다. 이미 알고 있는 연산자도 있을 것이다.


종류

연산자

설명

증감

  ++   --

 피연산자에 저장된 값을 1증가 또는 감소

산술

  +   -   *   /   %

 사칙 연산과 나머지 연산(%)

시프트

  >>   <<  >>>

 피연산자의 각 비트들을 대상으로 연산

비교

  >   <   >=   <=   ==   !=

 크고 작음과 같고 다름을 비교

비트

  &   |   ^   ~

 비트단위 논리 연산

논리

  &&   ||   !   ^

 논리연산으로 결과값은 true 또는 false

조건

  ? :

 조건문으로 참,거짓에 따라 작업을 수행

대입

  =   *=   /=   +=   -=   &=   ^=   |=

 우변의 값을 좌변에 저장



연산자 우선순위와 결합규칙

식에 여러개의 연산자가 있는 경우, 우선순위가 높은 연산자를 먼저 처리한다.

동일한 우선순위의 연산자는 왼쪽에서부터 오른쪽으로 처리하나, 증감연산자와 대입연산자는 오른쪽에서 왼쪽으로 처리한다.


높음




















낮음

 ++   --

 형 변환(type casting)

 *   /   %

 +   -

 <<   >>   >>>

 <>   <=   >=

 ==   !=

 & (비트 AND)

 ^ (비트 XOR)

 | (비트 OR)

 && (논리 AND)

 || (논리 OR)
 ? : (조건)

 =   +=   -=   *=   /=   %=   &=   ^=   |=




No. 03

 

 

산술 변환


이항 연산자는 두 피연산자의 타입이 일치해야만 연산이 가능하다. 피연산자의 타입이 서로 다르면 연산 전에 형변환 연산자로 타입을 일치시켜야한다.

다음과 같은 규칙으로 피연산자의 자동 형변환이 일어난다.


① 두 피연산자의 타입을 같게 일치시킨다.(더 큰 타입으로 일치)

② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.


① 두 피연산자의 타입을 같게 일치시킨다.(더 큰 타입으로 일치)

long

+

int

→ 

long 

long 

→ 

long 

   

float

+

int

→ 

float 

float 

→ 

float 

   

double

+

float → double double → double    


② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

byte

+

short

→ 

int 

int 

→ 

int 

   

byte

+

short

→ 

int 

int 

→ 

int 

   




'JAVA' 카테고리의 다른 글

[Java 14] 비교 연산자  (0) 2017.11.23
[Java 13] 산술 연산자  (0) 2017.11.22
[Java 11] 자바에서 키 입력(Scanner)  (1) 2017.11.20
[Java 10] 자바의 출력문(println, printf)  (2) 2017.11.19
[Java 09] 형변환(casting)  (0) 2017.11.19

No. 01

 

 

Scanner 클래스


자바에서 화면에서 키보드로 키를 입력 받는 방법을 간단히 배워보자.

자바에서 화면으로부터 입력받는 방법은 여러 가지가 있지만 간단하고 편리한 Scanner 클래스를 이용해서 화면으로부터 입력받는 방법을 배워보자.


Scanner 객체 생성

Scanner 객체명 = new Scanner(System.in);

  • 객체명도 변수명과 마찬가지로 개발자 마음이다.
  • import java.util.Scanner; 를 추가해줘야 한다. (package와 class 사이)


System.in

키보드에서 사용자로부터 키 입력을 받기 위해서는 System.in을 사용한다.

지금은 키보드에서 입력을 받는다는 뜻으로 사용한다고 알아두자. 자세한 것은 추후에 배우도록 하자.


import 문 사용

Scanner 클래스를 사용하기 위해서는 프로그램의 class 명 윗줄에 다음과 같이 import문이 필요하다.

import java.util.Scanner;


자바에서 개발자들을 위해 많은 라이브러리를 제공하는데, 사용하기 위해서는 어디에 위치한 것을 사용할 것인지 알려줘야 한다.

import문은 Scanner 클래스의 정확한 경로가 java.util.Scanner라고 알려주는 것이다.



▣ Scanner 클래스의 메소드

Scanner 클래스의 메소드는 다양하지만 입력받을 수 있는 몇 가지만 소개하면 다음과 같다. 각 타입별로 입력받을 수 있다.

주의) 사용한 메소드의 타입에 맞게 입력하지 않으면 에러가 발생한다.


메소드

설명 

 String next()

 입력받은 값을 문자열 타입으로 반환한다.

 byte nextByte()

 입력받은 값을 byte 타입으로 반환한다. 

 short nextShort()

 입력받은 값을 short 타입으로 반환한다. 

 int nextInt()

 입력받은 값을 int 타입으로 반환한다. 

 long nextLong()

 입력받은 값을 long 타입으로 반환한다. 

 float nextFloat()

 입력받은 값을 float 타입으로 반환한다.

 doulbe nextDouble()

 입력받은 값을 double 타입으로 반환한다.

 String nextLine()

 입력받은 라인 전체를 문자열 타입으로 반환한다. ('\n'포함)



◈ 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class ScannerEx {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("나이를 입력해 주세요.");
        int age = scanner.nextInt(); //정수형만 받는 메소드
        
        System.out.printf("내 나이는 %d세 입니다.",age);        
 
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

나이를 입력해 주세요.

25

내 나이는 25세 입니다.




No. 02

 

 

Scanner에서 키 입력받기


기본 입력받기
Scanner는 사용자가 입력하는 값을 공백('\t, '\f', '\r', ' ', '\n')으로 구분하여 읽는다. 탭, 띄어쓰기 등으로 구분하여 읽는다.
프로그램을 실행시키고 콘솔창에 문자열을 입력하고 'Enter'를 누르면 된다.

◈ 예제
"Lee Seoul 25 60.3"을 띄어쓰기로 구분하여 입력하면 Scanner는 "Lee", "Seoul", "25", "60.3"으로 하나씩 읽는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
 
public class ScannerEx {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name, address;
        int age;
        double weight;
        
        
        System.out.println("이름,주소,나이,체중을 빈칸으로 구분하여 순서대로 입력하세요.");
        name = scanner.next();
        address = scanner.next();
        age = scanner.nextInt();
        weight = scanner.nextDouble();
        
        System.out.printf("당신의 이름은 %s입니다.%n",name);
        System.out.printf("당신의 주소는 %s입니다.%n",address);
        System.out.printf("당신의 나이는 %d세 입니다.%n",age);
        System.out.printf("당신의 체중은 %.1fkg입니다.%n",weight);                
 
    }//main
 
}//class
                                                                             Colored By Color Scripter

실행 결과

이름, 주소, 나이, 체중을 빈칸으로 구분하여 순서대로 입력하세요.

Lee Seoul 25 60.3

당신의 이름은 Lee입니다.

당신의 주소는 Seoul입니다.

당신의 나이는 25세 입니다.

당신의 체중은 60.3kg 입니다.



타입 지정 메서드와 nextLine() 같이 사용하기

위의 예제에서 사용자가 입력한 나이나 체중은 문자열을 입력한 것과 같다. Scanner의 nextInt()나 nextDouble()가 자동으로 문자를 숫자로 변환해 준것이다. 문자를 숫자로 변환하는 수고를 하지 않아도 되지만 입력할 때 입력받을 변수의 타입에 주의해서 입력해야하는 까다로움이 있다.

또한 nextLine() 메서드와 섞어 사용할 경우에 주의해야 한다.


◈ 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class ScannerEx {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name, address;
        int age;
        double weight;
                
        System.out.println("당신의 나이를 입력하세요.");
        age = scanner.nextInt();
        System.out.println("당신의 이름을 입력하세요.");
        name = scanner.nextLine();
                
        System.out.printf("당신의 나이는 %d입니다.%n",age);
        System.out.printf("당신의 이름은 %s입니다.%n",name);
        
    }//main
 
}//class
                                            Colored By Color Scripter


실행 결과

당신의 나이를 입력하세요.

25

당신의 이름을 입력하세요.

당신의 나이는 45입니다.

당신의 이름은 입니다.

위의 예제는 같이 섞어 사용하면 문제가 발생할 수 있다는 것을 보여준다. 프로그램은 분명히 나이를 입력하고 나서 이름을 입력해야 하는데 이름을 입력하기도 전에 프로그램이 종료된다. 그 이유는 사용자가 문자열을 입력하면 마지막에 입력하는 'Enter'값도 같이 입력되기 때문인데 nextInt()와 같이 타입을 지정해서 받는 메소드는 'Enter'값을 무시하고 숫자형식만 받아 변환하여 반환한다. 이때, 컴퓨터 내부에는 'Enter'값이 아직 남아 있다. 남아 있던 'Enter'값이 이름을 입력하는 명령문에서 이름대신 입력된 것으로 인식되어 아무것도 없는 'Enter'값이 name 변수에 저장되었다.

nextLine()은 '\n'값도 받아들이기 때문에 변수에도 저장될 수 있다.



nextLine()으로 입력받아 원하는 값으로 변환하기

위의 예제들에서 봤듯이 타입을 지정해서 입력을 받는 것은 입력시 신경써야하고 섞어 사용하기에 매우 까다롭다. 그래서 차라리 모든 값을 nextLine()으로 입력받아서 적절하게 변환하는 것이 낫다. 그래서 제일 많이 사용하기도 한다.


nextLine()은 입력한 문자열 한라인 전체를 저장한다. 문자열을 입력 할 때 띄어쓰기 등의 빈칸도 포함하여 입력할 수 있는 장점도 있다.

문자열은 String 타입에 저장하여 사용하면 되고 입력한 문자열을 숫자로 변환할 때는 다음과 같은 메소드를 사용하면 된다.

String input = scanner.nextLine();

int num = Interger.parseInt(input); // input에 저장된 숫자형식 문자열을 정수로 변환


◈ 예제1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class ScannerEx1 {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String str;
        
        System.out.println("입력하고 싶은 문자열을 입력하세요.");
        str = scanner.nextLine();
        
        System.out.println("[입력한 문자열]");
        System.out.println(str);        
                
    }//main
 
}//class
                                              Colored By Color Scripter

실행 결과

입력하고 싶은 문자열을 입력하세요.

25제 이름은 Lee이고 사는곳은 서울입니다.

[입력한 문자열]

제 이름은 Lee이고 사는곳은 서울입니다.


위와 같이 긴 문자열도 공백을 포함하여 저장할 수 있다.



◈ 예제2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class ScannerEx2 {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name, strAge;
        int age;
        
        System.out.println("당신의 이름을 입력하세요.");
        name = scanner.nextLine();
                
        System.out.println("당신의 나이를 입력하세요.");
        strAge = scanner.nextLine();
        age = Integer.parseInt(strAge);
        
        System.out.printf("당신의 이름은 %s입니다.%n",name);
        System.out.printf("당신의 나이는 %d세 입니다.%n",age);
                
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

당신의 이름을 입력하세요.

Lee

당신의 나이를 입력하세요.

25

당신의 이름은 Lee입니다.

당신의 나이는 25세 입니다.


위의 예제에서는 정수만 변환하였지만 Float.parseflot(), Double.parsedouble() 등도 있으니 필요할 때 사용하도록 하자.




'JAVA' 카테고리의 다른 글

[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21
[Java 10] 자바의 출력문(println, printf)  (2) 2017.11.19
[Java 09] 형변환(casting)  (0) 2017.11.19
[Java 08] 문자열 - String  (1) 2017.11.18

No. 01

 

 

출력 - println()


개발자가 열심히 프로그래밍을 하더라도 결과를 볼 수 있는 명령문을 실행하지 않으면 절대 직접 눈으로 볼 수 없다. 결과를 봐야 이 프로그램이 내가 생각한대로 잘 돌아가고 있는지 알 수 있다. println은 자바에서의 기본 출력문으로 가장 많이 사용되며 출력하고 싶은 내용 그대로를 입력하여 출력한다.


println()

System.out.println("문자열");

          또는

System.out.println(변수명);

          또는

System.out.println("문자열"+변수명);

  • 문자열을 출력하기 위해서는 큰따옴표로 묶어줘야 한다.
  • 큰 따옴표 없는 것은 모두 변수명으로 인식한다. (입력한 변수명이 없을 경우 에러발생)
  • 문자열과 변수명을 함께 사용할 수 있으나 반드시 '+'로 연결시켜줘야 한다.
  • 가로안의 내용을 출력한 후 자동으로 줄바꾸는 기능이 있다.

Tip) 이클립스에서는 'sysout' 이라고 입력하고 'ctrl+space'를 누르면 System.out.println()이 자동 입력된다.



◈ 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Println {
 
    public static void main(String[] args) {
        //기본 출력문 println()        
        //sysout + 자동완성(ctrl + space)
        
        int number = 10;
        String str = "안녕, 자바";
        
        System.out.println("Hello, World."); //문자열 출력
        System.out.println(number); //int형 변수 출력
        System.out.println(str); // String형 변수 출력
        System.out.println("내 나이는 "+number+"살 입니다."); // 문자열 + 변수 출력        
        
    }//main
 
}//class
                                                                             Colored By Color Scripter


실행 결과

Hello, World.

10

안녕, 자바

내 나이는 10살 입니다.


· String과 기본형은 저장된 값 그대로 출력된다.

· 변수와 문자열을 '+'로만 이어주면 같이 사용할 수 있다.

· 실행 결과를 보면 자동으로 내용을 출력 후 줄바꿈 기능이 있는걸 볼 수 있다. 절대로 명령문을 한줄에 하나씩 써서 줄바꿈이 된 것이 아니다.




No. 02

 

 

형식화된 출력 - printf()


기본 출력문은 println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.

반면에 printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.


printf()

System.out.printf("출력 서식",출력할 내용);

  • 출력 후 줄바꿈을 하지 않는다. 줄바꿈을 하려면 지시자 '%n'을 넣어줘야 한다.
  • 출력하려는 값의 수만큼 지시자도 사용해야 한다.
  • 출력될 값과 지시자의 순서는 일치해야 한다.
  • 지시자를 제외한 문자는 입력한 그대로 출력된다.


출력 서식

%[-][0][n][.m]지시자

  • 출력 서식의 지시자를 제외한 나머지는 생략 가능하다. 예) %d 식으로 사용 가능.
  • n : 출력할 전체 자리수 지정(오른쪽 정렬).  예) %3d, 전체자리수가 3인 정수
  • 0 : 전체 자리수가 지정된 경우 왼쪽의 남는 자리에 0을 출력.  예) %03d
  • - : 전체 자리수가 지정된 경우 왼쪽 정렬하고 빈칸에 공백 출력.
  • .m : 소수점 아래 자리수 지정. 잘리는 소수점 자리수는 반올림 시켜서 표시.  예)3.2f


 지시자

설명 

 %b

 boolean 형식으로 출력 

 %d

 정수 형식으로 출력

 %o

 8진수 정수의 형식으로 출력

 %x 또는 %X

 16진수 정수의 형식으로 출력

 %f

 소수점 형식으로 출력

 %c

 문자형식으로 출력 

 %s

 문자열 형식으로 출력

 %n 줄바꿈 기능

 %e 또는 %E

 지수 표현식의 형식으로 출력



◈ 예제1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Printf {
 
    public static void main(String[] args) {
        
        int age = 10;        
        String addr = "경기도";
        
        //'%n'지시자를 사용 안 했을 경우
        System.out.printf("줄바꿈 기능");
        System.out.printf("없음.");
        
        //'%n'지시자를 사용한 경우
        System.out.printf("줄바꾸기%n");
        System.out.printf("성공!%n");
        
        System.out.printf("내 나이는 %d살 입니다.%n",age);
        System.out.printf("내 나이는 %d살 이고 %s에 살고 있습니다.%n",age,addr);
        
    }//main
 
}//class
                                                                  Colored By Color Scripter


실행 결과

줄바꾸기 기능없음.줄바꾸기

성공!

내 나이는 10살 입니다.

내 나이는 10살이고 경기도에 살고 있습니다.


· 기본적으로 줄바꿈 기능이 없고 '%n'지시자를 사용한 곳에서 줄바꾸는 기능을 하는 것을 볼 수 있다.

· 지시자의 수와 출력하려는 값의 수는 같아야 하며 출력하려는 값은 콤마(',')로 구분한다.

· 출력하려는 값은 지시자의 순서와 같아야 한다.

· 지시자의 형식과 출력하려는 값의 형식이 같지 않으면 에러가 발생한다.



◈ 예제2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Printf {
 
    public static void main(String[] args) {
        //자리수 지정은 안 했을 경우 왼쪽으로 정렬된다.
        System.out.printf("자리수 미지정 :%d%n",1);
        System.out.printf("자리수 미지정 :%d%n",10);
        System.out.printf("자리수 미지정 :%d%n",100);
        System.out.printf("자리수 미지정 :%d%n",1000);
        
        //자리수 지정했을 경우  오른쪽으로 정렬된다.(남는 자리수는 공백)
        System.out.printf("자리수 지정 :%4d%n",1);
        System.out.printf("자리수 지정 :%4d%n",10);
        System.out.printf("자리수 지정 :%4d%n",100);
        System.out.printf("자리수 지정 :%4d%n",1000);
        
        //자리수 지정 후 '-'사용하면 왼쪽으로 정렬된다.
        System.out.printf("자리수 지정('-'사용) :%-4d%n",1);
        System.out.printf("자리수 지정('-'사용) :%-4d%n",10);
        System.out.printf("자리수 지정('-'사용) :%-4d%n",100);
        System.out.printf("자리수 지정('-'사용) :%-4d%n",1000);
        
        //자리수 지정 후 '0'사용하면 오른쪽으로 정렬된다. (왼쪽 자리수는 0으로 채운다)
        System.out.printf("자리수 지정('0'사용) :%04d%n",1);
        System.out.printf("자리수 지정('0'사용) :%04d%n",10);
        System.out.printf("자리수 지정('0'사용) :%04d%n",100);
        System.out.printf("자리수 지정('0'사용) :%04d%n",1000);
        
    }//main
 
}//class
                                                                       Colored By Color Scripter


실행 결과

자리수 미지정 :1

자리수 미지정 :10

자리수 미지정 :100

자리수 미지정 :1000

자리수 지정 :    1 

자리수 지정 :  10

자리수 지정 : 100

자리수 지정 :1000

자리수 지정('-'사용) :1

자리수 지정('-'사용) :10

자리수 지정('-'사용) :100

자리수 지정('-'사용) :1000

자리수 지정('0'사용) :0001

자리수 지정('0'사용) :0010

자리수 지정('0'사용) :0100

자리수 지정('0'사용) :1000



◈ 예제3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Printf {
 
    public static void main(String[] args) {
        
        float f = 1.2345f;
        
        //소수점 자리수 미지정시
        System.out.printf("소수점 자리수 미지정 : %f%n",f);
        //소수점 자리 지정시
        System.out.printf("소수점 자리수 지정 : %.3f%n",f);    
        
    }//main
 
}//class
                                           Colored By Color Scripter 


실행 결과

소수점 자리수 미지정 : 1.234500

소수점 자리 지정 : 1.235


· 소수점 자리를 3자리로 지정했기 때문에 4번째 자리에서 반올림한 결과를 출력한다.




'JAVA' 카테고리의 다른 글

[Java 12] 연산자란?  (0) 2017.11.21
[Java 11] 자바에서 키 입력(Scanner)  (1) 2017.11.20
[Java 09] 형변환(casting)  (0) 2017.11.19
[Java 08] 문자열 - String  (1) 2017.11.18
[Java 07] 문자형 - char  (0) 2017.11.18

No. 01

 

 

형변환(캐스팅, casting)


형변환이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다.

프로그램에서 값의 대입이나 연산을 수행할 때는 같은 타입끼리만 가능하다. 그래서 연산을 수행하기 전에 같은 타입으로 만들어야 하는데, 변수나 상수를 다른 타입으로 변환하는 것을 '형변환(casting)' 이라고 한다.


형변환은 물을 큰 그릇과 작은 그릇 사이에서 옮기는 것을 생각하면 이해가 쉽다. 각 타입을 크기가 다른 그릇이라고 생각해보자.

큰 그릇의 물을 작은 그릇으로 옮겨 담을 때 큰 그릇의 물이 작은 그릇이 담을 수 있는 양보다 많이 담겨 있다면 작은 그릇으로 옮겨 담을 때 물은 넘쳐서 원래의 양보다 줄어든다. 그러나 큰 그릇의 물이 작은 그릇이 담을 수 있는 양보다도 적게 담겨 있다면 작은 그릇으로 옮겨도 물의 양은 그대로 보존된다.

반대로 작은 그릇의 물을 큰 그릇으로 옮겨 담을 때 작은 그릇의 물의 양에 상관없이 큰 그릇으로 옮겨 담을 때는 물의 양은 그대로 보존된다.

 형변환은 한 타입(그릇)의 데이터를 다른 데이터 타입(그릇)으로 옮겨 담는 것이다. 형변환에는 개발자가 지정하지 않아도 자동적으로 이루어지는 자동 형변환과 개발자가 명시해야만 이루어지는 강제 형변환이 있다.


형변환

(타입)피연산자

  • 기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다.
  • 기본형과 참조형간의 형변환은 불가능하다.
  • 자동 형변환과 강제 형변환 두가지가 있다.




No. 02

 

 

자동 형변환


서로 다른 타입간의 대입이나 연산을 할 때 형변환으로 타입을 일치시켜서 하는것이 원칙이다.

그러나 다음과 같은 경우 자바의 컴파일러가 자동으로 형변환을 해주기 때문에 생략 가능하다. 작은 그릇의 물을 큰 그릇에 옮겨 담을 때는 항상 원래 물의 양이 보존되는 것처럼 작은 데이터 타입에서 큰 데이터 타입으로 형변환하여도 데이터의 손실 없이 그대로 보존될 수 있기 때문에 자동 형변환이 일어난다.

예를 들어 작은 그릇인 byte(1 byte)를 가장 큰 그릇인 double(8 byte)으로 데이터를 옮기면 손실 없이 그대로 보존된다.



자동 형변환의 규칙



왼쪽에서 오른쪽으로의 변환은 자동 형변환이 일어나며 반대 방향으로의 변환은 반드시 강제 형변환을 해주어야 한다.

실수형의 경우 소수점까지 표현하기 때문에 정수형보다 표현 범위는 크다고 할 수 있다. 다만 값의 크기는 정수형이 더 클 수 있으므로 형변환하는 경우 오차가 발생할 수 있다는 것을 주의해야 한다.


◈ 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Casting {
    
    public static void main(String[] args) {
                
        int i = 100;
        char c = 'a';
        int j = c;      // char 타입에서 int 타입으로 자동 변환.
        double d = i; // int 타입에서 double 타입으로 자동 변환. 
                
        System.out.println("int타입 변수 j의 값 : "+j);
        System.out.println("double타입 변수 d의 값: "+d);        
        
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

int타입 변수 j의 값 : 97

double타입 변수 d의 값 : 100.0


· 문자 'a'가 저장되어 있는 char타입 변수 c를 int형으로 대입할 때 자동 형변환된다. '어떻게 문자를 정수형으로 넣을 수 있을까?' 라는 의문이 있다. 이는 바로 'a'의 아스키 코드값인 97로 저장이 된다.

· int타입 변수 j를 double형으로 대입할 때도 마찬가지로 자동 형변환된다. 100의 정수 값이 소수점이 생긴 100.0으로 저장된 것을 볼 수 있다.




No. 03

 

 

강제 형변환 (명시적 형변환)


큰 그릇의 물을 작은 그릇에 옮겨 담는 것과 같다. 큰 그릇에 있는 물의 양에 따라 물이 넘칠수도 있고 보존될 수도 있다. 마찬가지로 큰 데이터 타입에서 작은 데이터 타입으로 옮길 때 데이터의 손실이 발생할 수도 아닐수도 있다.

데이터의 손실이 일어난다면 정확한 연산을 수행할 수 없기 때문에 예상하지 못한 결과를 얻을 수 있다. 그러므로 강제 형변환시 주의해서 형변환해야 한다.


◈ 예제 : 정수형간의 형변환  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Casting {
    
    public static void main(String[] args) {
        
        //int -> byte 강제 형변환(값이 작을 경우)
        int i = 10;
        byte b = (byte)i; //강제 형변환을 하지 않으면 에러 발생.
        System.out.println("[int -> byte] i의 값 :"+i+" b의 값:"+b);
        
        //int -> byte 강제 형변환(값이 큰 경우)
        int j = 1000;
        byte c = (byte)j; //강제 형변환을 하지 않으면 에러 발생.
        System.out.println("[int -> byte] j의 값 :"+j+" c의 값:"+c);
                
    }//main
 
}//class
                                               Colored By Color Scripter 


실행 결과

[int -> byte] i의 값 :10, b의 값:10

[int -> byte] i의 값 :1000, b의 값:-24


byte의 값의 범위에 있는 10의 값을 넣었을 경우 손실없으나, byte의 값의 범위를 넘는 경우 손실이 발생하여 예상하지 못한 값이 나온것을 볼 수 있다.



◈ 예제 : 실수형간의 형변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Casting {
    
    public static void main(String[] args) {
        
        //doulbe -> float 강제 형변환(float타입 범위 내 값)
        double d1 = 1.1234;
        float f1 = (float)d1;
        System.out.println("[double -> float] d1의 값 :"+d1+", f1의 값:"+f1);
        
        //doulbe -> float 강제 형변환(float타입 최소 값보다 작은 경우)
        double d2 = 1.0e-50;
        float f2 = (float)d2;
        System.out.println("[double -> float] d2의 값 :"+d2+", f2의 값:"+f2);
        
        //doulbe -> float 강제 형변환(float타입 최대 값보다 큰 경우)
        double d3 = 1.0e100;
        float f3 = (float)d3;
        System.out.println("[double -> float] d3의 값 :"+d3+", f3의 값:"+f3);
        
        //doulbe형과 float의 정밀도 차이
        double d4 = 9.123456789;
        float f4 = (float)d4;
        System.out.println("[정밀도 차이] d4의 값 :"+d4+", f4의 값:"+f4);
                        
    }//main
 
}//class
                                                           Colored By Color Scripter


실행 결과

[double -> float] d1의 값 :1.1234, f1의 값:1.1234

[double -> float] d2의 값 :1.0E-50, f2의 값:0.0

[double -> float] d3의 값 :1.0E100, f3의 값:Infinity

[정밀도 차이] d4의 값:9.123456789, f4의 값:9.123457


· 범위 내 값에서 강제 형변환 할 경우 데이터의 손실없이 변환된다.

· float이 가질 수 있는 최소 값보다 작은 경우 0이 된다.

· float이 가질 수 있는 최대 값보다 큰 경우 무한대(infinity)가 된다.

· float의 범위 내 값이지만 소수점 아래 값에서의 정밀도 차이가 난다.



◈ 예제 : 정수형과 실수형 간의 형변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Casting {
    
    public static void main(String[] args) {
        
        //float -> int 강제 형변환
        float f1 = 12345.67f;
        int i1 = (int)f1;
        System.out.println("[float -> int] f1의 값 :"+f1+", i1의 값:"+i1);
        
        //double -> int 강제 형변환                
        double d1 = 12345.678;
        int i2 = (int)d1;
        System.out.println("[double -> int] d1의 값 :"+d1+", i2의 값:"+i2);
                                
    }//main
 
}//class
                                                        Colored By Color Scripter


실행 결과

[float -> int] f1의 값 :12345.67, i1의 값:12345

[double -> int] d1의 값 :12345.678, i2의 값:12345


· 실수형을 정수형으로 형변환시 소수점 이하 값은 버려진다.




'JAVA' 카테고리의 다른 글

[Java 11] 자바에서 키 입력(Scanner)  (1) 2017.11.20
[Java 10] 자바의 출력문(println, printf)  (2) 2017.11.19
[Java 08] 문자열 - String  (1) 2017.11.18
[Java 07] 문자형 - char  (0) 2017.11.18
[Java 06] 데이터 타입  (1) 2017.11.15

No. 01

 

 

문자열(String)


자바에서 문자를 다루는 기본형인 char로는 문자열을 다루기 힘들다. 그래서 자바에서는 문자열을 다룰 수 있는 String클래스를 제공한다.

String은 참조형 데이터 타입이다. 


참조형 변수를 선언하려면 객체를 생성하는 연산자 new를 사용해야한다.

String a = new String(); // String 클래스 타입의 참조변수 a 선언


모든 참조형의 위와 같은 형태로 선언해야 사용할 수 있다.

그러나 String은 자바에서 매우 많이 쓰이므로 기본형처럼 사용할 수 있도록 해두었다.


예) "Hello, World" 라는 문자열을 저장하는 String 변수를 만들어 보자.

String a = new String("Hello, World.");

String a = "Hello, world."; // 기본형 처럼 사용가능

위의 예는 표현방법은 다르지만 같다고 할 수 있다. 문자열에 한해서는 String을 기본형처럼 사용 가능하다.


※ 문자열을 사용할 때는 큰따옴표(")로 반드시 감싸줘야 한다.




No. 02

 

 

String의 주요 메서드(기능)


우선 메서드란 간단히 설명하면 어떤 기능을하는 하는 것이라고 이해하고 있으면 될 것 같다.

String의 기본적인 몇 가지 기능만 배워보고 자세한 것은 추후에 자세히 살펴볼 것이다. 지금은 자세히 이해하기 보다는 이렇게 사용하면 이런 결과를 얻을 수 있구나 정도로만 알고있자.


메서드

설명

int length()

 문자열의 길이를 반환한다.

char charAt(int index)

 문자열에서 해당 위치(index)에 있는 문자를 반환한다.

int indexOf(String str)

 문자열에서 특정 문자가 시작되는 위치(index)를 반환한다. 

boolean equals(String str) 

 두 개의 문자열이 동일한지 확인한다. 결과가 같으면 true, 다르면 false


메서드를 사용하기 위해서는 모두 String 변수명 다음에 '.'을 붙여서 메서드 이름으로 사용하면 된다.



 length

문자열의 길이를 반환하는 메서드로 결과는 정수형인 int이다.

String 변수명.length(); 

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringMethod {
 
    public static void main(String[] args) {
        
        String a = "Hello, World.";
        int length//길이를 저장하기 위한 정수형 변수
        
        length = a.length(); //a에 저장되어 있는 문자열 길이를 정수형 변수 length에 저장
        
        System.out.println("길이:"+length); //화면에 결과 출력
 
    }//main
 
}//class
                                                                         Colored By Color Scripter


실행 결과

길이:13


메서드 length와 int형 변수명인 length는 다르다 착각하지 않도록 한다. 변수명을 length로 한 것 뿐이다.

a.length() 의 결과는 int형으로 int형에만 저장할 수 있다.

문자열의 길이는 빈공간인 띄어쓰기 까지 세기 때문에 13이라는 숫자가 결과로 반환되었다.



▣ charAt

문자열에서 해당 위치(index)에 있는 문자열을 반환하는 메서드로 결과는 문자형인 char이다.

주의) 자바는 숫자를 1이 아닌 0부터 센다. 예를 들어 8번째는 index로 7이다.

String 변수명.charAt(index);

◈ 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringMethod {
 
    public static void main(String[] args) {
        
        String a = "Hello, World.";
        char character; //문자를 저장하기 위한 문자형 변수
        
        character = a.charAt(7); //a에 저장되어 있는 문자열중 8번째 문자를 character에 저장 
        
        System.out.println("8번째 문자:"+character); //화면에 결과 출력
 
    }//main
 
}//class
                                                                              Colored By Color Scripter 


실행 결과

8번째 문자:W


a.charAt()의 결과는 char형으로 char형에만 저장할 수 있다.

index로 7이기 때문에 8번째 문자인 'W'가 결과로 반환되었다.



▣ indexOf

문자열에서 특정 문자가 시작되는 위치(index)를 반환하는 메서드로 결과는 정수형인 int이다.

String 변수명.indexOf(문자열);

◈ 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class StringMethod {
 
    public static void main(String[] args) {
        
        String a = "Hello, World.";
        int index1; //index를 저장하기 위한 정수형 변수
        int index2; //index를 저장하기 위한 정수형 변수
        
        index1 = a.indexOf("W"); //a에 저장되어 있는 문자열중 "W"문자의 시작 index를 저장
        index2 = a.indexOf("llo"); //a에 저장되어 있는 문자열중 "llo"문자열의 시작 index를 저장
        
        System.out.println("\"w\"의 시작 index:"+index1); //화면에 결과 출력
        System.out.println("\"llo\"의 시작 index:"+index2); //화면에 결과 출력
 
    }//main
 
}//class
                                                                                Colored By Color Scripter


실행 결과

"W"의 시작 index:7

"llo"의 시작 index:2


비교한 문자열의 시작 index를 결과로 볼 수 있다.



▣ equals

두 개의 문자열이 동일한지 확인하는 메서드로 boolean으로 결과가 같으면 true, 다르면 false

String 변수명.equals(문자열);

◈ 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class StringMethod {
 
    public static void main(String[] args) {
        
        String a = "Hello, World.";
        boolean result1; //index를 저장하기 위한 정수형 변수
        boolean result2; //index를 저장하기 위한 정수형 변수
        
        result1 = a.equals("World"); //a에 저장되어 있는 문자열이 "World"와 같은지 판단하여 결과 저장
        result2 = a.equals("Hello, World."); //a에 저장되어 있는 문자열이 "Hello, World."와 같은지 판단하여 결과 저장
        
        System.out.println("\"Wrold\"와 같은가? "+result1); //화면에 결과 출력
        System.out.println("\"Hello, World.\"와 같은가? "+result2); //화면에 결과 출력
 
    }//main
 
}//class
                                                                                                          Colored By Color Scripter


실행 결과

"World"와 같은가? false

"Hello, World."와 같은가? true


비교하는 문자열은 완전히 일치해야만 true이다. '.'하나만 달라도 결과는 false이다.




'JAVA' 카테고리의 다른 글

[Java 10] 자바의 출력문(println, printf)  (2) 2017.11.19
[Java 09] 형변환(casting)  (0) 2017.11.19
[Java 07] 문자형 - char  (0) 2017.11.18
[Java 06] 데이터 타입  (1) 2017.11.15
[Java 05] 변수와 식별자  (1) 2017.11.13

+ Recent posts