λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Java/Java의 정석

Chapter 02 - λ³€μˆ˜

Chapter 02 - λ³€μˆ˜

λ³€μˆ˜(variable)

λ³€μˆ˜λž€?

단 ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ 곡간
μƒˆλ‘œμš΄ 값을 μ €μž₯ν•˜λ©΄ 기쑴의 값은 사라짐

λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”

(λ³€μˆ˜ νƒ€μž…) (λ³€μˆ˜ 이름);

  • λ³€μˆ˜ νƒ€μž…μ€ μ €μž₯될 νƒ€μž…
    • μžλ°”λŠ” μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•, λ¬Έμžν˜• ...
  • λ³€μˆ˜ 이름은 λ©”λͺ¨λ¦¬ 곡간에 뢙은 이름
    • μ €μž₯된 값을 μ½μ–΄μ˜¬ λ•Œ μ‚¬μš©
    • μ„œλ‘œ κ΅¬λ³„λ˜μ–΄μ•Ό 함
  • μ„ μ–Έ μ‹œ λ³€μˆ˜ νƒ€μž…μ— μ•Œλ§žμ€ 크기의 μ €μž₯ 곡간이 확보

λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

  • μ΄ˆκΈ°ν™”λž€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° 전에 처음으둜 값을 μ €μž₯
  • λ©”λͺ¨λ¦¬λŠ” μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ΄ κ³΅μœ ν•˜λŠ” μžμ›μ΄λ―€λ‘œ ν•„μˆ˜
    • μ•Œ 수 μ—†λŠ” μ“°λ ˆκΈ° 값이 λ‚¨μ•„μžˆμ„ μˆ˜λ„ 있기 λ•Œλ¬Έ
    • 클래슀 λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™” μƒλž΅ κ°€λŠ₯
    • 지역 λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ•Ό 함
  • λŒ€μž… μ—°μ‚°μž μ‚¬μš©
    • μˆ˜ν•™κ³ΌλŠ” λ‹€λ₯΄κ²Œ 였λ₯Έμͺ½μ˜ 값을 μ™Όμͺ½μ— μ €μž₯ν•˜λΌλŠ” 뜻
  • 콀마둜 μ—¬λŸ¬ 쀄을 ν•œ 쀄에 선언도 κ°€λŠ₯
    int a;
    int b;
    // int a, b;
    int x = 0;
    int y = 0;
    int x = 0, y = 0;

두 λ³€μˆ˜μ˜ κ°’ κ΅ν™˜ν•˜κΈ°

int x = 10;
int y = 20;

x = y;
y = x;

μœ„μ˜ κ²°κ³ΌλŠ” x의 값이 y의 κ°’μœΌλ‘œ λ°”λ€Œμ—ˆκΈ° λ•Œλ¬Έμ— μ†Œμš©μ—†λ‹€.
tmpλ₯Ό μ„ μ–Έ ν›„ λ³€κ²½ (λ¬Όκ³Ό μš°μœ κ°€ λ‹΄κΈ΄ 컡에 빈 컡을 μΆ”κ°€ν•˜λ“― ...)

int x = 10;
int y = 20;
int tmp;
tmp = x;
x = y;
y = x;

λ§μ…ˆ μ—°μ‚°μžλŠ” 두 값을 λ”ν•˜κΈ°λ„ ν•˜μ§€λ§Œ, λ¬Έμžμ—΄κ³Ό 숫자λ₯Ό κ²°ν•©ν•˜κΈ°λ„ 함

  • λ¬Έμžμ—΄ -> ν°λ”°μ˜΄ν‘œ("")둜 묢은 μ—°μ†λœ 문자
  • ex) System.out.println("x:" + 10) -> System.out.println("x:10")

λ³€μˆ˜μ˜ λͺ…λͺ… κ·œμΉ™

λ³€μˆ˜μ˜ μ΄λ¦„μ²˜λŸΌ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  이름은 μ‹λ³„μž

μ‹λ³„μžμ˜ κ·œμΉ™

  • λŒ€μ†Œλ¬Έμžκ°€ ꡬ뢄 & 길이 μ œν•œ x
  • μ˜ˆμ•½μ–΄λŠ” μ‚¬μš© X
    • trueλŠ” X, TrueλŠ” O
    • μ˜ˆμ•½μ–΄λŠ” 맀우 λ§ŽμœΌλ―€λ‘œ μ°¨μ°¨ μ΅ν˜€κ°€μ•Ό 함
    • μ˜ˆμ•½μ–΄λ“€μ€ 클래슀, λ³€μˆ˜, λ©”μ„œλ“œμ˜ μ΄λ¦„μœΌλ‘œ μ‚¬μš© X
  • 숫자둜 μ‹œμž‘ X
  • νŠΉμˆ˜λ¬ΈμžλŠ” '_'와 '&'만 ν—ˆμš©

μžλ°” ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ—κ²Œ ꢌμž₯ν•˜λŠ” κ·œμΉ™

  • 클래슀 μ΄λ¦„μ˜ 첫 κΈ€μžλŠ” 항상 λŒ€λ¬Έμž
    • 클래슀 이름은 ASCII μ½”λ“œλ‘œ (μœ λ‹ˆμ½”λ“œλ₯Ό μΈμ‹ν•˜μ§€ λͺ»ν•˜λŠ” OSλ₯Ό μœ„ν•΄)
  • μ—¬λŸ¬ λ‹¨μ–΄λ‘œ 이루어진 이름은 λ‹¨μ–΄μ˜ 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμž
  • μƒμˆ˜μ˜ 이름은 λͺ¨λ‘ λŒ€λ¬Έμž & μ—¬λŸ¬ 단어일 μ‹œ '_'
    • ex) PI, MAX_NUMBER
  • μœ„ κ·œμΉ™λ“€μ€ κ°œλ°œμžλ“€ μ‚¬μ΄μ˜ 암묡적 약속
  • νŠΉλ³„ν•œ λ°©μ‹μœΌλ‘œ μ‹λ³„μžλ₯Ό μž‘μ„±ν•΄μ•Ό ν•  땐 미리 κ·œμΉ™μ„ μ„Έμ›Œμ„œ μΌκ΄€λ˜κ²Œ μ μš©ν•  것
    • coding convention
  • λ³€μˆ˜μ˜ 이름은 짧으면 μ’‹μ§€λ§Œ 길더라도 μš©λ„λ₯Ό μ•ŒκΈ° μ‰½κ²Œ 의미 μžˆλŠ” μ΄λ¦„μœΌλ‘œ ν•  것

λ³€μˆ˜μ˜ νƒ€μž…

  • κ°’?
    • λ¬Έμžμ™€ 숫자(μ •μˆ˜, μ‹€μˆ˜)

κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•

κΈ°λ³Έν˜• : λ…Όλ¦¬ν˜•(boolean), λ¬Έμžν˜•(char), μ •μˆ˜ν˜•(byte, short, int, long), μ‹€μˆ˜ν˜•(float, double)

μ°Έμ‘°ν˜• : 객체의 μ£Όμ†Œλ₯Ό μ €μž₯, 8개의 κΈ°λ³Έν˜•μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€

μ°Έμ‘° λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법

ν΄λž˜μŠ€μ΄λ¦„ λ³€μˆ˜μ΄λ¦„;

ex) Date today = new Date();

  • new의 생성 κ²°κ³ΌλŠ” 객체의 μ£Όμ†Œ
  • λŒ€μž… μ—°μ‚°μž(=)에 μ˜ν•΄ μ°Έμ‘° λ³€μˆ˜ today에 객체의 μ£Όμ†Œκ°€ μ €μž₯

μžλ£Œν˜• vs νƒ€μž…

  • νƒ€μž…μ΄ μžλ£Œν˜•μ„ ν¬ν•¨ν•˜λŠ” 넓은 의미
  • μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” νƒ€μž…μ„, κΈ°λ³Έν˜•μ€ μžλ£Œν˜•μ΄λž€ μš©μ–΄λ₯Ό μ‚¬μš©

κΈ°λ³Έν˜•

9개의 νƒ€μž…

  • λ…Όλ¦¬ν˜•
    • boolean (true or false)
  • λ¬Έμžν˜•
    • char (문자λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©)
  • μ •μˆ˜ν˜•
    • byte, short, int, long (μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©, shortλŠ” Cμ–Έμ–΄μ™€μ˜ ν˜Έν™˜μ„ μœ„ν•΄ 생성)
  • μ‹€μˆ˜ν˜•
    • float, double (μ‹€μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©)

μ •μˆ˜μ—μ„  intλ₯Ό CPUκ°€ κ°€μž₯ 효율적으둜 처리

  • λ©”λͺ¨λ¦¬λ₯Ό 아끼기 μœ„ν•΄μ„  byteλ‚˜ short μ‚¬μš©

float보단 double이 높은 정밀도 (float의 μ •λ°€λ„λŠ” 7자리)

κΈ°λ³Έ μžλ£Œν˜•μ˜ μ’…λ₯˜μ™€ 크기

  • boolean -> 1byte
  • char -> 2byte (μœ λ‹ˆμ½”λ“œ)
  • byte -> 1byte
  • short -> 2byte (int의 절반)
  • int -> 4byte
  • long -> 8byte (int의 2λ°°)
  • float -> 4byte
  • double -> 8byte

μƒμˆ˜μ™€ λ¦¬ν„°λŸ΄

μƒμˆ˜

  • λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 값을 μ €μž₯ν•  수 μžˆλŠ” 곡간 & ν•œλ²ˆ 값을 μ €μž₯ν•˜λ©΄ λ³€κ²½ X
  • final ν‚€μ›Œλ“œλ₯Ό μ•žμ— λΆ™μ—¬μ€˜μ•Ό 함
  • JDK1.6λΆ€ν„° μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šμ•„λ„ λ˜μ§€λ§Œ μ›¬λ§Œν•˜λ©΄ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•  것
  • μƒμˆ˜μ˜ 이름은 λͺ¨λ‘ λŒ€λ¬Έμž (μ—¬λŸ¬ λ‹¨μ–΄μ˜ 경우 '_' μ‚¬μš©)

final int MAX_SPEEP = 100;

λ¦¬ν„°λŸ΄

  • 12, 123, 3.14, 'A' 와 같은 값듀이 λ¦¬ν„°λŸ΄
  • λ¦¬ν„°λŸ΄μ€ 보톡 μ•Œκ³  μžˆλŠ” μƒμˆ˜

λ³€μˆ˜ : ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ 곡간
μƒμˆ˜ : 값을 ν•œ 번만 μ €μž₯ν•  수 μžˆλŠ” 곡간
λ¦¬ν„°λŸ΄ : κ·Έ 자체둜 값을 μ˜λ―Έν•˜λŠ” 것


    int year = 2014;
    final int MAX_VALUE = 100;

    // 2014, 100 -> λ¦¬ν„°λŸ΄
    // year -> λ³€μˆ˜
    // MAX_VALUE -> μƒμˆ˜

μƒμˆ˜κ°€ ν•„μš”ν•œ 이유

  • λ¦¬ν„°λŸ΄μ— 의미 μžˆλŠ” 이름을 λΆ™μ—¬μ„œ μ½”λ“œμ˜ 이해 및 μˆ˜μ •μ„ μ‰½κ²Œ ν•˜κΈ° μœ„ν•¨
  • ex) μ‚Όκ°ν˜•μ˜ 폭, 높이λ₯Ό μƒμˆ˜λ‘œ μ„ μ–Έ ν›„ ν•„μš”ν•  λ•Œ μ΄ˆκΈ°ν™” μ½”λ“œλ₯Ό λ³€κ²½

λ¦¬ν„°λŸ΄μ˜ νƒ€μž…κ³Ό 접미사

  • μ •μˆ˜ν˜•μ˜ 경우, long νƒ€μž…μ˜ λ¦¬ν„°λŸ΄μ— 접미사 'l' λ˜λŠ” 'L'을 λΆ™μž„ (1κ³Ό μ•ˆ ν—·κ°ˆλ¦¬κ²Œ 'L' ꢌ유)
    • 접미사가 없을 μ‹œ int νƒ€μž…μ˜ λ¦¬ν„°λŸ΄
    • byte와 shortλŠ” λ³„λ„λ‘œ 쑴재 x (int νƒ€μž…μ˜ λ¦¬ν„°λŸ΄λ‘œ μ €μž₯)
    • 8μ§„μˆ˜λŠ” μ•žμ— 0, 16μ§„μˆ˜λŠ” 0x λ˜λŠ” 0X, 2μ§„μˆ˜λŠ” 0b λ˜λŠ” 0B의 접두사
  • μ‹€μˆ˜ν˜•μ˜ 경우 float νƒ€μž…μ€ 'f', doubel νƒ€μž…μ—λŠ” 'd'
    • 접미사가 μ—†μœΌλ©΄ double νƒ€μž… λ¦¬ν„°λŸ΄λ‘œ 인식
  • 10의 μ œκ³±μ€ e, E둜 λ‚˜νƒ€λƒ„
  • 잘 μ“°μ΄μ§€λŠ” μ•Šμ§€λ§Œ 2의 제곱의 의미둜 p도 μ‚¬μš©
    • ex) 0x1p1 = (1 x 16^0) x 2^1

νƒ€μž…μ˜ 뢈일치

νƒ€μž…μ΄ 달라도 μ €μž₯ λ²”μœ„κ°€ 넓은 νƒ€μž…μ— 쒁은 νƒ€μž…μ˜ 값을 μ €μž₯ν•˜λŠ” 것은 ν—ˆμš©

  • κ·Έ λ°˜λŒ€λŠ” 컴파일 μ—λŸ¬

문자 λ¦¬ν„°λŸ΄κ³Ό λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄

문자 λ¦¬ν„°λŸ΄ : μž‘μ€λ”°μ˜΄ν‘œλ‘œ 문자 ν•˜λ‚˜λ₯Ό 감싼 것
λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ : 큰 λ¬Έμžμ—΄λ‘œ 감싼 것 (두 문자 이상은 λ¬Έμžμ—΄μž„)

  • λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ€ 빈 λ¬Έμžμ—΄μ΄ ν—ˆμš©
    • λ¬ΈμžλŠ” λ°˜λ“œμ‹œ '' μ•ˆμ— ν•˜λ‚˜μ˜ 문자 ν•„μš”
  • String name = "test"λŠ” String name = new String("test")와 κ°™μŒ
  • λ§μ…ˆ μ—°μ‚°μž μ‚¬μš© κ°€λŠ₯
    • ν”Όμ—°μ‚°μž λͺ¨λ‘ 숫자일 땐 숫자λ₯Ό 더함
    • μ–΄λŠ ν•œμͺ½μ΄λΌλ„ String 이면 λ‚˜λ¨Έμ§€ ν•œ μͺ½λ„ String으둜 λ³€ν™˜ ν›„ String κ²°ν•©
    • μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½ λ°©ν–₯으둜 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— κ²°ν•© μˆœμ„œμ— 따라 κ²°κ³Όκ°€ 달라짐

ν˜•μƒν™”λœ 좜λ ₯ - printf()

println() 보닀 값을 μ—¬λŸ¬ ν˜•μ‹μœΌλ‘œ 좜λ ₯ κ°€λŠ₯

  • μ§€μ‹œμžκ°€ ν•„μš”
  • μ§€μ‹œμžμ™€ 좜λ ₯될 κ°’μ˜ μˆœμ„œμ™€ κ°œμˆ˜κ°€ μΌμΉ˜ν•΄μ•Ό 되고 μ œν•œμ€ μ—†λ‹€.
  • println()κ³Ό 달리 μ€„λ°”κΏˆμ΄ μ—†μœΌλ―€λ‘œ '%n'을 λ„£μ–΄μ€˜μ•Ό ν•œλ‹€.
    • OSλ§ˆλ‹€ μ€„λ°”κΏˆ λ¬Έμžκ°€ λ‹€λ₯Ό 수 μžˆμœΌλ―€λ‘œ '\n'λ³΄λ‹€λŠ” '%n'
  • 자주 μ‚¬μš©λ˜λŠ” μ§€μ‹œμž
    • %b : λΆˆλ¦¬μ–Έ ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • %d : 10진 μ •μˆ˜μ˜ ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • %o : 8진 μ •μˆ˜μ˜ ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • %x, %X : 16진 μ •μˆ˜μ˜ ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • %f : 뢀동 μ†Œμˆ˜μ  ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • %e, %E : μ§€μˆ˜ ν‘œν˜„μ‹μ˜ ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • %c : 문자둜 좜λ ₯
    • %s : λ¬Έμžμ—΄λ‘œ 좜λ ₯
  • μ§€μ‹œμž 사이에 숫자λ₯Ό μΆ”κ°€ν•˜λ©΄ μ›ν•˜λŠ” 만큼의 좜λ ₯ 곡간을 ν™•λ³΄ν•˜κ±°λ‚˜ λ¬Έμžμ—΄μ˜ μΌλΆ€λ§Œ 좜λ ₯
    • μ‹€μˆ˜ν˜• 일 땐 %전체 자리.μ†Œμˆ˜μ  μ•„λž˜ 자리f
    • N : μ΅œμ†Œ NκΈ€μž 좜λ ₯ 곡간 확보 (우츑 μ •λ ¬)
    • -N : μ΅œμ†Œ N κΈ€μž 좜λ ₯ 곡간 확보 (쒌츑 μ •λ ¬)
    • . : μ™Όμͺ½μ—μ„œ N κΈ€μžλ§Œ 좜λ ₯

ν™”λ©΄μ—μ„œ μž…λ ₯λ°›κΈ° -Scanner

Scanner에 λŒ€ν•œ 본격적인 ν•™μŠ΅ μ „ κ°€μ Έμ™€μ„œ μ‚¬μš©ν•˜λŠ” 방법

  • import java.util.*; μ„ μ–Έ
  • Scanner scanner = new Scanner(System.in); 으둜 객체 생성
  • scanner.nextLine(); 을 톡해 μž…λ ₯받은 λ‚΄μš©μ„ μ €μž₯
  • νŒŒμ‹±μ΄ ν•„μš”ν•  땐 nextIntλ‚˜ nextFloat μ‚¬μš©
    • nextInt()와 같은 λ©”μ„œλ“œλŠ” 값을 μž…λ ₯λ°›μ•„μ„œ μ‚¬μš©ν•˜κΈ°μ— κΉŒλ‹€λ‘œμ›€

진법

10진법과 2진법

  • μΌμƒμ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” 것은 10진법 (10개의 손가락)
  • μ»΄ν“¨ν„°λŠ” 1,0 (μ „κΈ°κ°€ 흐λ₯΄κ±°λ‚˜, 흐λ₯΄μ§€ μ•Šκ±°λ‚˜) -> 2진법이 적합
  • 2진법은 10진법에 λΉ„ν•΄ λ§Žμ€ μžλ¦Ώμˆ˜κ°€ ν•„μš”
    • 자릿수만 주어지면 10μ§„μˆ˜ μ˜¨μ „νžˆ ν‘œν˜„ κ°€λŠ₯

λΉ„νŠΈμ™€ λ°”μ΄νŠΈ

  • ν•œ 자릿수의 2μ§„μˆ˜κ°€ λΉ„νŠΈ(bit)
  • 8λΉ„νŠΈλ₯Ό 1λ°”μ΄νŠΈ(byte)
    • niddle은 4λΉ„νŠΈ
  • μ›Œλ“œ(word)λŠ” CPUκ°€ ν•œ λ²ˆμ— μ²˜λ¦¬ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ 크기
    • μ„±λŠ₯에 따라 32λΉ„νŠΈ or 64λΉ„νŠΈ
  • n λΉ„νŠΈλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” 10μ§„μˆ˜
    • κ°’μ˜ 개수 : 2^n
    • κ°’μ˜ λ²”μœ„ : 0 ~ 2^n-1

8진법과 16진법

  • 8μ§„μˆ˜λŠ” 2μ§„μˆ˜ 3자리
    • 2μ§„μˆ˜λ₯Ό λ’€μ—μ„œλΆ€ν„° 3μžλ¦¬μ”© λŠμ–΄μ„œ κ΅ν™˜
  • 16μ§„μˆ˜λŠ” 2μ§„μˆ˜ 4자리
    • 2μ§„μˆ˜λ₯Ό λ’€μ—μ„œλΆ€ν„° 4μžλ¦¬μ”© λŠμ–΄μ„œ κ΅ν™˜
    • A~Fλ₯Ό μΆ”κ°€λ‘œ μ‚¬μš© (AλΆ€ν„° 10)

μ •μˆ˜μ˜ 진법 λ³€ν™˜

  • 10μ§„μˆ˜λ₯Ό n μ§„μˆ˜λ‘œ λ³€ν™˜
    • ν•΄λ‹Ή μ§„μˆ˜λ‘œ λ‚˜λˆ„κ³  λ‚˜λ¨Έμ§€ 값을 μ˜†μ— μ λŠ” 것을 반볡
    • 더 이상 λ‚˜λˆŒ 수 없을 λ•ŒκΉŒμ§€ ν•œ λ‹€μŒ λͺ«κ³Ό λ‚˜λ¨Έμ§€λ₯Ό μ•„λž˜λ‘œλΆ€ν„° μœ„λ‘œ μˆœμ„œλŒ€λ‘œ 적기
  • n μ§„μˆ˜λ₯Ό 10μ§„μˆ˜λ‘œ λ³€ν™˜
    • 각 자리의 μˆ˜μ— ν•΄λ‹Ήν•˜λŠ” λ‹¨μœ„μ˜ 값을 κ³±ν•œ κ²ƒμ˜ ν•©

μ‹€μˆ˜μ˜ μ§„λ²•λ³€ν™˜

  • 10진 μ†Œμˆ˜μ  수λ₯Ό 2진 μ†Œμˆ˜μ  수둜 λ³€ν™˜ν•˜λŠ” 방법
    • 10진 μ†Œμˆ˜μ— 2λ₯Ό κ³±ν•˜κΈ°
    • κ·Έ κ²°κ³Όμ—μ„œ μ†Œμˆ˜λΆ€λ§Œ κ°€μ Έλ‹€κ°€ λ‹€μ‹œ 2λ₯Ό κ³±ν•˜κΈ°
    • μ†Œμˆ˜λΆ€κ°€ 0이 될 λ•ŒκΉŒμ§€ 반볡
    • 0κ³Ό . 뒀에 ν•΄λ‹Ή κ²°κ³Όλ₯Ό μˆœμ„œλŒ€λ‘œ 적기
  • 2진 μ†Œμˆ˜μ  수λ₯Ό 10진 μ†Œμˆ˜μ  수둜 λ³€ν™˜ν•˜λŠ” 방법
    • μ†Œμˆ˜μ  μžλ¦Ώμˆ˜μ— ν•΄λ‹Ήλ˜λŠ” μ§„λ²•μ˜ λ§ˆμ΄λ„ˆμŠ€ 제곱 κ³±ν•œ κ²ƒμ˜ ν•©

음수의 2진 ν‘œν˜„ - 2의 λ³΄μˆ˜λ²•

음수 ν‘œν˜„ 방법

  • μ™Όμͺ½μ˜ 첫 번째 λΉ„νŠΈκ°€ 0이면 μ–‘μˆ˜, 1이면 음수
    • 두 수λ₯Ό λ”ν–ˆμ„ λ•Œ 2μ§„μˆ˜λ‘œ 0이 λ˜μ§€ μ•ŠλŠ” 단점
    • 0이 두 개(0, -0) μ‘΄μž¬ν•˜λŠ” 단점
    • 2μ§„μˆ˜κ°€ 증가할 λ•Œ 10진 μŒμˆ˜λŠ” κ°μ†Œ
  • 2의 λ³΄μˆ˜λ²•μœΌλ‘œ ν‘œν˜„
    • μ ˆλŒ“κ°’μ΄ 같은 μ–‘μˆ˜μ™€ 음수λ₯Ό λ”ν•˜λ©΄ 2μ§„μˆ˜λ‘œλ„ 0을 μ–»μŒ
    • 2μ§„μˆ˜κ°€ 증가할 λ•Œ 10진 μŒμˆ˜λ„ κ°μ†Œ
    • 첫 번째 λΉ„νŠΈλ₯Ό λ°”κΎΈλŠ” κ²ƒλ§ŒμœΌλ‘œ κ°’μ˜ λΆ€ν˜Έλ₯Ό λ°”κΏ€ 순 μ—†μŒ

2의 λ³΄μˆ˜λ²•

  • n의 보수 : λ”ν–ˆμ„ λ•Œ n이 λ˜λŠ” 수
    • 2의 보수 : λ”ν•΄μ„œ 2κ°€ λ˜λŠ” 두 수의 관계
    • 2λŠ” 2μ§„μˆ˜λ‘œ '10' -> '10'은 자리 올림이 λ°œμƒν•˜κ³  0이 λ˜λŠ” 수
    • κ·ΈλŸ¬λ―€λ‘œ 2의 μ§„μˆ˜λŠ” λ”ν•˜λ©΄ 자리 올림이 λ°œμƒν•˜κ³  0이 됨
  • 음수λ₯Ό 2μ§„μˆ˜λ‘œ ν‘œν˜„ν•˜κΈ°
    • 10진 음의 μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ„ 2μ§„μˆ˜λ‘œ λ³€ν™˜
    • 1의 보수둜 λ³€ν™˜ ν›„ λ”ν•˜κΈ° 1

κΈ°λ³Έν˜•

λ…Όλ¦¬ν˜• - boolean

  • true or false
  • λŒ€λ‹΅, μŠ€μœ„μΉ˜ λ“±μ˜ 논리 κ΅¬ν˜„μ— μ‚¬μš©
  • 1byte (μžλ°”μ˜ μ΅œμ†Œ λ‹¨μœ„λŠ” 1byteμž„μœΌλ‘œ)
  • λŒ€μ†Œλ¬Έμž ꡬ별 주의

λ¬Έμžν˜• - char

  • 단 ν•˜λ‚˜μ˜ λ¬Έμžλ§Œμ„ μ €μž₯
  • 문자의 μœ λ‹ˆμ½”λ“œμΈ μ •μˆ˜κ°€ μ €μž₯λ˜λŠ” 것
    • λ¦¬ν„°λŸ΄ λŒ€μ‹  문자의 μœ λ‹ˆμ½”λ“œλ₯Ό μ €μž₯ κ°€λŠ₯
  • intν˜•μ— charν˜• λ³€μˆ˜λ₯Ό λŒ€μž… μ‹œ μ •μˆ˜ν˜•μœΌλ‘œ μΊμŠ€νŒ…ν•  것
    • ν•΄λ‹Ή λ³€μˆ˜μ— λ“€μ–΄μžˆλŠ” 문자의 μœ λ‹ˆμ½”λ“œλ₯Ό μ•Œ 수 있음
  • 특수문자
    • \t(tab)
    • \b(백슀페이슀)
    • \f(form feed)
    • \n(new line)
    • \r(캐리지 리턴)
    • \(μ—­μŠ¬λž˜μ‰¬)
    • `(μž‘μ€λ”°μ˜΄ν‘œ)
    • "(ν°λ”°μ˜΄ν‘œ)
    • \uμœ λ‹ˆμ½”λ“œ(16μ§„μˆ˜μΈ μœ λ‹ˆμ½”λ“œ 문자)
  • ν¬κΈ°λŠ” 2byte
    • 2^16의 μ½”λ“œ μ‚¬μš© κ°€λŠ₯
    • 음수λ₯Ό ν‘œν˜„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν‘œν˜„ κ°€λŠ₯ν•œ μ •μˆ˜μ˜ κ°œμˆ˜λŠ” 0 ~ 2^16 - 1
  • 인코딩은 문자λ₯Ό μœ λ‹ˆμ½”λ“œλ‘œ, 디코딩은 κ·Έ λ°˜λŒ€
  • μ•„μŠ€ν‚€λŠ” 7bit λΆ€ν˜Έ
    • 128개 문자의 집합 (기호, 숫자, μ˜μ–΄μ˜ λŒ€μ†Œλ¬Έμž)
  • ν™•μž₯ μ•„μŠ€ν‚€
    • μ•„μŠ€ν‚€μ˜ 남은 1bitλ₯Ό ν™œμš©
    • κ΅­κ°€λ‚˜ κΈ°μ—…μ—μ„œ ν•„μš”μ— 따라 λ‹€λ₯΄κ²Œ μ •μ˜
    • ν•œκΈ€μ€ μ‘°ν•©ν˜•(초,쀑,쒅성을 μ‘°ν•©), μ™„μ„±ν˜•(μ•„μŠ€ν‚€μ˜ 일뢀 μ˜μ—­μ˜ 두 문자 μ½”λ“œλ₯Ό κ²°ν•©)
    • ν˜„μž¬ ν•œκΈ€μ€ μ‘°ν•©ν˜• μ‚¬μš© x
  • μ½”λ“œ νŽ˜μ΄μ§€
    • ν™•μž₯ μ•„μŠ€ν‚€μ˜ 256개 문자λ₯Ό μ–΄λ–€ 숫자둜 λ³€ν™˜ν•  것인지 적어놓은 문자 μ½”λ“œν‘œ
  • μœ λ‹ˆμ½”λ“œ
    • μ „ μ„Έκ³„μ˜ λͺ¨λ“  문자λ₯Ό ν•˜λ‚˜μ˜ ν†΅μΌλœ 문자 μ§‘ν•©μœΌλ‘œ ν‘œν˜„
    • 2 byte + 21 bit(보좩 문자)
    • 보좩 λ¬ΈμžλŠ” charν˜•μ΄ μ•„λ‹Œ intν˜•μœΌλ‘œ (거의 μ‚¬μš©λ˜μ§€ μ•ŠμŒ)
    • μžλ°”λŠ” UTF - 16을 μ‚¬μš© (λͺ¨λ“  문자λ₯Ό 2byte의 κ³ μ • 크기둜 ν‘œν˜„ 및 처음 128λ¬ΈμžλŠ” μ•„μŠ€ν‚€μ™€ 동일)
    • UTFλŠ” μœ λ‹ˆμ½”λ“œ 문자 μ…‹(ν¬ν•¨μ‹œν‚€κ³ μž ν•˜λŠ” λ¬Έμžλ“€μ˜ 집합)
    • 16은 문자 μ…‹μ˜ 번호
    • UTF - 8은 ν•˜λ‚˜μ˜ 문자λ₯Ό 1~4 byte의 κ°€λ³€ν¬κΈ°λ‘œ ν‘œν˜„
    • UTF - 16은 문자λ₯Ό 닀루기가 편리(크기가 κ³ μ •)
    • UTF - 8은 μˆ«μžλŠ” 1 λ°”μ΄νŠΈ, ν•œκΈ€μ€ 3λ°”μ΄νŠΈλ‘œ ν‘œν˜„ -> κ°€λ³€μ μ΄λ―€λ‘œ 닀루기 μ–΄λ ΅μ§€λ§Œ 전솑속도가 μ€‘μš”ν•œ κ³³μ—μ„œ μ‚¬μš©μ΄ 늘고 μžˆλ‹€.

μ •μˆ˜ν˜•

byte(1byte) < short(2byte) < int(4byte) < long(8byte)

μ •μˆ˜ν˜•μ˜ ν‘œν˜„ 방식

  • μ™Όμͺ½μ˜ 첫 번째 λΉ„νŠΈλŠ” λΆ€ν˜Έ λΉ„νŠΈ
  • λ‚˜λ¨Έμ§€λŠ” 값을 ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©
  • n λΉ„νŠΈλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” μ •μˆ˜μ˜ 개수 -> 2^n 개
  • λΆ€ν˜Έκ°€ μžˆλŠ” μ •μˆ˜μ˜ λ²”μœ„λŠ” -2^(n-1) ~ 2^(n-1) -1

μ •μˆ˜μ˜ 선택 κΈ°μ€€

  • JVM의 ν”Όμ—°μ‚°μž μŠ€νƒμ€ 4byte λ‹¨μœ„λ‘œ μ €μž₯
    • byte, shortλŠ” λ³€ν™˜ν•˜μ—¬ 연산이 μˆ˜ν–‰λ˜μ–΄ 였히렀 느림
    • κ·ΈλŸ¬λ―€λ‘œ byte, shortλŠ” μ„±λŠ₯보닀 μ €μž₯ 곡간이 μ€‘μš”ν•  λ•Œ μ‚¬μš©ν•  것
  • μ •μˆ˜ μ„ μ–Έ μ‹œ int νƒ€μž…μœΌλ‘œ μ„ μ–Έ ν›„ int의 λ²”μœ„(λŒ€λž΅ -20μ–΅~+20μ–΅)λ₯Ό λ„˜μ–΄κ°€λ©΄ long을 μ‚¬μš©ν•  것

μ •μˆ˜μ˜ μ˜€λ²„ν”Œλ‘œμš°

  • νƒ€μž…μ΄ ν‘œν˜„ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ₯Ό λ„˜μ–΄μ„œλŠ” 것
  • μ΅œλŒ“κ°’ + 1 -> μ΅œμ†Ÿκ°’
  • μ΅œμ†Ÿκ°’ -1 -> μ΅œλŒ“κ°’

λΆ€ν˜Έ μžˆλŠ” μ •μˆ˜μ˜ μ˜€λ²„ν”Œλ‘œμš°

  • λΆ€ν˜Έ μžˆλŠ” μ •μˆ˜λŠ” λΆ€ν˜Έ λΉ„νŠΈκ°€ 0μ—μ„œ 1이 될 λ•Œ μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒ

μ‹€μˆ˜ν˜• - float, double

μ‹€μˆ˜ν˜•μ˜ λ²”μœ„μ™€ 정밀도

  • float -> 정밀도 7자리, ν¬κΈ°λŠ” 4byte
  • double -> 정밀도 15자리, ν¬κΈ°λŠ” 8byte
  • μ–Όλ§ˆλ‚˜ 큰 값을 ν‘œν˜„ν•  수 μžˆλŠ”κ°€λ„ μ€‘μš”ν•˜μ§€λ§Œ μ–Όλ§ˆλ‚˜ 0에 κ°€κΉŒμš΄ 값을 ν‘œν˜„ν•  수 μžˆλŠ”μ§€λ„ μ€‘μš”
  • μ‹€μˆ˜ν˜•μ€ μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•˜λ©΄ 값이 λ¬΄ν•œλŒ€κ°€ λœλ‹€.
  • μ‹€μˆ˜κ°€ ν‘œν˜„ν•  수 μ—†λŠ” μ•„μ£Ό μž‘μ€ 값이 λ˜λŠ” κ²½μš°λŠ” μ–Έλ”ν”Œλ‘œμš°
  • float νƒ€μž…μ˜ ν‘œν˜„ 방식
    • S(1)[λΆ€ν˜Έ] + E(8)[μ§€μˆ˜] + M(23)[κ°€μˆ˜]
    • 7자리 μ΄μƒμ˜ 정밀도가 ν•„μš”ν•  μ‹œ doubleν˜•
  • '%f'λŠ” 기본적으둜 μ†Œμˆ˜ 7번째 μžλ¦¬μ—μ„œ 반올림

μ‹€μˆ˜ν˜•μ˜ μ €μž₯ ν˜•μ‹

  • (λΆ€ν˜Έ[S])κ°€μˆ˜[M] * 2^μ§€μˆ˜[E]
  • float : 1 + 8 + 23
  • dobule : 1 + 11 + 52
  • λΆ€ν˜ΈλŠ” 0이면 μ–‘μˆ˜, 1이면 음수
  • μ§€μˆ˜λŠ” λΆ€ν˜Έ μžˆλŠ” μ •μˆ˜
    • -127, +128은 λ¬΄ν•œλŒ€λ₯Ό μœ„ν•œ νŠΉλ³„ν•œ κ°’μ˜ ν‘œν˜„ μ˜ˆμ•½
  • κ°€μˆ˜λŠ” μ‹€μ œ 값을 μ €μž₯ν•˜λŠ” λΆ€λΆ„
    • 2^23이 λŒ€λž΅ 7자리의 10μ§„μˆ˜μ΄λ―€λ‘œ float의 정밀도가 7자리!

λΆ€λ™μ†Œμˆ˜μ μ˜ 였차

  • 2μ§„μˆ˜λ‘œλŠ” 10μ§„μˆ˜λ₯Ό μ •ν™•νžˆ ν‘œν˜„ν•  수 없기에 였차
  • μ§€μˆ˜λŠ” κΈ°μ € λ²•μœΌλ‘œ μ €μž₯ (ex. 127을 λ”ν•΄μ€Œ)
    • κΈ°μ € 법은 λΆ€ν˜Έ μžˆλŠ” μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 방법을 λœ»ν•¨
  • μ •κ·œν™” : 2μ§„μˆ˜λ‘œ λ³€ν™˜λœ μ‹€μˆ˜λ₯Ό 1.xxx * 2^n의 ν˜•νƒœλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •

ν˜•λ³€ν™˜

λ³€μˆ˜ λ˜λŠ” μƒμˆ˜μ˜ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것

  • boolean을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 7개의 κΈ°λ³Έν˜•μ€ μ„œλ‘œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯
  • κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•λΌλ¦¬λŠ” ν˜•λ³€ν™˜ X

방법 => (νƒ€μž…)ν”Όμ—°μ‚°μž

  • κ΄„ν˜ΈλŠ” 캐슀트 μ—°μ‚°μž(ν˜•λ³€ν™˜ μ—°μ‚°μž) -> μ§€μ •λœ νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜ λ’€ λ°˜ν™˜

μ •μˆ˜ν˜•κ°„μ˜ ν˜•λ³€ν™˜

  • 큰 νƒ€μž…μ—μ„œ μž‘μ€ νƒ€μž…μœΌλ‘œμ˜ λ³€ν™˜μ€ 값손싀이 일어날 수 있음
  • μž‘μ€ νƒ€μž…μ—μ„œ 큰 νƒ€μž…μœΌλ‘œμ˜ λ³€ν™˜μ€ κ°’ 손싀 X, 빈 곡간이 1μ΄λ‚˜ 0으둜 μ±„μ›Œμ§
    • 음수인 경우 1둜 μ±„μ›Œμ§

μ‹€μˆ˜ν˜• κ°„μ˜ ν˜•λ³€ν™˜

  • float -> double
    • μ§€μˆ˜λŠ” float의 기저인 127을 λΊ€ ν›„ double의 기저인 1023을 더함
    • κ°€μˆ˜λŠ” float의 κ°€μˆ˜ 23자리λ₯Ό μ±„μš°κ³  남은 자리λ₯Ό 0으둜 채움
  • double -> float
    • μ§€μˆ˜λŠ” double의 기저인 1023을 λΊ€ ν›„ float의 기저인 127을 더함
    • κ°€μˆ˜λŠ” double의 κ°€μˆ˜ 52자리 쀑 23자리만 μ €μž₯되고 λ‚˜λ¨Έμ§€λŠ” 버렀짐
    • κ°€μˆ˜μ˜ 24번째 μžλ¦¬μ—μ„œ 반올림이 λ°œμƒν•  μˆ˜λ„ 있음
    • float νƒ€μž…μ˜ λ²”μœ„λ₯Ό λ„˜λŠ” 값을 float둜 λ³€ν™˜ν•˜λŠ” 경우 +- λ¬΄ν•œλŒ€ or +-0이 κ²°κ³Ό

μ •μˆ˜ν˜•κ³Ό μ‹€μˆ˜ν˜• κ°„μ˜ ν˜•λ³€ν™˜

  • μ •μˆ˜ν˜• -> μ‹€μˆ˜ν˜•
    • μ •μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ λ³€ν™˜ ν›„ μ •κ·œν™”
    • μ‹€μˆ˜ν˜•μ΄ μ •μˆ˜ν˜•λ³΄λ‹€ 훨씬 큰 μ €μž₯ λ²”μœ„
    • μ‹€μˆ˜ν˜•μ˜ μ •λ°€λ„λ‘œ μΈν•œ 였차 λ°œμƒ κ°€λŠ₯(floatλŠ” 7자리의 정밀도, double은 15자리)
  • μ‹€μˆ˜ν˜• -> μ •μˆ˜ν˜•
    • μ‹€μˆ˜ν˜•μ˜ μ†Œμˆ˜μ  μ΄ν•˜ 값은 버렀짐
    • λ°˜μ˜¬λ¦Όμ€ λ°œμƒ X
    • μ†Œμˆ˜μ μ„ 버리고 남은 μ •μˆ˜κ°€ μ •μˆ˜ν˜•μ˜ λ²”μœ„λ₯Ό λ„˜λŠ” κ²½μš°μ—” μ˜€λ²„ν”Œλ‘œμš°

μžλ™ ν˜•λ³€ν™˜

  • λŒ€μž…μ΄λ‚˜ μ—°μ‚° μ‹œ μ»΄νŒŒμΌλŸ¬κ°€ μƒλž΅λœ ν˜•λ³€ν™˜μ„ μžλ™μœΌλ‘œ μΆ”κ°€(ν• λ‹Ήν•˜λŠ” νƒ€μž…μ΄ 클 경우)
  • λ³€μˆ˜κ°€ μ €μž₯ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ³΄λ‹€ 더 큰 값을 μ €μž₯ν•  땐 ν˜•λ³€ν™˜ μƒλž΅ μ‹œ μ—λŸ¬
  • μ„œλ‘œ λ‹€λ₯Έ 두 νƒ€μž… κ°„μ˜ λ§μ…ˆμ—μ„  ν‘œν˜„ λ²”μœ„κ°€ 더 넓은 νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜
    • κ°’ μ†μ‹€μ˜ μœ„ν—˜μ„ 쀄이기 μœ„ν•΄
  • 기쑴의 값을 μ΅œλŒ€ν•œ 보쑴할 수 μžˆλŠ” νƒ€μž…μœΌλ‘œ μžλ™ ν˜•λ³€ν™˜μ΄ κ·œμΉ™
    • byte -> (short or char) -> int -> long -> float -> double