[TIL_230316] Java 공부

이진규·2023년 3월 16일
0

TIL

목록 보기
2/2

오늘 공부한 내용 ✍️

java

상수 (constant)

  • 상수 선언하기
    • 상수는 변하지 않는 수
    • 원주율, 1년 12개월 등
    • final 예약어 사용하여 선언 (method, class에 다 쓸 수 있음) ex) final int MAX_NUM = 100;
    • 보통 전부 대문자로 표현
    • 상수 사용하면 변하지 않는 값 반복하여 사용할 때, 의미있는 문자로 인식하기 쉽고, 변하더라도 선언한 부분만 변경하면 되므로 여러 부분 수정할 필요 X
  • 리터럴(literal)
    • 프로그램에서 사용하는 저장되어있는 숫자, 문자, 논리값
    • java 구조 -> num = 10 이라할 때, 10이란 값 (4byte) 저장되어있는 메모리에서 num 값에 복붙하는 것 (원본은 그대로)
    • 리터럴은 상수 풀(constant pool)에 있음
    • 상수 풀 (constant pool)
      • 컴퓨터에서 프로그램 실행하는 법 -> 하드에서 메모리로 프로그램 로드
      • 해당 기능 쓸 때만 메모리에 로드되는 타입도 있지만 프로그램 로드되면 메모리 먼저 차지하는 타입도 있음
      • 먼저 차지하는 타입 = constant pool or data area = 상수(리터럴), static 변수 등이 담김
      • 프로그램이 unload 될 때 같이 사라짐
    • 정수 리터럴은 int, 실수는 double로 저장되어있음
    • 정수의 범위가 넘어가는 경우는 L or l, float는 F or f 식별자 써줘야함
  • 형 변환 (type conversion)
    • 서로 다른 자료형 간 연산 등의 수행 위해 하나의 자료형으로 통일하는 것
    • 묵시적 형변환 (explicit type conversion, 자동 형 변환)과 명시적 형변환 (implicit type conversion, 강제 형 변환)이 있음
    • 묵시적 형변환 (자동)
      • 바이트 크기가 작은 자료형 -> 큰 자료형
      • 덜 정밀한 자료형 -> 더 정밀한 자료형

연산자

  • 항과 연산자

    • 항(operand): 연산에 사용되는 값
    • 연산자(operator): 항을 이용하여 연산하는 기호
  • 대입 연산자 (assignment operator)

    • 변수에 다른 변수나 값을 대입하는 연산자
    • 이항 연산자 중 우선 순위가 가장 낮은 연산자들
    • 왼쪽 변수 = 오른쪽 변수 (or 식,값)
    • 다른 연산자보다 우선 순위가 낮다
  • 부호 연산자

    • 단항 연산자
    • 변수의 부호를 유지(+)하거나 바꿈(-) (원본은 안바뀜 ex) -num )
    • 실제 변수의 부호가 변하려면 대입 연산자를 사용해야 함
  • 산술 연산자

    • % 나머지 구하는 연산자, 숫자 n의 나머지 범위는 0~n-1
  • 복합 대입 연산자

    • 대입 연산자와 다른 연산자가 함께 쓰임
  • 증가, 감소 연산자

    • 단항 연산자
    • 변수의 값을 1 더하거나 1 뺄때 사용
    • 연산자가 항의 앞에 있는지 뒤에 있는지에 따라 연산 시점과 결과가 달라짐
    • aa = 10 일 때 b = aa++ 하면 b=10, a=11 | b = ++aa 하면 b=11, a=11
    • 문장(statement)의 끝(;)을 기준으로 연산 시점 생각해야 함
  • 관계 연산자

    • 이항 연산자
    • 연산의 결과가 true, false로 반환됨 (=비교 연산자)
    • 데이터 타입은 boolean
    • 조건문, 반복문의 조건식으로 많이 사용
  • 논리 연산자

    • 관계 연산자와 혼합하여 많이 사용
    • 연산의 결과가 true, false로 반환
    • 논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가 (short circuit evaluation)
      • 논리 곱(&&): 두 항의 결과가 모두 true일 때만 결과가 true -> 앞의 항의 결과가 false이면 뒤 항의 결과를 평가 X (= 뒤 항 연산이 안됨)
      • 논리 합(||): 두 항의 결과가 모두 false일 때만 결과가 false -> 앞의 항의 결과가 true이면 뒤 항의 결과를 평가 X (= 뒤 항 연산이 안됨)
  • 조건 연산자

    • 삼항 연산자
    • 조건식의 결과가 true인 경우와 false인 경우 다른 결과 수행
    • if문 간단히 표현할 때 사용 가능
  • 비트 연산자

    • 대입연산자와 다른 연산자가 함께 쓰임
    • 마스크: 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
    • 비트켜기: 특정 비트들만을 1로 설정해서 사용하고 싶을 때 ex) & 00001111 (하위 4비트 중 1인 비트만 꺼내기)
    • 비트끄기: 특정 비트들만을 0으로 설정해서 사용하고 싶을 때 ex) |11110000 (하위 4비트 중 0인 비트만 0으로 만들기)
    • 비트 토글: 모든 비트들 중 0->1, 1->0 바꾸고 싶을 때
    • shift
      • 3 << 2 (3에서 두 칸 왼쪽으로 밀기) -> 0011 << 2 -> 1100 -> 왼쪽으로 밀 땐 밀린 칸 0으로 채움
      • 3 >> 2 (3에서 두 칸 오른쪽으로 밀기) -> 0011 >> 2 - 0000 -> 오른쪽으로 밀 땐 왼쪽 첫번째 숫자로 채움 ex) 11 >> 2 -> 1011 >> 2 -> 1110 -> 이유: 음수 표현할 때 왼쪽 첫번째 숫자는 1로 표현해서 혼동 막기 위해
    • shift 등 비트 연산자 쓰는 이유
      • 예전엔 값 하나에 16비트 다 쓰는게 비효율적이라 생각
      • 8비트 8비트씩 쪼개쓴다고 할 때 앞에 8개 뒤에 8개로 나눠쓰면 효율적 -> a = 5 >> 8 -> 00000101/00000000 이러고 뒤에 3 = 011 넣을 때 | 연산자 쓰면 00000101/00000011 이런 식으로 두개 값 넣기 가능
  • 연산자 우선순위

조건문

  • if문
    • 조건문이란
      • 주어진 조건에 따라 다른 실행이 이뤄지도록 구현
      • if 문
      if(조건식){
         수행문;
      }
      • if-else 문
      if(조건식) {
         수행문1; // 조건식이 '참'인 경우에 수행됨
      }
      else{
      수행문2;  // 조건식이 '참'이 아닌 경우에 수행됨
      }
      • if-else if-else문
        if(조건식) {
          수행문1;
        }
        else if(조건식2){
        수행문2;
        }
        else {
        수행문3;
        }
  • switch - case 문
    • if-else if-else문을 사용할 때 복잡하고 번거로운 부분을 가독성 좋게 구현
    • 비교 조건이 특정 값이나 문자열일 겨우 사용
    • break 문을 사용하여 각 조건이 만족되면 switch 블럭을 빠져나오도록 함
    • java 14부터 좀 더 간결해진 표현식이 지원됨 (break 사용 안함)
    • case 1,2,3 이나 case 1: case 2: 이런식으로 붙여서 쓰기 가능 (윗버전부터)

반복문

  • while문

    • 주어진 조건에 맞는 동안 (true) 지정된 수행문을 반복적으로 수행하는 제어문
    • 조건이 맞지 않으면 반복하던 수행을 멈추게 됨
    • 조건은 주로 반복 횟수나 값의 비교의 결과에 따라 true, false 판단 됨
    • ex) 달리는 자동차, 특정 온도까지 가동되는 에어컨 등
      while(조건식) {
         수행문1;
      }
    • 지역 변수에서 사용 전 초기화 해줘야함 ex) int sum x -> int sum = 0;
  • do-while 문

    • 조건과 상관없이 1회 수행하고 나서 조건을 체크
      do(조건식) {
         수행문1;
      }while(조건식) {
         수행문2;
      }
  • for문

    • 각 반복문 주 사용처

    • for문 생략 가능 종류

      • 초기화식 생략 : 이미 이전에 값이 초기화 되어 for 내부에서 값을 지정할 필요가 없는 경우

      • 조건식 생략 : 반복 수행에 대한 조건이 수행문 내부에 있는 경우

      • 증감식 생략 : 증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결과값에 결정되는 경우

      • 무한 반복

  • 중첩 반복문 (Nested Loop)

    • 반복문 내부에 또 다른 반복문
    • 여러 겹으로 반복문 겹쳐서 구현 가능 (단 수행시간에 문제 발생 가능)
    • 외부 반복문과 내부 반복문 간의 변수 값 변화에 유의하며 구현해야함
  • break문

    • 감싸고 있는 제어문의 블록에서 빠져 나오는 기능 (switch문에서도 사용)
    • 반복문에서는 주로 조건문(if)와 같이 사용하여 조건에 해당되는 경우 반복 수행을 멈추고 반복문 외부로 수행이 이동
    • 여러 반복문이 중첩되어 있는 경우엔 break문이 포함되어 있는 반복문만 빠져나옴
  • continue문

    • 반복문 내부에서 조건문(if)같이 사용하며, 조건이 맞는 경우 (true이면) 이후 반복문은 블럭 내부의 다른 수행문들을 수행하지 않음

어려웠던 내용 😅

  • 비트 연산자 부분
    • 처음엔 용도를 몰라 어려웠다. 알고나니 내용 자체 뿐만 아니라 개념적으로도 좋았다.
  • for문 사용법
    • 파이썬보단 c언어 같은 부분이 있고, 활용 방법도 다양해 복잡한 느낌이 들었다.

궁금한 내용 / 부족한 내용 🔍

  • 오늘은 따로 없는 듯

느낀점 🤔

  • 생기초는 다 뗐는데, 생각해보니 아직 배열 쪽은 건드리지도 않았다. 얼른 배워서 알고리즘 풀어보며 적응해야지

자료 및 내용 출처: https://gitlab.com/easyspubjava/javacoursework/-/tree/master

profile
Junior Backend Developer

0개의 댓글