Effective Java

[์•„์ดํ…œ 18] ์ƒ์†๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ผ

2023. 4. 6. 18:08
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ˜‡ Effective java Item 18

 

 

 

์ด ์ฑ…์—์„œ์˜ โ€˜์ƒ์†'์€ (ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š”) ๊ตฌํ˜„ ์ƒ์†์„ ๋งํ•œ๋‹ค. ์ด๋ฒˆ ์•„์ดํ…œ ์—์„œ ๋…ผํ•˜๋Š” ๋ฌธ์ œ๋Š” (ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅธ

์ธํ„ฐํ์ด์Šค๋ฅผํ™•์žฅํ•˜๋Š”) ์ธํ„ฐํ์ด์Šค์ƒ์†๊ณผ๋Š”๋ฌด๊ด€ํ•˜๋‹ค.

   

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๊ณผ ๋‹ฌ๋ฆฌ ์ƒ์†์€ ์บ ์Аํ™”๋ฅผ ๊นจ๋œจ๋ฆฐ๋‹ค.

 

 

๋ณ€ํ˜•๋œ HashSet : ์›์†Œ ์ˆ˜ ์ €์žฅ , ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๋จ.

pubUc Class InstrumentedHashSet<E> extends Hashset<E> {

// ์ถ”๊ฐ€๋œ ์›์†Œ์˜ ์ˆ˜
private int addCount = 0;

public InstrumentedHashSet() { }

pubUc InstrumentedHashset(int initCap, float 10adFactor) { super(initCap, 10adFactor);

}

@0verride pubUc boolean add(E e) { addCount+ๅ;

returnsuper.add(e); }

@0verride public boolean addAU(CoUection<? extends E> c) { addCount+=c.size();
returnsuper.addAU(c);

}

pubUc int getAddCount() { return addCount;

} }

 

 

 

์œ„ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— addAll๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์›์†Œ๋ฅผ 3๊ฐœ ๋”ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

InstrumentedHashset<String> s = new InstrumentedHashSet<>();
s.addAU(List.of(''ํ‹ฑ'', ''ํƒํƒ'', ''ํŽ‘''));

 

์ด์ œ getAddCount ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 3์„ ๋ฐ˜ํ™˜ํ•˜๋ฆฌ๋ผ ๊ธฐ๋Œ€ํ•˜๊ฒ ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 6์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์–ด๋””์„œ ์ž˜๋ชป๋œ ๊ฑธ๊นŒ? ๊ทธ ์›์ธ์€ Hashset์˜ addAU ๋ฉ”์„œ๋“œ๊ฐ€ add ๋ฉ”์„œ๋“œ๋ฅผ์‹œ์šฉํ•ด๊ตฌํ˜„๋œ๋ฐ์žˆ๋‹ค. ์ด๋Ÿฐ๋‚ด๋ถ€๊ตฌํ˜„๋ฐฉ์‹์€Hashset๋ฌธ์„œ์—๋Š”(๋‹น ์—ฐํžˆ) ์“ฐ์—ฌ ์žˆ์ง€ ์•Š๋‹ค. InstrumentedHashSet์˜ addAU์€ addCount์— 3์„ ๋”ํ•œ ํ›„Hashset์˜addAU๊ตฌํ˜„์„ํ˜ธ์ถœํ–ˆ๋‹ค. Hashset์˜addAU์€๊ฐ์›์†Œ๋ฅผadd๋ฉ”์„œ ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋ถˆ๋ฆฌ๋Š” add๋Š” InstrumentedHashset์—์„œ ์žฌ์ •์˜ ํ•œ ๋ฉ”์„œ๋“œ๋‹ค. ๋”ฐ๋ผ์„œ addCount์— ๊ฐ’์ด ์ค‘๋ณตํ•ด์„œ ๋”ํ•ด์ ธ, ์ตœ์ข…๊ฐ’์ด 6์œผ๋กœ ๋Š˜์–ด ๋‚œ ๊ฒƒโ—ŽI๋‹ค. addAu๋กœ ์ถ”๊ฐ€ํ•œ ์›์†Œ ํ•˜๋‚˜๋‹น 2์”ฉ ๋Š˜์–ด๋‚ฌ๋‹ค.

 

 

 

๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 

1. addAll์„ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜,

2. addAll์„ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜,

 

ํ•˜์ง€๋งŒ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์–ด๋ ต๊ฑฐ๋‚˜ ๊ท€์ฐฎ๊ฑฐ๋‚˜, ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. 

 

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฆ„ ๋ฐฐํฌ ๋ฒ„์ „์—์„œ ์ƒ์œ„ ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ์ƒ์†๋ฐ›๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ๋“ฑ๋“ฑ.. ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ค์–ด๊ฐ„๋‹ค. 

 

 

๋”ฐ๋ผ์„œ,

๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜์ง€ ์•Š๊ณ ,

์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ,

private ํ•„๋“œ๋กœ ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 

 

 

์ฑ…์˜ ์˜ˆ์ œ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์˜ˆ์ œ๋กœ ๋Œ€์‹  ์ •๋ฆฌํ•œ๋‹ค. 

 

๋”๋ณด๊ธฐ
public class Engine {
    public void start() {
        // ์—”์ง„์„ ๊ฐ€๋™์‹œํ‚ต๋‹ˆ๋‹ค.
    }
}

public class Car {
    private Engine engine;  // Engine ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    public Car() {
        this.engine = new Engine();  // Engine ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    }

    public void start() {
        engine.start();  // ํฌํ•จ๋œ Engine ๊ฐ์ฒด์˜ start() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
        // ์ž๋™์ฐจ๋ฅผ ๊ฐ€๋™์‹œํ‚ต๋‹ˆ๋‹ค.
    }
}

๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์— ํฌํ•จ์‹œ์ผœ์„œ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์ƒ์†์˜ ๋ฌธ์ œ๋ฅผ ํšŒํ”ผํ•˜๋ฉด์„œ, ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์šฉ์„ฑ๋„ ๋†’์ธ๋‹ค.

 

 

Car ๋Š” Engine ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ณ , Car ํด๋ž˜์Šค๋Š” Engine ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , Car ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•ด๋„ Engine ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 

 

์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋” ๋‚ฎ์ถ”๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

์š”์ฆ˜์€ ์ฑ…๋ณด๋‹ค gpt๋ฅผ ํ†ตํ•ด ์š”์•ฝํ•˜๋Š” ๊ฒŒ ๋” ํŽธํ•˜์ง€๋งŒ ์›๋ฌธ์€ ๋ฐ˜๋“œ์‹œ ์ฝ๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

320x100
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Effective Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์•„์ดํ…œ 50] ์ ์‹œ์— ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๋ผ  (0) 2023.07.24
[์•„์ดํ…œ 13] clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ  (0) 2023.02.15
[ ์•„์ดํ…œ 12 ] toString  (0) 2023.02.14
'Effective Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์•„์ดํ…œ 50] ์ ์‹œ์— ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๋ผ
  • [์•„์ดํ…œ 13] clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ
  • [ ์•„์ดํ…œ 12 ] toString
girin_dev
girin_dev
๊ธฐ๋กํ•ฉ์‹œ๋‹ค.
250x250
girin_dev
girin_dev
girin_dev

github.com/jaemanc


์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (122)
    • ALGORITHM (23)
    • AWS (4)
    • Effective Java (4)
    • ERROR (12)
    • DB (11)
    • JAVA (23)
      • SPRING (10)
    • PYTHON (5)
      • TOY_PROJECT (1)
    • MOBILE (4)
    • SERVER (8)
    • TIPS (16)
    • WAS (2)
    • ์ƒˆ์‹น ์ผ๊ธฐ (5)
    • DATA (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • springboot
  • react-native
  • oracle
  • java
  • error
  • lis
  • JAVA 11
  • python3
  • spring boot
  • docker
  • ๊ฐ€์žฅ ํฐ ์ˆ˜
  • ๋ฐ”์งˆ ํ‚ค์šฐ๊ธฐ
  • offset
  • ๋ฐ”๋‘‘์ด
  • vertica
  • IntelliJ
  • Flutter
  • centos7
  • CentOS 8
  • ๋ฐ”์งˆ
  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • oracle cloud
  • jwt
  • Chat GPT
  • ์ƒˆ์‹น
  • Effective Java
  • querydsl
  • dp
  • ๋ฐ”์งˆ ํŽ˜์Šคํ† 

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
girin_dev
[์•„์ดํ…œ 18] ์ƒ์†๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ผ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.