[DEV] study&learn
article thumbnail

 

pre-onboarding 3 to 9
아침에 일어나서 해보려했지만... 너무 힘들어
아침 기상하자 형준아

chapter 3. 연산자

 

연산자 : 연산에 사용되는 표시나 기호

피연산자 : 연산자와 함께 연산되는 데이터

연산식 : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것

 

산술 연산자의 경우 숫자 타입으로 결과 값이 나오고, 비교 연산자논리 연산자는 논리 타입으로 결과값이 나온다.

 

연산의 방향과 우선순위

+, - 보다 *, / 의 우선 순위가 높다.

논리 연산자보다 비교 연산자의 우선 순위가 높다.

대부분의 연산자는 왼쪽에서 오른쪽(→) 방향으로 연산을 수행한다.

하지만 단항 연산자, 부호 연산자, 대입 연산자는 오른쪽에서 왼쪽(←) 방향으로 연산을 수행한다.

 

정리

  1. 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다.
  2. 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.
  3. 단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다.
  4. 복잡한 연산식에는 괄호( )를 사용해서 우선순위를 정한다.
  5.  

연산자의 종류

단항 연산자 : 피연산자가 단 하나뿐인 연산자를 말한다. 부호연산자(+, -), 증감 연산자(++, --), 논리 부정 연산자(!)가 있다.

이항 연산자 : 파연산자가 2개인 연산자를 말한다.

- 비교 연산자는 피연산자의 대소 또는 동등을 비교해서 true / false 를 산출한다.

- 논리 연산자의 종류와 기능

- &&, || 와 &, | 는 더 효율적으로 작동하는지의 차이

- 대입 연산자의 종류와 기능

삼항 연산자 : 3개의 피연산자를 필요로 하는 연산자를 말한다.

 

0.1과 0.1f 는 다르다!

0.1 == 0.1f --> false

자바에서 실수는 double 을 기본 타입으로 가진다.

0.1 -> double 타입

0.1f -> froat 타입

 

두 수를 비교 연산자 == 로 비교를 하면 두 수는 다른 수라고 결과가 나온다.

 

왜일까?

0.1 과 0.1f 를 비교 연산하게 되면, 0.1f는 double 타입으로 자동 타입 변환이 일어나게 된다.

4byte인 froat 가 8byte인 double 로 자동 타입 변환이 일어나는 과정에서 0.1의 근사치를 값으로 가지게 된다.

(4byte를 8byte의 크기로 늘리면서, 빈 공간을 0(?) 으로 채우게 된다.)

 

예외적으로, 10.0f 같이 소수부분이 0이거나 0.25f 같이 2진수로 딱떨어지는 값인 경우 8byte로 변경되더라도 값이 변하지 않기에 때문에 비교 연산시 true 라는 결과 값을 얻을 수 있다.


chapter 4. 조건문과 반복문

 

1. 조건문

조건문은 조건식에 따라 다른 실행문을 실행하기 위해 사용된다.

if문은 조건식의 결과가 true, false 이냐에 따라, switch문은 변수의 값에 따라 실행문이 결정된다.

 

if문

if문은 조건식의 결과에 따라 블록 실행 여부가 결정된다.

조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나, boolean 타입 변수가 올 수 있다.

조건식이 true이면 블록을 실행하고, false이면 블록을 실행하지 않는다.

if (조건식) {	
    실행문 A //조건식이 true, 실행문 A, B 실행
}
실행문 B //조건식이 false, 실행문 B 실행

 

if-else문

if문은 else 블록과 함께 사용되어 조건식의 결과에 따라 실행 블록을 선택합니다.

if문의 조건식이 true면 if문의 블록이 실행되고, false이면 else 블록이 실행됩니다. 조건식의 결과에 따라 이 2개의 블록 중 어느 한 블록의 내용만 실행하고 전체 if문을 벗어나게 됩니다.

if (조건식) {	
    실행문 A //조건식이 true, 실행문 A 실행
} else {
	실행문 B //조건식이 false, 실행문 B 실행
}

 

if-else if-else문

조건문이 여러 개인 if문도 있다.

else if문의 수는 제한이 없으며, 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 if문을 벗어나게 됩니다. else if 블록의 마지막에는 else 블록을 추가할 수 있고, 모든 조건식이 false일 경우 else 블록을 실행하고 if문을 벗어나게 된다.

if (조건식1) {	
    실행문 A //조건식1이 true, 실행문 A 실행
} else if (조건식2) {
	실행문 B //조건식2가 true, 실행문 B 실행
} else {
	실행문 C //조건식1, 2가 false, 실행문 B 실행
}

 

Math.random() 메소드

자바에서 정수의 난수를 얻는 메소드가 있다.

Math.random() 메소드는 0.0 과 1.0 사이에 속하는 double 타입의 난수 하나를 리턴한다!

0.0 <= Math.random() < 1.0

 

switch문

switch문은 if문과 마찬가지로 조건 제어문이다.

if문처럼 조건식이 true일 경우에 블럭 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.

switch(변수) {
	case 값1:
    	실행문A; // 변수가 값1일 경우 실행문A 실행
        break;
    case 값2:
    	실행문B; // 변수가 값2일 경우 실행문B 실행
        break;
    default:
    	실행문C; // 변수가 값1, 2가 아닐 경우 실행문C 실행
}

 

char 타입 변수를 이용해 알파벳 대소문자에 관계없이 동일하게 처리하도록 switch문

public class SwitchCharExample {
	public static void main(String[] args) {
    	char grade = 'B';
        
        switch(grade) {
        	case 'A':
            case 'a':
            	System.out.println("우수회원 입니다.")
                break;
            case 'B':
            case 'b':
            	System.out.println("일반회원 입니다.")
                break;
            default:
            	System.out.println("손님입니다.")
        }
    }
}

 

2. 반복문

반복문은 어떤 작업(코드)이 반복적으로 실행되도록 할 때 사용된다.

 

for문

for문은 주어진 횟수만큼 실행문을 반복한다.

초기화식에 선언된 변수는 for문 블록 내부에서 사용되는 로컬변수이다.

 

아래는 for문의 기본 형태

for ( 초기화식 ; 조건식 ; 증감식 ) {
	실행문 // 조건식이 true일 경우 실행
}

 

for문 사용 예시 (1~10의 합)

int sum = 0;
// 9라인에서 출력할 sum이라는 변수를 선언 및 초기화

for ( int i = 0 ; i < 10 ; i++ ) {
	sum += i + 1;
    // i는 0부터 시작하기 때문에 1~10의 합을 구하기 위해
    // i + 1로 값을 조정
    // for문을 한 바퀴를 돌 때 마다, 1라인에 선언한 sum에 새로운 값이 저장.
    // i가 9일 때를 마지막으로 for문 종료.
}

System.out.println(sum)

//출력된 sum 값은 55

 

초기화식이 필요 없을 경우 생략 가능

int i = 0;
for ( ; i < 10 ; i ++ ) {---}

 

초기화식, 증감식이 둘 이상인 경우 쉼표(,)로 구분해 작성

조건식은 비교연산자를 사용하는 듯 하다.

for ( int i = 0, j = 100; i < 50 && j > 50; i++, j--) {---}

 

while문

while문은 조건식이 true일 경우 계속해서 반복한다.

조건식에는 비교 또는 논리 연산식이 주로 오며, 조건식이 false가 되면 반복 행위를 멈추고 while문을 종료한다.

 

while문 기본 형태

while ( 조건식 ) {
	실행문 A
    // 조건식이 true일 경우 실행문 A, B 실행
}
실행문 B
// 조건식이 false일 경우 실행문 B만 실행

 

while문에서 루프 카운터 변수를 사용하려면, while문의 시작전에 미리 선언하여 사용하여야 한다.

while문이 무한 루프에 돌지 않고 종료시키기 위해서는 변수의 값을 false로 만들거나, break문을 이용하는 방법이 있다.

 

do-while문

do-while문은 조건식에 의해 반복 실행한다는 점에서는 while문과 동일하고,

차이점은 do-while문은 블록 내부의 실행문을 먼저 실행하고 실행결과에 따라 반복 실행을 할지 결정한다.

 

do-while문 기본 형태

do {
	실행문
    // 1. 실행문을 먼저 실행 한 후
} while ( 조건식 );
	// 2. 조건식에 따라 반복할지 멈출지를 결정한다.

 

break문

반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료하지 않는다.

중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고, 'break 이름;'을 사용한다.

// 1.
for ( 조건식 ) {
	for ( 조건식 ) {
    	break;
    }
}

// 2.
Label: for ( 조건식 ) {
	for ( 조건식 ) {
    	break Label;
    }
}

1번 for문의 경우 break 문이 실행되면, 내부 for문만 빠져나오고 외부 for문은 반복 실행한다.

2번 for문의 경우 break 문이 실행되면, Label(이름)을 지니고있는 for을 빠져나온다.

 

continue문

continue문은 반복문에서만 사용된다.

블록 내부에서 continue문이 실행되면 반복문의 증감식 또는 조건식으로 이동한다.

 

break문과 반대로 continue문이 실행되면 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다.

for ( 조건문 ) {
	// 2. 다음 반복으로 넘어간다.
	if ( 조건문 ) {
    	continue;
        // 1. if의 조건문이 true면 continue문을 실행하고,
    }
    // 3. if의 조건문이 false면 continue문을 실행하지 않고, 다음 문장을 실행한다.
}
profile

[DEV] study&learn

@devjuni

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!