연산자 (Operators)

연산의 구성

  • 연산자 (Operator), 피연산자 (Operand), 연산식 (Expression)

우선순위 표

  • 우선순위가 같은 경우, 결합 방향 순으로 이루어진다.

    연산자 결합 방향 우선순위
    () 1
    ++ – + - ~ ! (int) 2
    * / % 3
    + - 4
    << >> >>> 5
    > < >= <= instanceof 6
    == != 7
    & 8
    ^ 9
    | 10
    && 11
    || 12
    ?: 13
    = += -= *= /= %= ^= |= <<= >>= >>>= 14

다양한 연산자

산술 연산자 (Arithmatic Operators)

연산자 기능
+ 두 피연산자의 합
- 두 피연산자의 차
* 두 피연산자의 곱
/ 두 피연산자의 나눈 몫
% 두 피연산자의 나눈 나머지(Modulus)
  • 산술 연산자 사용 시 주의점
    • 정수형: 오버플로우
    • 실수형: 정확도
    • /, % : Infinity, NaN

대입 연산자 (Assignment Operators)

연산자 기능
= 우측 피연산자의 값을 좌측 피연산자 변수에 할당
+= 두 피연산자의 합을 좌측 피연산자에 할당
-= 두 피연산자의 차를 좌측 피연산자에 할당
*= 두 피연산자의 곱을 좌측 피연산자에 할당
/= 좌측 피연산자를 우측 피연산자로 나눈 몫을 좌측 피연산자에 할당
%= 좌측 피연산자를 우측 피연산자로 나눈 나머지를 좌측 피연산자에 할당

비교 연산자 (Comparison Operators)

연산자 기능
< 좌측 피연산자가 우측 피연산자보다 작은가?
> 좌측 피연산자가 우측 피연산자보다 큰가?
<= 좌측 피연산자가 우측 피연산자보다 작거나 같은가?
>= 좌측 피연산자가 우측 피연산자보다 크거나 같은가?
== 좌측 피연산자와 우측 피연산자가 같은가?
!= 좌측 피연산자와 우측 피연산자가 다른가?
  • 비교 연산자의 출력은 true 또는 false이다.

논리 연산자 (Logical Operators)

연산자 기능
& AND
| OR
! NOT
^ XOR
Short Circuit 연산자 기능
&& AND
|| OR

증감 연산자 (Increment and Decrement Operators)

연산자 기능
++ (Prefix) 피연산자의 값을 1 증가한 후 연산식 평가
++ (Postfix) 연산식을 평가한 후에 피연산자의 값을 1 증가
– (Prefix) 피연산자의 값을 1 감소시킨 후 연산식 평가
– (Postfix) 연산식을 평가한 후에 피연산자의 값을 1 감소

삼항 연산자 (Ternary Operator)

연산자 기능
? : 첫 피연산자의 값의 true이면 두번째 연산자를, false이면 세번째 연산자를 출력

비트 연산자 (Bitwise Operator)

  • 비트 연산자는 정수형을 피연산자를 대상으로 한다.

  • 논리 비트 연산자

    연산자 기능
    & Bitwise AND
    | Bitwise OR
    ~ Bitwise INV
    ^ Bitwise XOR
  • 이동 비트 연산자 (Shift Operator)

    연산자 기능
    << 좌측 피연산자의 각 비트를 왼쪽으로 우측 피연산자만큼 이동시킨다. 빈자리는 0으로 채운다.
    >> 좌측 피연산자의 각 비트를 우측으로 우측 피연산자만큼 이동시킨다. 빈자리는 Sign Bit로 채운다.
    >>> 좌측 피연산자의 각 비트를 우측으로 우측 피연산자만큼 이동시킨다. 빈자리는 0으로 채운다.

Comment and share

자료의 입출력 (Inputs and Outputs)

출력 메소드

  • 포맷 문자열을 이용한 문자열/기본형 출력
  • 객체를 직접 출력

PrintStream의 출력 메소드

메소드 메소드 선언 설명
print() public void print(Object obj) obj를 스트림으로 출력한다.
println() public void println(Object x) x를 스트림으로 출력하고 줄바꿈한다.
printf() public PrintStream printf(String format, Object ... args) Format 맞추어 args를 출력한다.

포맷 문자열 지시자

지시자 설명
%b boolean
%d decimal integer
%o octal
%x, %X hexadecimal
%f decial float
%e, %E exponent
%c character
%s string
%n newline

지시자 자릿수 표현

표현 설명
%nd 최소 n칸을 사용하고 숫자를 오른쪽 정렬
%-nd 최소 n칸을 사용하고 숫자를 왼쪽 정렬
%0nd 최소 n칸을 사용하고 빈칸은 0으로 채움
%n.mf 최소 n칸을 사용하고 소수점 이하 m자리까지 표현

시간을 출력하는 포맷 문자

지시자 설명 예시
%tH 24시간 표기법의 시간 22
%tl 12시간 표기법의 시간 08
%tM 59
%tS 60
%tp 오전/오후 AM
%tT %tH:%tM:%tS 23:11:06
%tR %tH:%tM 16:42
%tr %tl:%tM:%tS %tp 04:15:55 PM

날짜를 출력하는 포맷 문자

지시자 설명 예시
%tB March
%tb 축약형 월 Mar
%tm 03
%tA 요일 Monday
%ta 축약형 요일 Mon
%tY 년도 2020
%ty 축약형 년도 20
%td 09
%te 9
%tZ Time Zone KST
%tD %tm/%td/%ty 02/24/89
%tF %tY-%tm-%td 1989-02-24
%tc %ta %tb %td %tT %tZ %tY Sun Feb 24 07:20:15 KST 1989

입력 메소드

  • Scanner 클래스를 이용하여 입력받을 수 있다.

    1
    2
    3
    4
    5
    import java.util.Scanner;

    ...

    Scanner scanner = new Scanner(System.in);
  • Scanner 클래스의 주요 메소드

메소드 메소드 선언 설명
next() public String next() 공백을 기준으로 한 단어씩 입력받는다.
nextLine() public String nextLine() 한 줄 전체를 입력받는다.
nextInt() public int nextInt() int 값을 입력받는다.
nextDouble() public double nextDouble() double 값을 입력 받는다.
close() public void close() 입력 스트림을 종료한다.

Comment and share

자료형 (Data Type)

자료형이란

  • 변수의 종류, 타입

  • 기본형 (Primitive Type)

    • 값을 변수에 직접 저장하는 자료형

      종류 자료형 크기 (byte)
      문자 char 2
      정수 byte, short, int, long 1, 2, 4, 8
      실수 float, double 4, 8
      논리 boolean 1
      • 정수형의 값 표현 범위

        자료형 범위
        byte -2^7 ~ 2^7 - 1
        short -2^15 ~ 2^15 - 1
        int -2^31 ~ 2^31 - 1
        long -2^63 ~ 2^63 - 1
      • 실수형의 값 표현 범위

        자료형 범위 m e
        float -m * 10^e ~ m * 10^e 23 8
        double -m * 10^e ~ m * 10^e 52 11
  • 참조형 (Reference Type)

    • 값을 직접 저장하지 않고, 값이 저장된 주소를 저장
      ex) Date birthDay = new Date();

여러가지 자료형

정수형

  • 정수 리터럴
    • 진수 표기법
      진수법 접두어 예시
      10진수(decimal) - 32
      2진수(binary) 0b 0b1011
      8진수(octal) 0 0342
      16진수(hexadecimal) 0x 0x4A
    • 정수 리터럴은 기본적으로 int 자료형
    • int 범위를 넘어서는 리터럴의 경우 L을 붙여서 표기
      ex) long largeValue = 100000000000L;
    • 가독성 향상을 위해 세자리 수 마다 _를 이용해 천단위 표기
      ex) long largeValue = 100_000_000_000L;

실수형

  • 실수 리터럴
    • 실수 리터럴은 기본적으로 double 자료형
    • f를 붙여 float 타입을 표현할 수 있음
      ex) float value = 14.42f;
    • e를 이용해 지수 표현을 할 수 있음
      ex) double value = 1.42e3; 1.42 * 10^3 = 1420

문자형

  • ASCII 코드

    • 작은 따옴표로 표현하며, 문자는 기본적으로 ASCII 코드로 저장됨
      ex) char asciiCharacter = 'A';
    • ASCII 코드의 특수 문자 입력
    의미 표시
    tab \t
    backspace \b
    newline \n
    form feed \f
    \ \\
    carriage return \r
    \'
    \"
  • 유니코드 테이블

    • 유니코드는 \u + 16진수로 표현
      ex) char unicodeCharacter = '\u0041';

논리형

  • true, false 두 가지 값만이 허용된다.

    1
    2
    boolean isTrue = true;
    boolean isFalse = false;

문자열

  • 문자열은 참조형 자료형이며, 큰 따옴표로 표현한다.

    1
    String s = "문자열은 큰따옴표로 묶는다.";
  • 문자열은 덧셈으로 이어 붙일 수 있다. 문자열로 변환이 가능한 자료형은 문자열로 변환되어 결합한다.

    1
    2
    String s1 = "a" + "b" + "c";
    String s2 = 1 + "1" + 3;

형변환 (Type Casting)

형변환 연산자

  • 형변환 연산자는 ()로 변수 앞에 입력한다.
    ex) int value = (int)10.8; -> value = 10

업캐스팅 (Upcasting)

  • 값의 범위가 더 큰 자료형으로 변환하는 경우

    • 묵시적(Implicit)/명시적(Explicit) 방법 모두 사용 가능

      1
      2
      3
      byte x = 10;
      int y = (int)x;
      int z = x;

다운캐스팅 (Downcasting)

  • 값의 범위가 더 작은 자료형으로 변환하는 경우

    • 명시적인 방법으로만 캐스팅 가능

      1
      2
      3
      int x = 1024;
      // byte y = x;
      byte z = (byte)x;
      1
      2
      3
      4
      long x = 100;
      float y = x;
      // long z = y;
      long z = (long)y;

Comment and share

변수 (Variable)

변수란

  • 변하는 수
  • 변하는 값이 할당 될 수 있는 메모리의 공간

목차

  • 변수의 선언
  • 변수의 자료형, 변수명, 리터럴
  • 변수명의 규칙

변수의 선언

  • 자료형 변수명 = 값;
  • ex) int variable = 10;

변수의 자료형

  • 기본형(Primitive Type) : int, float, double, boolean
  • 참조형(Reference Type) : Integer, Float, Double, Boolean, String, 여러 클래스 등

리터털

  • 리터럴(literal)이란 소스 코드의 고정된 값을 대표하는 용어
  • ex) int value = 10; (10 -> 리터럴)

변수명 규칙

  • 예약어 사용 x | ex) int int;, int const;
  • 맨 앞 숫자 x | ex) int 4floor;
  • _ 을 제외한 특수문자 | ex) int %value;

변수명의 권장 사항

대상 내용
변수명 의미있는 내용을 사용하여 변수의 용도를 알 수 있게 한다.
클래스, 인터페이스, Enum, 애너테이션 PascalCase
변수, 메소드 camalCase
상수 CONSTANT_NUMBER

Comment and share

GIT

GIT 이란

  • 소스코드를 버전별로 관리하기 위한 형상 관리 프로그램

  • 형상 관리 : SCM(Source Code Management)

GIT 설치 방법

  • for windows

  • for MacOS
    $ brew install git

  • for Ubuntu
    $ sudo apt-get install git

  • $ git --version : git 설치확인

GIT 환경 설정

1
2
3
4
5
$ git config --global user.name "{github username}"        // username 설정
$ git config --global user.email "{github email address}" // email 설정
$ git config --global core.editor "vim" // commit message Editor 설정
$ git config --global core.pager "cat" // log를 읽을 때 cat을 사용
$ git config --list // git 환경설정 출력

GIT Repository 설정

명령어 실행 순서

  1. local repository 디렉토리 생성 및 이동

  2. local repository 지정

  3. remote repository와 연결

  4. 파일 storage에 추가

  5. commit message와 함께 local respository에 변경 반영

  6. remote repository에 변경 반영

1
2
3
4
5
6
7
$ mkdir first-repo && cd first-repo 
$ git init
$ git remote add origin https://github.com/{username}/{reponame}.git // remote repository와 연결
$ touch README.md
$ git add README.md
$ git commit -m "docs: Create README.md"
$ git push -u origin master

두번째 Repository 변경 시

1
2
3
4
# 파일 변경 후
$ git add .
$ git commit # or git commit -m "변경 내용"
$ git push origin master

Commit 내용 작성 방법

  • 커밋 제목은 50자 이내로 요약하여 작성한다
  • 제목과 내용사이 한 칸
  • prefix를 사용하여 한 눈에 커밋의 용도를 알기 쉽게 한다

prefix 종류

1
2
3
4
5
6
7
8
9
feat: features
docs: documentations
conf: configurations
test: test
fix: bug-fix
refactor: refactoring
ci: Continuous Integration
build: Build
perf: Performance

prefix 사용 예시

1
2
3
4
feat: Create server.java to start spring project
docs: Create README.md
conf: poetry init
test: User model CRUD test complete

git clone이용하여 Git 프로젝트 시작 방법

  1. github에서 repo를 생성

  2. 다음 명령어 순서 입력

script
1
2
3
4
$ git clone {repo address}
$ git add .
$ git commit
$ git push

.gitignore and .gitattributes

.gitignore: 특정파일 추적을 하고 싶지 않을 경우

1
2
*.java
*.py[cod]

Static Site Generator

  • Jekyll: Ruby 기반 정적인 블로그 생성기
    • 설치와 사용이 쉬움
    • 사용자가 많았음
  • Hugo: Golang 기반 정적인 블로그 생성기
    • 빠른 속도로 사이트를 생성
    • 사용자 증가 중
  • Hexo: Node.js 기반 정적인 블로그 생성기
    • Node.js를 안다면 커스터마이즈가 쉬움
    • 빠른 속도로 사용자 증가 중

추천 순서
Hexo > Jekyll > Hugo


Hexo 사용 방법

asciicast height:400px


사전 설치 사항

  1. git
  2. node.js(https://nodejs.org/en/)

$ npm install -g hexo-cli


블로그 포스팅 방법

  1. hexo project 시작

    1
    2
    3
    $ hexo init <folder>
    $ cd <folder>
    $ npm install
  1. hexo New 파일 생성

    $ hexo new post "<file name>"

  1. clean && generate static files

    $ hexo clean && hexo generate

  2. hexo server 실행

    $ hexo server

  3. 블로그 포스팅

  • 자신의 깃 서버와 연결

    • npm 설치

      $ npm install hexo-deployer-git --save

    • _config.yml 파일 수정

      deploy:
      type: git
      repo: <repository url>  branch: [branch] #published
      message:
    • blog에 post

      $ hexo deploy

Comment and share

Yechan Kim

author.bio


author.job