2023.04.18 코드스테이츠 6일차.

2023. 4. 18. 18:17Code

반응형

연산자

산술연산자
- 사칙연산에 사용되는 연산자 ( + - * / ) 와 나머지 연산자 ( % )
- 산술연산자의 동작은 우리가 알고있는 일반적인 수학 연산과 거의 동일하다
- 나눗셈 연산자(/)와 나머지연산자(%)를 사용할 때는 우항에 0 이 올수 없다 ( 좌항에서 우항을 나누는 방식이기 때문이다 )
- 나눗셈 연산자를 사용할 때, 좌항과 우항이 모두 int형이면 그 결과도 int형이기 때문에 소수점 이하의 값은 버려지고, 오직 몫만 결과로 반환된다. 하지만 둘 중 하나라도 실수 타입의 값이 존재한다면
   실수 타입이 아닌 값도 실수 타입으로 자동으로 형변환 되어 결과적으로 실수 값의 나눗셈 연산이 되어 소수점이 버려지지 않은 온전한 값으로 반환된다

 증감연산자
- 정수 타입의 변수가 가진 값을 증가시키거나 감소시켜야 하는 경우가 있다.
- num1++, ++num1, num1--, --num1
- 증감 연산자가 피연산자보다 앞에 있으면 전위형 증감연산자, 뒤에 있으면 후위형 증감 연산자
- 전위형 증감 연산자 : 증감 연산을 먼저 수행한 후 그 결과값을 적용   ( 바로 증감 값이 출력된다 )
- 후위형 증감 연산자 : 기본의 값을 먼저 적용하고 그 다음에 증감 연산을 수행 ( 바로 증감되기 전의 값이 출력되고 코드 안에서 증감 된다 )

복합 대입 연산자
- 사칙 연산과 함게 조합하여 복합 대입 연산자로 활용가능
## num1~5의 값을 모두 10이라고 한다면,
num1 += 3; // num1 -> 13
num2 -= 3; // num2 -> 7
num3 *= 3; // num3 -> 30
num4 /= 3; // num4 -> 3
num5 %= 3; // num5 -> 1

비교 연산자
- boolean 타입으로 평가될 수 있는 조건식에 사용된다 
- >, <, <=, >= (대소 비교 연산자) 
- ==, != (등가비교 연산자)

대소비교 연산자 : >, <, >=, <=
- boolean을 제외한 나머지 기본타입에 모두 사용할 수 있다.
- x < 5 와 같이 이항 비교만 가능하다
- 이항을 넘는 비교는 논리 연산자를 사용해주어야 한다

등가비교 연산자 : ==, !=
- == 값이 같은경우 ture
- != 같이 다를경우 ture
- 기본 타입과 참조 타입 간에는 ||비교연산자를 사용할 수 없다.

논리 연산자
- && ( and ), || ( or ), ! ( Not ) 연산자    공통으로 boolean 타입을 반환한다
- && ( and ) : 피연산자 두개가 모두 ture일때만 ture, 두개중에 하나라도 false면 false 반환
- || ( or ) : 피연산자 두개중 하나라도 ture 면 ture, 피연산자 모두가 false인 경우에만 false
- ! ( Not ) : ture와 false를 반대로 바꾸는 연산자이다
## 아래의 비교 연산 결과는 모두 true입니다. 
!true == false 
!false == true
!!true == true

연산자 우선순위
1. [], (), .
2. ++, --, ~, !, (type), new
3. *, /, %
4. +, - ( 더하기 뺴기 ), + ( 문자 결합 )
5. <<, >>, 
6. <, <=, >,  >=
7. ==, !=
8. &&, ||
9, ?, :
10. =, +=, *=, -=, /=, %=
순으로 연산된다

콘손 출력
- 프로그래밍을 하면서 변수에 담긴 값을 확인해야 할 필요가 있을 때 콘손에 출력 할 수 있다.
- Syste m.out.print(), System.out.println(), Syste m.out.printf() 메서드를 활용 한다
1. Syste m.out.print() : 출력하기
- 소관호 안의 내용을 단순히 출력하기만 하고 줄바꿈은 하지 않는다
2. System.out.println() : 출력하고 줄 바꾸기
- 소괄호 안의 내용을 콘솔에 출력하고 줄 바꿈을 한다 ln은 line을 의미한다
3.  Syste m.out.printf() : 형식대로 출력하기
- 지시자 ( specifier : 형식 지정자 )를 이용해 변수의 값을 여러 형식으로 출력해 주는 메서드 이다
- 지시자는 이름 그대로 값을 어떤 형식으로 출력할 것인지를 지정하기 위해 사용한다,  f는 formatted의 약자입니다.
- 지시자는 실제로 출력되는 값이 아니며 값을 변환해 자신의 위치에 출력해 주는 기능을 한다
- %b (불리언), %d (10진수), %o (8진수), %x, %X (16진수), %c (문자)
%s 문자열
%n 줄 바꿈
지시자   출력 포맷
%b   불리언
%d   10진수
%o   8진수
%x, %X  16진수
%c    문자
%s   문자열
%n   줄 바꿈

콘솔 입력 

import java.util.Scanner;                 // Scanner 클래스를 가져옵니다.

Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
String inputValue = scanner.nextLine();   // 입력한 내용이 inputValue에 저장됩니다.

System.out.println(inputValue);           // 입력한 문자열이 출력됩니다.

1. import java.util.Scanner;
- 데이터를 입력받는 기능을 작은 프로그램으로 만들어둔 것이 Scanner 이다. 
- Scanner는 java.util이라는 위치에 저장돼 있는데, Scanner를 사용하려면 먼저 여러분이 작성하고 있는 소스 코드 안으로 Scanner를 불러와야 한다
 ( 코드안 public class Main { 윗줄에 입력하여 불러온다 )
2. Scanner scanner = new Scanner(System.in);
- 불러온 Scanner는 클래스 이다
- 사용하고자 하는 Scanner 클래스의 데이터 입력 기능은 Scanner 클래스 자체가 아니라, 그것을 통해 만들어낸 객체에 존재한다
- 데이터 입력 기능을 사용하려면 Scanner 클래스를 통해 객체를 먼저 만들어야 한다
- 클래스를 통해 객체를 만들어 낼 때는 new 연산자를 사용하며, 그 결과물로 만들어진 객체를 인스턴스라고 한다
- new 연산자를 적용하여 인스턴스를 만드는 것을 ‘클래스를 인스턴스화한다'라고 표현한다
3. String inputValue = scanner.nextLine();
- Scanner 클래스를 인스턴스화한 scanner에는 nextLine()이라는 메서드가 존재한다
- scanner.nextLine()은 문자열을 입력받기 위한 코드이며, 입력받은 문자열은 inputValue라는 변수에 할당되어 저장된다
- 정수형을 입력받을 수 있는 nextInt(), 실수형을 입력받을 수 있는 nextFloat()등의 메서드들도 존재한다


제어문 - 조건문
- if,else if, else, switch 와 논리연산자 ( &&, ||, ! ) 사용한다
- 특정 조건에 부합하는 경우에 어떤 코드를 실행시키면서 어떤 코드는 실행시키지 않을 수 있다

if 문
- if () { } : 소괄호 안에는 boolean 값으로 평가될 수 있는 조건식을 넣어주고 중괄호 안의 실행 블록에는 조건식이 참일 때 실행하고자 하는 코드를 작성한다
- {} 중괄호를 이용해 여러 문장을 하나의 단위로 묶을 수 있다

if..else 문
- 조건식의 결과에 따라 실행블록을 선택한다
- if 문의 조건식이 true면 해당 블록이 실행되고 false면 다음으로 넘어가 else if 문의 조건식을 검사한다
- else if 문의 모든 조건식이 false 라면 나머지 경우를 의미하는 else 블록이 실행된다

if(조건식1) {
//조건식1이 참이라면, 실행되는 블록입니다.

else if (조건식2) {
//조건식1이 참이 아니면서 조건식2가 참일 때, 실행되는 블록입니다.

else {
//조건식1과 2가 모두 참이 아닐 때, 실행되는 블록입니다.
//else문은 생략 가능합니다.
}


Swich 문
- if 문 과 마찬가지로 조건 제어문이다
- Swich 문은 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다

package com.company;

import java.util.Scanner;

public class Main {
    static Scanner myInput = new Scanner(System.in);
    public static void main(String[] args) {
        String dice = myInput.nextLine(); //주사위 번호 입력

        switch (dice) {
            case "1":
                System.out.println("1번");
                break; //다음 case를 실행하지 않고, switch문 탈출!
            case "2":
                System.out.println("2번");
                break;
            case "3":
                System.out.println("3번");
                break;
            case "4":
                System.out.println("4번");
                break;
            case "5":
                System.out.println("5번");
                break;
            case "6":
                System.out.println("6번");
                break;
            default: //switch문의 괄호 안 값과 같은 값이 없으면, 여기서 실행문 실행
                System.out.println("없는 숫자! " + dice);
                break;
        }
    }
}

- switch문은 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문을 실행한다 
- 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행한다 (default는 생략 가능하다)
- break 문 을 작성하지 않으면 Switch 문 을 탈출하지 않고 모든 Case문을 실행하게 되어 원하는 방식으로 동작하지 않는다
- switch문에는 int 뿐만 아니라 char 타입 변수도 사용가능하고 자바 7부터는 String 타입의 변수도 올 수 있다
- : 를 사용해서 입력값을 인식한다

알고리즘
- 어떤 문제를 해결하기 위해 논리적인 해결 방법을 담은 코드를 작성하는 일이 '개발'이다
- 어떤 문제를 해결하기 위한 일련의 절차나 방법을 정해진 형태로 표현한 것을 '알고리즘' 이라 한다
- 프로그램의 절차 하나하나를 우리가 실제로 사용하는 일반적인 언어(자연어)로 작성하는 방법을 수도 코드(pseudocode)라고 한다
  ( 수도 코드는 컴퓨터가 이해할 수 있는 언어는 아니다 (컴퓨터에서 실행할 수 있는 코드가 아니다) 실제로 코딩하기 전에 프로그램의 작동 순서와 같은 흐름을 파악할 수 있다 )


금일은 연산자와 제어문중 조건문에 해당하는 파트는 학습하였다. 전날 Java의 기초를 배우면어 조건문이 어렵다는 다른 영상과 말들을 듣고 큰 두려움을 가지고 학습에 돌입하였는데 연산자는 우리가 흔히 일상생활에서 썻던 연산자에 조금씩 합성을 하여 더 편하게 사용을 할 수 있고 비교 연산자를 통해 이 값이 진실인가 거짓인가를 가려내는 파트는 생각보다 어렵지 않고 재밌게 학습을 하였지만 조건문에 돌입하자마자 머리가 '띵'하는 느낌을 받았다. 학습 자료로 공부 할 때는 분명 이 부분 저 부분을 이해하고 넘어 간 것 같았지만 예제 문제에 들어서는 순간 어디서 부터 어떻게 해야할지 전혀 감이 오지 않았다. 그래도 강의해주시는 선생님 말에 따라 문제를 먼저 읽어보고 바로 코드를 작성하는 것이 아닌 펜과 종이를 이용해 문제를 보면서 이 문제는 어떻게 실행이 되어야 하고 이 값이 실행됨에 따라 어떠한 결과가 나올지를 미리 작성해보고 코드를 작성하니 조금은 편한 느낌을 받았다. 

아직 Java 기초와 조건문은 가야할 길이 멀다. 그러나 빠르진 안지만 한걸음 한걸음 이라도 천천히 발을 떼어 전진하는 태도를 가져야 겠다.

728x90