[패스트캠퍼스: Java&Spring 웹 개발] Week 1 - Java Basic

2023. 5. 9. 17:57Learn

728x90

본 게시글은 내일배움카드로 신청한 패스트캠퍼스의 국비지원교육 강의: Java&Spring 웹 개발입니다.

본 게시글은 패스트캠퍼스의 열공 챌린지 형식을 준수하며, 개인적인 정리 목적으로 학습 내용을 정리한 글입니다.

- 제목, 본문, 해쉬태그 키워드 포함

- 사진 1장 이상, 글자수 500자 이상 (공백 포함, 코드 제외)

https://gitlab.com/easyspubjava/javacoursework/-/tree/master/Chapter1


LSB/ MSB(Least/ Most Significant Bit)

가장 작은/큰 값을 저장하는 비트
signed data type의 MSB: 부호비트


Literal

Annotation Literals

  • 0B (2진수)
  • 0 (8진수)
  • 0X (16진수)

Naming Convention

  • Package: 대문자 없이
  • Class: 첫 글자만 대문자
  • Variable: 명확성-나중에 봐도 이해할 수 있도록; 길어져도 괜찮다 (Camel case)

Primitive Data Type in Java

  • byte 1B (0/1)
  • boolean 1B (T/F)
  • short 2B
  • char 2B (Unicode)
  • int 4B
  • float 4B
  • long 8B 
  • double 8B

Operator

  • 대입 연산자(assignment operator, l-value / r-value)
  • 부호 연산자
  • 산술 연산자
    • 나머지 연산 % (modulo)
      - 특정 구간을 반복하여 순환할 때
  • 복합 대입 연산자 (산술 연산 + 대입 연산)
  • 증가/ 감소 연산자 (전위/ 후위 연산)
  • 관계 연산자 (조건 판단, 결과 Boolean)
  • 논리 연산자 (조건 판단, 결과 Boolean)
    • 단락 회로 평가 (Short sircuit evalutaion)
      더보기
      질문: 이 최적화는 어느 수준에서 어떻게 이루어지는 과정인가요? 예를 들어, 컴파일러 최적화 과정에서 저수준 명령어에 조건/분기가 추가되는 방식으로 동작하나요?

      실습코치_고래
      1. 안녕하세요 현학님, 저도 생각해본 적이 없는 흥미로운 질문이네요. 논리연산자 질문의 경우, 제가 생각했을 땐 말씀해주신대로 컴파일 시점에 저수준 코드에 분기가 생길 것 같습니다. 어떤 값이 들어오는지 매번 확실하진 않으니 분기가 있어야 대응할 수 있겠네요. 매번 같은 값이 들어온다면 컴파일 시점에 분기가 필요 없겠지만요2. 네, javac 컴파일러를 말한 것이 맞습니다. JVM은 class loader, method area, heap 등 더 많은 것들을 포함하고 있는 개념이에요.3. 사실 그리 메이저한 주제가 아니다보니 확인할 수 있는 곳이 많지 않아요. 정말 확실하게, 디테일한 정보를 알고 싶으시다면 java specification 을 확인해보시는 것을 추천드립니다. 아래에 링크 남겨드릴게요https://docs.oracle.com/javase/specs/
  • 조건 연산자 (삼항 연산자)
    더보기
    질문: 조건에 사용되는 관계/논리 연산의 결과가 항상 참(예를 들어, 5>3)인 경우,
    컴파일러는 일반적인 대입 연산으로 바꾸어 적용하나요?


    실습코치_고래
    1. 컴파일러 구현체가 여러가지가 있어서 모든것이 성능 향상을 시킬지는 모르겠어요. Java specification 에는 아마 그런 내용은 따로 없는거 같기도 해요! 그런데 변수가 아니니까 아마 상수끼리의 비교이다보니 어느 정도 최적화는 있지 않을까 싶습니다 

    그런데 앞서 말했듯 컴파일러 구현체마다 다를 있어요
    2. OpenJDK    알아보시면 좋을  같아요
    Amazon에서만든corretto하나입니다

  • 비트 연산자
    • 비트 반전(~, tilde), AND, OR, XOR, 좌측/우측 SHIFT (<<, >>, >>>)

출처:http://www.tcpschool.com/java/java_operator_arithmetic

  • 비트 마스킹 (Masking), 비트 토글(Toggle)

** 중복된 연산 수행 시, 괄호로 묶어서 코드 가독성 높이기


Scanner

Scanner, 조건 연산자 활용하여 두 수 비교하기


제어문 (control flow statements, 조건문, 반복문, 분기문)

Conditional (조건문)

  • if - (else if) - (else)
    - 하나의 상황(변수)을 다룰 때에는 배타적인 조건으로 구현
  • switch - case - (break) - (default)
    - case로는 literal만 사용 가능, 문자열 지원
    • case a,b, ... ,z -> { yield 0; }
      화살표 ->를 사용하여 람다식으로서 직접 반환값을 명시하거나, 다중 명령은 {} 내부에 yield로 반환

Iteration (반복문)

while(){}

do{} while()

for(init; cond; iter){}

for (element e : eList)

중첩 반복문; 시간 복잡도 O(f(n)) 증가로 인한 성능 이슈 유의 

Branch (분기문)

break, continue

- goto문은 없지만 label을 활용하여 동일한 기능을 수행할 수 있다.

728x90