Skip to content

Latest commit

Β 

History

History
72 lines (54 loc) Β· 6.38 KB

File metadata and controls

72 lines (54 loc) Β· 6.38 KB

μ‹œλ¦¬μ–Όλ²ˆν˜Έ 생성기 ν”„λ‘œμ νŠΈ

ν”„λ‘œμ νŠΈ μ†Œκ°œ

이전에 슀마트 포인터 Boxλ₯Ό μ†Œκ°œν•˜λ©΄μ„œ 잠깐 μ‹œλ¦¬μ–Ό ν‚€λ₯Ό μƒμ„±ν•˜λŠ” 예제λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨ μ‚¬μš©μžκ°€ μ‚¬μš©μž ID와 μ œν’ˆ IDλ₯Ό μž…λ ₯ν•˜λ©΄, ν”„λ‘œκ·Έλž¨μ€ μž…λ ₯받은 두 λ¬Έμžμ—΄μ„ ν•©μ³μ„œ ν•˜λ‚˜μ˜ μ‹œλ¦¬μ–Ό ν‚€λ₯Ό μƒμ„±ν•˜λŠ” μ˜ˆμ œμ˜€μŠ΅λ‹ˆλ‹€. GenSerialDataλΌλŠ” 트레이트λ₯Ό λ§Œλ“€μ–΄μ„œ μ‚¬μš©μž ID와 μ œν’ˆ IDλ₯Ό μœ„ν•œ 곡톡 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄μ„œ μ‚¬μš©μž μž…λ ₯을 λ°›κ³  μ‹œλ¦¬μ–Όμ„ μƒμ„±ν•˜λŠ”λ° μ‚¬μš©ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€.

트레이트λ₯Ό λ§Œλ“€λ©΄ 곡톡 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€ 수 있고, 트레이트 객체λ₯Ό λ§Œλ“€μ–΄μ„œ νŠΉμ • 트레이트λ₯Ό κ΅¬ν˜„ν•œ 객체듀을 ν•œκΊΌλ²ˆμ— 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ 트레이트의 κΈ°λŠ₯에 λŒ€ν•œ 이해λ₯Ό ν–ˆλ‹€κ³  ν•΄μ„œ κ³§λ°”λ‘œ 트레이트λ₯Ό μ μš©ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ°λŠ” 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ–΄μ©ŒλΌλŠ” 건가 생각이 λ“€ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이번μž₯μ—μ„œλŠ” μ‹œλ¦¬μ–Ό ν‚€λ₯Ό μƒμ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ•„μ£Ό λ‹¨μˆœν•œ ν˜•νƒœλΆ€ν„° 점점 μœ μ§€λ³΄μˆ˜κ°€ νŽΈλ¦¬ν•  μ‹€μ œ μ œν’ˆμ— κ°€κΉŒμš΄ ν˜•νƒœλ‘œ λ°œμ „μ‹œμΌœλ‚˜κ°€λ©΄μ„œ 트레이트λ₯Ό μ–Έμ œ μ–΄λ–»κ²Œ μ‚¬μš©ν•΄μ•Όν•˜κ³ , κ·Έλž˜μ„œ μ™œ νŠΈλ ˆμ΄νŠΈκ°€ μ€‘μš”ν•œμ§€μ— λŒ€ν•΄μ„œ 이야기λ₯Ό 해보렀고 ν•©λ‹ˆλ‹€.

μš°μ„  κ°€μž₯ λ‹¨μˆœν•˜κ²Œ μ‹œμž‘ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λ§Œμ•½μ— νŒ€μž₯λ‹˜μ΄λ‚˜ λ‹€λ₯Έ λ™λ£Œλ‘œλΆ€ν„° μ‹œλ¦¬μ–Ό ν‚€λ₯Ό λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄λ‹¬λΌκ³  뢀탁을 λ°›μœΌλ©΄ μ–΄λ–»κ²Œ μ‹œμž‘ν•˜μ…¨κ² λ‚˜μš”? 저라면 μ–΄λ–€ μž…λ ₯ 데이터λ₯Ό κ°€μ§€κ³  μ‹œλ¦¬μ–Ό ν‚€λ₯Ό λ§Œλ“€λ©΄ λ˜λŠ”μ§€ λ¬Όμ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 고객ID와 μ œν’ˆIDκ°€ μžˆλ‹€λŠ” 말을 λ“€μœΌλ©΄ μ•„λ§ˆ λ‹€μŒκ³Ό 같이 λ§Œλ“€μ—ˆμ„κ²ƒμž…λ‹ˆλ‹€.

use std::io::{stdin, stdout, Write};

fn get_user_input() -> String {
    let mut s = String::new();
    let _ = stdout().flush();
    stdin()
        .read_line(&mut s)
        .expect("Did not enter a correct string");
    if let Some('\n') = s.chars().next_back() {
        s.pop();
    }
    if let Some('\r') = s.chars().next_back() {
        s.pop();
    }
    s
}

fn main() {
    println!("Please input 4-digits Customer ID: ");
    let customerid = Some(get_user_input());

    println!("Please input 8-digits Product ID: ");
    let productid = Some(get_user_input());

    let plain_serial = format!("{}{}", customerid.unwrap(), productid.unwrap());
    println!("Plain serial: {}", plain_serial); // μ•”ν˜Έν™” μ „ μ‹œλ¦¬μ–Ό 좜λ ₯

    let verify_customerid = &plain_serial[0..4];
    let verify_productid = &plain_serial[4..12];
    println!("Verify Customer ID: {}", verify_customerid);
    println!("Verify Product ID: {}", verify_productid);
}
$ cargo run --bin serial_project_step1
   Compiling my-rust-book v0.1.0 (/home/gkim/study/quick-guide-rust-programming)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.33s
     Running `target/debug/serial_project_step1`
Please input 4-digits Customer ID: 
1234
Please input 8-digits Product ID: 
qwerasdf
Plain serial: 1234qwerasdf
Verify Customer ID: 1234
Verify Product ID: qwerasdf

μ œκ°€ λ§Œμ•½ 고객ID와 μ œν’ˆIDλΌλŠ”κ²Œ 사싀 처음 그런게 μžˆλ‹€λŠ”κ±Έ μ•Œμ•˜μ„λ•Œμ—λŠ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Όλ μ§€ λͺ¨λ₯Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 어디에선가 μ–΄μ„€ν”„κ²Œλ‚˜λ§ˆ 배운데둜 μ˜μ—…λΆ€μ„œλ‚˜ λ§ˆμΌ€νŒ…νŒ€μ— κ°€μ„œ 고객ID와 μ œν’ˆIDκ°€ 무엇인지λ₯Ό μ‘°μ‚¬ν•˜λ©΄μ„œ μš”κ΅¬μ‚¬ν•­μ„ μˆ˜μ§‘ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€. λ§Œμ•½ 예λ₯Ό λ“€μ–΄μ„œ 각각 4κΈ€μž, 8κΈ€μžμ˜ λ¬Έμžμ™€ 숫자둜된 λ°μ΄ν„°λΌλŠ” 것을 μ•Œμ•˜μœΌλ©΄ μœ„μ™€ 같이 ν”„λ‘œκ·Έλž¨ μ‚¬μš©μžμ—κ²Œ 4개의 문자둜 된 고객 λ²ˆν˜Έμ™€ 8개의 문자둜 된 μ œν’ˆ 번호λ₯Ό μž…λ ₯λ°›λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

이 ν”„λ‘œκ·Έλž¨μ€ λ‹¨μˆœνžˆ λ‘κ°œμ˜ μž…λ ₯ λ¬Έμžμ—΄μ„ ν•˜λ‚˜λ‘œ λΆ™μ—¬μ„œ μ‹œλ¦¬μ–Ό 번호λ₯Ό λ§Œλ“€μ–΄μ„œ λ³΄μ—¬μ€λ‹ˆλ‹€. 이 μ˜ˆμ œλŠ” 사싀상 μ‹œλ¦¬μ–Ό ν‚€λ₯Ό μƒμ„±ν•˜λŠ” κΈ°λŠ₯은 μ „ν˜€ μ—†κ³  λ‹¨μˆœνžˆ 2κ°€μ§€ μž…λ ₯ 데이터λ₯Ό λ°›κΈ° μœ„ν•œ μ˜ˆμ œμ˜€μŠ΅λ‹ˆλ‹€λ§Œ μ–΄μ¨Œλ“  λŒ€λž΅ μ΄λ ‡κ²Œ μ‹œμž‘ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€. μ΄μ •λ„λ‘œ λ§Œλ“€μ–΄μ„œ 잘 λ™μž‘ν•˜λŠ” 것을 ν™•μΈν•˜κ³ , 이 ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•  μ‚¬μš©μžμ—κ²Œ μ΄μ •λ„λ‘œ λ™μž‘ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ©΄ 어떠냐고 물어보고, λ‚˜λ¦„ μš”κ΅¬μ‚¬ν•­λ“±μ„ μˆ˜μ§‘ν•˜λ €λŠ” μ‹œλ„λ₯Ό ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨ μ‚¬μš©μžκ°€ 이정도면 μ“Έ 수 μžˆκ² λ‹€λŠ” ν”Όλ“œλ°±κ³Ό ν•¨κ»˜ μ•”ν˜Έν™”λ§Œ 좔가해달라고 리뷰λ₯Ό 해쀬닀고 μƒκ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 그런데 μš°λ¦¬κ°€ 일을 ν•˜λ‹€λ³΄λ©΄ 항상 κ²ͺλŠ” 일이 μžˆμŠ΅λ‹ˆλ‹€. λ™λ£Œμ—κ²Œ μš”κ΅¬μ‚¬ν•­μ„ λ°›κ³ , λ¦¬λ·°κΉŒμ§€ λ°›κ³  κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ μ–΄λ–€ 일이 λ²Œμ–΄μ§€λ‚˜μš”? 항상, 예 정말 말 κ·ΈλŒ€λ‘œ 항상 μš”κ΅¬μ‚¬ν•­μ€ λ³€ν•©λ‹ˆλ‹€. 보톡은 λ³€ν•  뿐 μ•„λ‹ˆλΌ λŠ˜μ–΄λ‚˜κΈ°κΉŒμ§€ ν•©λ‹ˆλ‹€. μ˜ˆμ „μ— 이정도면 μΆ©λΆ„ν•˜λ‹€κ³  리뷰λ₯Ό ν•΄μ£Όμ§€ μ•Šμ•˜λƒκ³  ν•˜μ†Œμ—°μ„ 해봐도 거의 항상 μš”κ΅¬μ‚¬ν•­μ€ λ³€ν•˜κ³ , λ³€ν•˜λŠ” κ²ƒλ§Œμ΄ μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ μš”κ΅¬μ‚¬ν•­μ΄ λ“€μ–΄μ˜€κ³ , κ²°κ΅­ ν”„λ‘œκ·Έλž¨μ€ λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€. μ•„λ§ˆ μ‘°κΈˆμ΄λΌλ„ 그런 κ²½ν—˜μ„ 해보신 뢄이라면 μ§€κΈˆ μ € ν”„λ‘œκ·Έλž¨μ€ μ „ν˜€ μš”κ΅¬μ‚¬ν•­ λ³€ν™”λ₯Ό μˆ˜μš©ν•  수 μ—†λ‹€λŠ” 것을 μ΄ν•΄ν•˜μ‹€ κ²ƒμž…λ‹ˆλ‹€. 아직 그런 κ²½ν—˜μ„ 해보지 λͺ»ν•˜μ‹ , 이제 막 μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ— μž…λ¬Έν•˜μ‹  뢄이라면 미리 마음의 μ€€λΉ„λ₯Ό ν•˜μ‹œκΈΈ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. μš”κ΅¬μ‚¬ν•­μ€ μ ˆλŒ€ 고정될 수 μ—†κ³ , μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ€‘λ§Œμ΄ μ•„λ‹ˆλΌ λ‹€ λλ‚˜κ³  μΆœμ‹œλœ 이후에도 늘 λ°˜λ“œμ‹œ λ³€ν™”ν•˜κ³ , λŠ˜μ–΄λ‚œλ‹€λŠ” 것을 κΈ°μ–΅ν•΄μ£Όμ„Έμš”.

μ—°μŠ΅λ¬Έμ œ

  1. ν˜Ήμ‹œ μ‹œλ¦¬μ–Ό 번호λ₯Ό μƒμ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄λ³Έ 적이 μ—†λ‹€λ©΄ ν”„λ‘œκ·Έλž¨μ„ λ””μžμΈν•΄λ³΄μ„Έμš”. μ–΄λ– ν•œ μš”κ΅¬μ‚¬ν•­μ΄ 있고, μ–΄λ–€ μ„€κ³„λ‘œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ 수 μžˆμ„μ§€ μƒκ°ν•΄λ³΄μ„Έμš”.

  2. λ¦¬λˆ…μŠ€ μ»€λ„μ˜ 가상 파일 μ‹œμŠ€ν…œ (Virtual Filesystems)이 μ–΄λ–»κ²Œ μ—¬λŸ¬κ°œμ˜ νŒŒμΌμ‹œμŠ€ν…œ(FAT32, EXT4, Btrfs)등을 λ™μ‹œμ— 지원할 수 μžˆλŠ”μ§€ 생각해보신 적이 μžˆλ‚˜μš”? κ΄€λ ¨ 자료λ₯Ό μ°Ύμ•„μ„œ μ½μ–΄λ³΄μ„Έμš”.

  3. λ¦¬λˆ…μŠ€ 컀널은 λͺ¨λ†€λ¦¬ν‹± μ»€λ„μž…λ‹ˆλ‹€. μ»€λ„μ΄λΌλŠ” ν”„λ‘œκ·Έλž¨μ€ ν•˜λ‚˜μ˜ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμž…λ‹ˆλ‹€. 그런데 μ–΄λ–»κ²Œ λ™μ μœΌλ‘œ ν•˜λ“œμ›¨μ–΄ λ“œλΌμ΄λ²„λ₯Ό μ„€μΉ˜ν•˜κ±°λ‚˜ μ‚­μ œν•  수 μžˆμ„κΉŒμš”? κ΄€λ ¨ 자료λ₯Ό μ°Ύμ•„μ„œ μ½μ–΄λ³΄μ„Έμš”. 좔후에 각자의 ν˜„μ—…μ— μ μš©ν•  수 μžˆλŠ” 아이디어λ₯Ό 얻을 수 μžˆμ„μ§€λ„ λͺ¨λ¦…λ‹ˆλ‹€.