Skip to content

Latest commit

ย 

History

History
240 lines (181 loc) ยท 7.34 KB

item1_presentation.md

File metadata and controls

240 lines (181 loc) ยท 7.34 KB

ITEM 1. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ.

ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ

์ „ํ†ต์ ์œผ๋กœ public ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด์™ธ์—,
public static ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

public class Book {
    private String name;
    private String author;
    private String publisher;

    public static createBook() {
        return (Book ์ธ์Šคํ„ด์Šค);
    }
}




์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ์žฅ์ 

1. ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

Book ํด๋ž˜์Šค

public class Book {
    private String name;
    private String author;
    private String publisher;

    // ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ์ดˆ๊ธฐํ™”
    public Book(String name) {
        this.name = name;
    }

    // ํŽ™ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ์ดˆ๊ธฐํ™”
    public static createBookWithName(name) {
        return new Book(name);
    }
}

ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ถœ ์ฝ”๋“œ

Book book1 = new Book("effectiveJava"); 
// "effectiveJava" ๊ฐ€ ์–ด๋–ค ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์ธ์ง€ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค.
        
Book book2 = Book.createBookWithName("effectiveJava"); 
// ์ด๋ฆ„์ด "effectiveJava" ์ž„์„ ํ•œ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ๋‹ค.



2. ํ•˜๋‚˜์˜ ์‹œ๊ทธ๋‹ˆ์ณ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…๊ณผ ๊ฐฏ์ˆ˜๊ฐ€ ๊ฐ™์€ ์ƒ์„ฑ์ž๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

public class Book {
    private String name;
    private String author;
    private String publisher;

    public Book(String name) {
        this.name = name;
    }
    
    // ๋ถˆ๊ฐ€๋Šฅ
    public Book(String author) {
        this.author = author;
    }
}

ํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์  ํŒฉํ† ๋ฆฌ ๋งค์„œ๋“œ์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.

public class Book {
    private String name;
    private String author;
    private String publisher;

    public static Book createBookWithName(String name) {
        Book book = new Book();
        book.name = name;
        return book;
    }

    public static Book createBookWithAuthor(String author) {
        Book book = new Book();
        book.author = author;
        return book;
    }
}



3. ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

public final class Boolean implements java.io.Serializable, Comparable<Boolean> {
    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);

    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
    ...

์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์ฒด ์•ˆ์— ๋ฏธ๋ฆฌ ์ •์˜๋œ static final ์ƒ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜.
๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.




4. ๋ฐ˜ํ™˜ ํƒ€์ž…์˜ ํ•˜์œ„ ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌํ„ด ํƒ€์ž…์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ง€์ •ํ•˜๊ณ , ์‹ค์ œ๋กœ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฆฌํ„ดํ•จ์œผ๋กœ์„œ
๊ตฌํ˜„์ฒด์˜ API ๋Š” ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

java.util.Collections ๋™๋ฐ˜ ํด๋ž˜์Šค
-> ์ž๋ฐ” 8 ์ด์ „์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์— ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ

public class Collections {
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๋ถˆ๊ฐ€
    private Collections() {
    }

    // ์ •์  ํŽ™ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ
    public static <T> List<T> unmodifiableList(List<? extends T> list) {
        return (list instanceof RandomAccess ?
                new UnmodifiableRandomAccessList<>(list) :
                new UnmodifiableList<>(list));
    }

    // ๊ตฌํ˜„์ฒด : non-public ์ด๋‹ค.
    static class UnmodifiableList<E> extends UnmodifiableCollection<E> implements List<E> {
        ...
    }
}

๊ตฌํ˜„์ฒด๋ฅผ ์ˆจ๊ธฐ๊ณ  public ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ์ œ๊ณตํ•˜๋ฏ€๋กœ API ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ตํ˜€์•ผ ํ•˜๋Š” ๊ฐœ๋…๊ณผ ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ์•„์กŒ๋‹ค. (๊ฐœ๋…์  ๋ฌด๊ฒŒ๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.)

์ž๋ฐ” 8 ๋ฒ„์ „ ์ดํ›„๋กœ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—์„œ public static ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. private static ๋ฉ”์„œ๋“œ๋Š” ์ž๋ฐ” 9 ๋ถ€ํ„ฐ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.




5. ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋งค๋ฒˆ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ์˜ˆ์‹œ์—์„œ unmodifialbeList() ์˜ ์ธ์ˆ˜ list ๊ฐ€ RandomAccess ์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.




6. ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ์ ์—๋Š” ๋ฐ˜ํ™˜ํ•  ๊ฐ์ฒด์˜ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ : ์„œ๋น„์Šค์˜ ๊ตฌํ˜„์ฒด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ†ต์ œํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌํ˜„์ฒด๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ

  • ์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ตฌ์„ฑ์š”์†Œ
    • ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค : ๊ตฌํ˜„์ฒด์˜ ๋™์ž‘์„ ์ •์˜
    • ์„œ๋น„์Šค ๋“ฑ๋ก API : ์ œ๊ณต์ž๊ฐ€ ๊ตฌํ˜„์ฒด๋ฅผ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉ
    • ์„œ๋น„์Šค ์ ‘๊ทผ API : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์„ ๋•Œ ์‚ฌ์šฉ
    • ์„œ๋น„์Šค ์ œ๊ณต์ž ์ธํ„ฐํŽ˜์ด์Šค : ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒฉํ„ฐ๋ฆฌ ๊ฐ์ฒด
// jdbc ์—ฐ๊ฒฐํ•˜๋Š” ์ฝ”๋“œ
Class.forName("oracle.jdbc.driver.OracleDriver"); 
Connection conn = null; 
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORA92", "scott", "tiger"); 
Statement..

์œ„์˜ ์ฝ”๋“œ์—์„œ Connection ์ด ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค,
๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•ด ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋“ฑ๋กํ•˜๋Š” DriverManager.registerDriver ๊ฐ€ ์ œ๊ณต์ž ๋“ฑ๋ก API,
์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค์ธ Connection ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋Š” DriverManager.getConnection ์ด ์„œ๋น„์Šค ์ ‘๊ทผ API ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์„œ๋น„์Šค ์ œ๊ณต์ž ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•œ๋‹ค.

๋“œ๋ผ์ด๋ฒ„๋Š” ์–ด๋–ค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์“ฐ์ผ์ง€ ๋ชจ๋ฅธ๋‹ค.

oracle, mysql .. ๊ฐ DBMS ์— ๋งž๋Š” Driver ๊ฐ€ ์žˆ๊ณ ,
Class.forName() ์˜ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์•Œ๋งž์€ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์–ป๋Š”๋‹ค.

์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ์ ์—๋Š” ๋ฐ˜ํ™˜ํ•  ๊ฐ์ฒด์˜ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค ๋ผ๋Š” ๋ง์˜ ์˜๋ฏธ๋Š”
๋ฐ˜ํ™˜ํ•  ๊ฐ์ฒด๋ฅผ ํŽ™ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์—, JDBC ์—์„œ๋„ ๊ฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ํŽ™ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ๋‚ด์šฉ๋งŒ ๋ฐ”๊ฟ”์„œ
์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.

Class.forName ๋™์ž‘๋ฐฉ์‹





์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ๋‹จ์ 

  • ์ƒ์†์„ ํ•˜๋ ค๋ฉด public, protected ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •์  ํŽ™ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•˜๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

    • java.util.Collections ๋กœ ๋งŒ๋“  ๊ตฌํ˜„์ฒด๋Š” ์ƒ์†ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

    • ์ƒ์„ฑ์ž์™€๋Š” ๋‹ฌ๋ฆฌ Javadoc ๋ฌธ์„œ์—์„œ ๋”ฐ๋กœ ๋ชจ์•„์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์—†๋‹ค.




์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ช…๋ช…๊ทœ์น™

 - from : ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•˜๋‚˜๋กœ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ฆ  
 - of : ์—ฌ๋Ÿฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ฆ  
 - valueOf : from ๊ณผ of์˜ ์ž์„ธํ•œ ๋ฒ„์ „
 - getInstance, instance : (๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๊ฑฐ๋‚˜ ๊ฐ–์ง€ ์•Š๊ฑฐ๋‚˜) ๊ฐ™์€ ์ธ์Šคํ„ด์Šค์ž„์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜
 - create, newInstance : ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜
 - getType : ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ
 - newType : getType ๊ณผ ๋™์ผ
 - Type : getType, newType ์˜ ๊ฐ„๋žต๋ฒ„์ „