[Java] 01. 기본 문법 및 응용(연산자, 조건문)


1. 연산자란?

  • 어떤 기능을 수행하는 기호(+,-,*,/ …)
  • 연산자의 종류와 우선순위 및 결합 방향
    연산기호 결합방향 우선순위
    (),.    
    ++ – +(부호) -(부호) ~ ! (type):형변환 <- 높음
    * / % ->  
    +(덧셈) -(뺄셈) ->  
    « » »> ->  
    < > <= >= instanceof ->  
    == != ->  
    & ->  
    ^ ->  
    ->  
    && ->  
    ㅣㅣ ->  
    ? : ->  
    = *= /= %= += -= «= »= »>= &= ^= ㅣ= <- 낮음
    • 우선순위는 헷갈리기 쉬우니까 (소괄호) 이용하자
산술 이항 연산자는 연산 전에  연산자의 타입을 일치시킨다.

byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; //Type mismatch: cannot convert from int to byte
//피연산자의 크기가 4byte(int) 미만이면 int로 변경한 후 연산 진행

int i1 = 10;
long l1 = 20;
int i2 = i1 + l1; //Type mismatch: cannot convert from long to int
//두 개의 피연산자 중 큰 타입으로 형 변환 후 연산 진행

float f1 = 10.0;
float f2 = f1 + 20.0; //Type mismatch: cannot convert from double to float
int i = 10;
System.out.println((i--)%2); //0
System.out.println(--i);     //8
System.out.println(i++);     //8
System.out.println(++(i-2)); //컴파일 에러
++, -- 변수에만 사용할  있다.

비트 논리 연산자

  • 2진수 형태로 변환 후 연산
    연산자 연산자 기능 결합방향
    & 두 피 연산자의 비트 값이 모두 1인 경우만 1, 나머지는 0 (ex> a&b) ->
    두 피 연산자의 비트 값이 모두 0인 경우만 0, 나머지는 1 (ex> aㅣb) ->
    ^ 두 피 연산자의 비트 값이 서로 다르면 1, 같으면 0 (ex> a^b) ->
    ~ 두 피 연산자의 모든 비트를 반전시킴 -> 1의 보수 (ex> ~a) <-
a: 10진수 3 -> 2진수 0 0 0 0 0 0 1 1
b: 10진수 5 -> 2진수 0 0 0 0 0 1 0 1

a & b : 0 0 0 0 0 0 0 1
a | b : 0 0 0 0 0 1 1 1
a ^ b : 0 0 0 0 0 1 1 0

비트 이동 연산자 (쉬프트 연산자)

  • *2, /2에 비해 속도가 빠름
    연산자 연산자 기능 결합방향
    « 앞의 피 연산자 비트 열을 뒤 피 연산자 만큼 왼쪽으로 이동하고 이동에 따른 빈 공간은 0으로 채움 (ex> a«2) ->
    » 앞의 피 연산자 비트 열을 뒤 피 연산자 만큼 오른쪽으로 이동하고 이동에 따른 빈 공간은 음수는 1, 양수는 0으로 채움 (ex> a»2) ->
    »> 앞의 피 연산자 비트 열을 뒤 피 연산자 만큼 오른쪽으로 이동하고 이동에 따른 빈 공간은 0으로 채움 (ex> a»>2) ->
a = 10;
b = a << 1   => *2와 동일
c = a >> 1   => /2와 동일

논리 연산자

  • 논리 연산자
    연산자 연산자 기능 결합방향
    & 두 개의 피 연산자 모두 true인 경우 true (ex> a>0 & b>0) ->
    두 개의 피 연산자가 하나라도 true이면 true (ex> a>0 ㅣ b<0) ->
    ! 단항 연산자로 피 연산자의 값이 false이면 true, true이면 false로 변경 (ex> !a) <-
    ^ 두 피 연산자가 서로 다를 경우만 true, 같으면 false (ex> true ^ false -> true, true ^ true -> false) ->
& T F     T F
T T F     T T T
F F F     F T F
  • Short Circuit 연산자
    연산자 연산자 기능 결합방향
    && &와 동일한 의미이나 앞의 피 연산자가 false이면 뒤의 피 연산자를 검사하지 않는다. (ex> a>0 && b>0) ->
    ㅣㅣ ㅣ와 동일한 의미이나 앞의 피 연산자가 true이면 뒤의 피 연산자를 검사하지 않는다. (ex> a>0 ㅣㅣ b>0) ->

2. 조건문

if문

  • if(_____)

    (논리형) boolean b;
    (비교식) x>=y
    (Method Call) isEven()

  • if문 예제
int a = 20;
String grade = null;

if(a>=6){                                 if(a>=19)
  grade = "아동";                            grade = "성인";
} else if(a>=13){                            System.out.println("성인");
  grade = "청소년";                        else if(a>=13)
} else if(a>=19){                            grade = "청소년";
  grade = "성인";                          else if(a>=6)
} esle{                                      grade = "아동";
  grade = "유아";                          else
}                                            grade = "유아";

오류 코드
  • 3항 연산자
int a =10;
String str = null;

if(a>=10){
  str = "10 이상";
} else{
  str = "10 미만";
}

3 연산자 사용
str = a>=10 ? "10 이상" : "10 미만";

switch문

  • switch(_____)

    (정수호환) byte, short, char, int x;
    (Enum) Day.MONDAY
    (Class Object) Byte, Short, Character, Integer, String
    (Method Call) getNumber()

  • switch문 예제
switch(value)
case 1: ...;
case 2: ...; break;
case 3: ...;
case 4: ...;
case 5: ...; break;
default:
 => ~부터 break 만나기  까지 실행
 => value값이 case 조건에 없으면 default 실행
int month = 3;
int day = -1;
switch(month){
  case 2:
    day = 29; break;
  case 4:
  case 6:
  case 9:
  case 11:
    day = 30; break;
  default:
    day = 31;
}

etc. ★Random 수 활용★

구분 코드 범위
Math.random() double d = Math.random() 0.0 <= d < 1.0
  double d = Math.random()*N 0.0 <= d < N.0
  int i = (int)(Math.random()*N) 0 <= i <= N-1
  int i = (int)(Math.random()*N)+1 1 <= i < N
Random rand = new Random();    
rand.nextInt(N) int i = rand.nextInt(N) 0 <= i < N
  int i = rand.nextInt(N)+1 1 <= i <= N
  • 주사위를 던져서 나올 수 있는 경우의 수(1~6) 구하기 (Random 이용)
int N = 6;

int num = (int)(Math.random()*N)+1;
System.out.println(num);

Random rand = new Random();
num = rand.nextInt(N)+1;
System.out.println(num);

num = rand.nextInt(100)%N+1;
System.out.println(num);
  • 주사위를 두 번 던져서 연속적으로 짝수 또는 홀수가 나오면 ‘A’를, 그렇지 않으면 ‘B’를 출력하는 코드
int N = 6;
Random rand = new Random();
int num1 = rand.nextInt(N)+1;
int num2 = rand.nextInt(N)+1;
String result = null;

boolean isNum1Even = num1%2 == 0;
boolean isNum2Even = num2%2 == 0;

result = isNum1Even == isNum2Even ? "A" : "B";

또는

result = (num1 + num2) % 2 == 0 ? "A" : "B";

태그:

카테고리:

업데이트:

댓글남기기