CS/객체지향프로그래밍

[객체지향프로그래밍] #2 자바 기본 프로그래밍(2)

taeyeoxn 2024. 4. 14. 18:38

<자바에서 키 입력>

 

• System in

키보드부터 직접 읽는 자바의 표준 입력 스트림이다.

하지만 응용프로그램이 받은 바이트 정보를 문자나 실수로 변환해야 하는 번거로움이 있다.

따라서 문자나 정수, 실수, 문자열 등 사용자가 원하는 타입으로 변환해주는 Scanner 클래스를 사용하는 것이 효과적이다.

 

• Scanner를 이용한 키 입력

우선 다음과 같이 Scanner 객체를 생성한다.

Scanner scanner = new Scanner(System.in); // Scanner 객체 생성

원리

 

Scanner를 사용하기 위해서는 프로그램 맨 앞줄에 다음 import 문이 필요하다.

import java.until.Scanner;

 

Scanner 클래스는 사용자가 입력하는 키 값을 공백 문자를 기준으로 분리하여 토큰 단위로 읽는다.

 

Scanner의 주요 매소드는 꼭 알아두는 것이 좋다.

메소드 설명
String next() 다음 토큰을 문자열로 리턴
byte nextByte() 다음 토큰을 byte 타입으로 리턴
byte nextshort() 다음 토큰을 short 타입으로 리턴
int nextInt() 다음 토큰을 int 타입으로 리턴
long nextLong() 다음 토큰을 long 타입으로 리턴
float nextFloat() 다음 토큰을 float 타입으로 리턴
double nextDouble() 다음 토큰을 double 타입으로 리턴
boolean nextBoolean() 다음 토큰을 boolean 타입으로 리턴
String nextLine() '\n'을 포함하는 한 라인을 읽고 '\n'을 버린 나머지 문장열 리턴
void close() Scanner의 사용 종류
boolean hasNext() 현재 입력된 토큰이 있으면 true, 아니면 입력 때까지 무한정 대기, 새로운 입력이 들어올 때 true 리턴, ctrl-z 키가 입력되면 입력 끝이므로 false 입력

 

"Seoul Korean"와 같이 공백이 있는 문자열을 입력하기 위해서는 Scanner 클래스의 nextline()을 사용하면 된다. 

next()로는 앞의 "Seoul"만 문자열로 리턴한다.

또한 nextline()은 <Enter>키의 입력을 기다리는 용도로 사용할 수 있다.

(빈 문자열을(" ") 리턴하면서 바로 돌아온다.)

 

<연산>

 

주어진 식을 계산하여 결과를 얻어내는 과정을 연산이라고 한다.

 

• 산술 연산

더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)가 있다.

%연산자는 다음과 같이 정수n이 홀수인지 짝수인지 구분할 때 유용하게 활용된다.

int r = n % 2; // n이 홀수이면 r은 1, 짝수이면 r은 0

 

• 증감 연산

++, --의 두가지가 있다.

피연산자의 앞 또는 뒤에 붙어 값을 1 증가시키거나 1 감소시킨다.

 

• 대입 연산

연산자의 오른쪽 식의 결과를 왼쪽에 있는 변수에 대입한다.

int a = 1, int b = -3;
a = b; // b 값을 a에 대입하여 a=3
a += b; // a = a + b의 연산이 이루어져, a=6. b는 3 그대로

 

• 비교 연산과 논리 연산

비교 연산자는 두 개의 피연산자를 비교하여 true 또는 false의 논리 연산을 한다.

논리 연산자는 논리 값을 대상으로 AND, OR, XOR, NOT의 논리 연산을 한다.

 

복합하여 사용할 수도 있다.

(age >= 20) && (age < 30) // 나이(int age)가 20대인 경우
(C >= 'A') && ( C <= 'Z') // 문자(char c)가 대문자인 경우
(x>=0) && (y>=0) && (x<=50) && (y<=50) // (x,y)가 (0, 0)과 (50, 50)의 사각형 내에 있음

20 <= age < 30 // 이렇게 작성하면 오류

 

• 조건 연산

세개의 피연산자로 구성된 삼항 연산자이다.

condition ? opr2 : opr3

 

if-else를 간결하게 표현할 수 있다.

int x = 5;
int y = 3;

int s;
if(x>y)
  s = 1;
else
  s = -1; 

int s = (x>y)?1:-1;로 표현 가능

 

• 비트 연산

비트 개념

 

비트 논리 연산

비트끼리 AND, OR, XOR, NOT 연산

byte flag; // 8개의 각 비트는 8개의 센서 값을 각각 가리킴
···
if(flag & 0b00001000 == 0) System.out.print("온도는 0도 이하")
else System.out.print("온도는 0도 이상");

온도는 0도 이상

 

비트 시프트 연산

비트를 오른쪽이나 왼쪽으로 이동

byte a = 20;
byte b = (byte) (a >> 2); // 변수 a 값을 오른쪽으로 2비트 이동. b 값은 5
byte c = (byte) 0xf8;     // 0xf8는 -8을 16진수로 표현한 값
byte d = (byte) (c >> 2); // 변수 c를 오른쪽으로 2비트 이동. d 값은 0xfe가 된다.
                          // 0xfe는 십진수 -2

 

< 조건문>

 

• 단순 if 문

if의 괄호 안에 조건식이 있는 형식이다.(논리형 변수나 논리 연산)

 

정수 n이 짝수인지 판별하는 코드

if(n%2 == 0){
   System.out.println(n + "은 짝수입니다.");
}

 

• if-else 문

조건식이 true면 실행문자1 실행 후 if-else 문을 벗어난다.

false인 경우에 실행문장2 실행 후 if-else문을 벗어난다.

 

정수 n이 짝수인지 홀수인지 구분하는 코드

if (n%2 == 0) {
    System.out.println(n + "은 짝수입니다.");
}
else {
    System.out.println(n + "은 홀수입니다.");
}

 

• 다중 if-else 문

 

조건문이 너무 많은 경우에는 switch 문 사용을 권장한다.

 

• switch 문

switch 문은 먼저 '식'을 계산하고 그 결과 값을 일치하는 case 문으로 분기한다.

 

case문의 '실행문장'을 실행한 후 break를 만나면 switch 문을 벗어난다.

 

만약 case의 비교 값과 일치하는 것이 없으면 default 문을 실행한다.

(default 문은 생략 가능하다.)

 

case 문에는 다음과 같이 변수나 식은 사용할 수 없다.

int b;
switch(b) {
    case a : ... ; break; // 오류. 변수 a 사용 안됨
    case a > 3 ... ; break; // 오류. 식(a>3) 사용 안됨
}