0. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ž€? or IOC Container

 

- DI ์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๋นˆ(Bean)๋“ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ(Lifecycle)์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค ์‹คํ–‰ ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ

  ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋“ค์—๊ฒŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

- Bean ์ƒ์„ฑ, ๊ด€๋ฆฌ, ์ œ๊ฑฐ ๋“ฑ์˜ ์—ญํ• ์„ ๋‹ด๋‹น

- BeanFactory์™€ ApplicationContext๋ผ๋Š” 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

 

1. Bean Factory๋ž€?

 

Bean Factory๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ  ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค.

getBean ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋นˆ์„ ์ธ์Šคํ„ด์Šคํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํ”„๋ง์—์„œ ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

 

- ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.
- ์Šคํ”„๋ง ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
- getBean() ์„ ์ œ๊ณตํ•œ๋‹ค.
- IoC์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ์ดˆ์ 


2. Application Context ๋ž€?

 

Application Context๋Š” Bean Factory์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์ƒ์†ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

 

- BeanFactory ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์†๋ฐ›์•„์„œ ์ œ๊ณตํ•œ๋‹ค.
- ์—ฌ๋Ÿฌ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

- ๋นˆ์˜ ์ƒ์„ฑ, ๊ด€๊ณ„ ์„ค์ • ๋“ฑ์˜ ์ œ์–ด๋ฅผ ์ด๊ด„ํ•˜๋Š” ๊ฒƒ์— ์ดˆ์ 

 

3. ๊ณตํ†ต์ 

 

- ์ œ๊ณต๋œ Bean ์ •์˜ ๋ฐ ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Bean ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ

- ๋นˆ์˜ ์ƒ์„ฑ , ์ดˆ๊ธฐํ™” ๋ฐ ์†Œ๋ฉธ์„ ํฌํ•จํ•˜์—ฌ ๋นˆ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ฒ˜๋ฆฌ

 

4. ์ฐจ์ด์ 


A. ๊ธฐ๋Šฅ์˜ ์ฐจ์ด

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋ฌผ๋ก ์ด๊ณ , ์ˆ˜ ๋งŽ์€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

 

MessageSouce

- ๋ฉ”์‹œ์ง€์†Œ์Šค๋ฅผ ํ™œ์šฉํ•œ ๊ตญ์ œํ™” ๊ธฐ๋Šฅ

EnvinromentalCapable

- ๋กœ์ปฌ, ๊ฐœ๋ฐœ, ์šด์˜๋“ฑ์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌ

ApplicationPublisher

- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฒคํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

ResouceLoader

- ํŽธ๋ฆฌํ•œ ๋ฆฌ์†Œ์Šค ์กฐํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต

 

B. ๋นˆ ๋กœ๋”ฉ์‹œ์ ์˜ ์ฐจ์ด

Bean Factory : Lazy Loading 

- ํ•„์š” ์‹œ์— ๋นˆ์„ ๋กœ๋”ฉํ•œ๋‹ค.

 

Application Context : Eager Loading

- ๋Ÿฐํƒ€์ž„ ์‹คํ–‰ ์‹œ์— ๋ชจ๋“  ๋นˆ์„ ๋กœ๋”ฉํ•œ๋‹ค.

 

C. ๊ตฌ์„ฑ์˜ ์ฐจ์ด

BeanFactory๋Š” ์ฃผ๋กœ XML ์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค.

Application Context๋Š” XML ์™ธ์—๋„ ์ž๋ฐ” ์ฝ”๋“œ๋‚˜ ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ์œผ๋กœ ์„ค์ •์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ๊ฒฐ๋ก 

 

Normally when building most applications in a J2EE-environment, the best option is to use the ApplicationContext
, since it offers all the features of the BeanFactory and adds on to it in terms of features, while also allowing a more declarative approach to use of some functionality, which is generally desirable. 

- ์Šคํ”„๋ง ๊ณต์‹ ๋ฌธ์„œ

 

ApplicationContext๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ApplicationContext๋Š” BeanFactory์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ๊ธฐ๋Šฅ ์ธก๋ฉด์—์„œ ์ถ”๊ฐ€ํ•˜๊ณ  ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋” ์„ ์–ธ์ ์ธ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”๋žŒ์งํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. 

 

๋‹ค๋งŒ ApplicationContext์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ ์ธ ์ธก๋ฉด์ด ์ค‘์š”ํ•  ๋•Œ๋Š” Bean Factory๊ฐ€ ์„ ํ˜ธ๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ๊ณ ์ž๋ฃŒ


https://velog.io/@sangwoo0727/BeanFactory%EC%99%80-Application-Context-%EB%B9%88-%EB%A1%9C%EB%94%A9%EC%8B%9C%EC%A0%90%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

BeanFactory์™€ Application Context ๋นˆ ๋กœ๋”ฉ์‹œ์ ์˜ ์ฐจ์ด

์‹œ์ž‘ํ•˜๋ฉฐ IoC ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•˜๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” DI์˜ ๊ด€์ ์—์„œ๋Š” ๋นˆ ํŒฉํ† ๋ฆฌ๋ผ๊ณ ๋„ ํ•˜๊ณ , ์ด๋Ÿฐ ๋นˆ ํŒฉํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์Šค

velog.io

 

https://www.geeksforgeeks.org/spring-difference-between-beanfactory-and-applicationcontext/

 

Spring - Difference Between BeanFactory and ApplicationContext - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://docs.spring.io/spring-framework/docs/1.2.x/reference/beans.html

 

Chapter 3. Beans, BeanFactory and the ApplicationContext

Two of the most fundamental and important packages in Spring are the org.springframework.beans and org.springframework.context packages. Code in these packages provides the basis for Spring's Inversion of Control (alternately called Dependency Injection) f

docs.spring.io

 

์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์ด๋ž€?

 

๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์˜ ์˜์กดํ•˜์ง€ ์•Š๊ณ ๋„ ์„œ๋กœ ์—ฐ๊ด€ ๋œ ๊ฐ์ฒด๋“ค์˜ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ์–ด๋–ค GUI ํ™˜๊ฒฝ์—์„œ ํด๋ฆญ๊ณผ ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž

 

์šด์˜์ฒด์ œ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค (์œˆ๋„์šฐ , ๋งฅ , ๋ฆฌ๋ˆ…์Šค)

 

๊ทธ๋ฆฌ๊ณ  ์šด์˜์ฒด์ œ์˜ ์ข…๋ฅ˜์— ์ƒ๊ด€ ์—†์ด ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค

 

์ถ”์ƒ ํŒฉํ† ๋ฆฌ๋Š” ๋™์ผํ•œ OS์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ค€๋‹ค.

 

 

 

์ถ”์ƒ ํŒฉํ† ๋ฆฌ์˜ ์š”์†Œ๋“ค์„ ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

 

AbstractFactory
- ์‹ค์ œ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค์˜ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค

- GUI๋กœ ์น˜๋ฉด ๋ชจ๋“  OS ๋ฒ„์ „์„ ๋‹ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.


ConcreteFactory
- ๊ตฌ์ฒด์ ์ธ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋กœ AbstractFactory ํด๋ž˜์Šค์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•จ์œผ๋กœ์จ ๊ตฌ์ฒด์ ์ธ ์ œํ’ˆ์„ ์ƒ์„ฑํ•œ๋‹ค.

- GUI๋กœ ์น˜๋ฉด OS์— ๋งž๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.


AbstractProduct
- ์ œํ’ˆ์˜ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค

- GUI๋กœ ์น˜๋ฉด ๊ณตํ†ต ๊ธฐ๋Šฅ(์ถ”์ƒ์ ์œผ๋กœ)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. 


ConcreteProduct
- ๊ตฌ์ฒด์ ์ธ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋Šฅ

- ์—ฌ๊ธฐ์„œ ๊ฐ๊ฐ์˜ OS์— ๋งž๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๋Š” GUI์— ์ ‘์†ํ•  ๋•Œ OS ์— ๋งž๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ตฌํ˜„ ์ฝ”๋“œ

์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

๋จผ์ € AbstractFactory ์™€ AbstractProduct ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž - ๊ธฐ๋Šฅ์€ ํด๋ฆญ๊ณผ ์Šคํฌ๋กค์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

 

GuiFac(AbstractFactory)

public interface GuiFactory {
    public Click runClick();
    public Scroll scroll();
}

 

Click(AbstractProduct)

public interface Click {
    public void click();
}

 

Scroll(AbstractProduct)

public interface Click {
    public void click();
}

 

๊ธฐ๋Šฅ ๋‘ ๊ฐœ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šคํ™” ํ•จ์œผ๋กœ์จ ๊ฐ๊ฐ์˜ OS๋Š” ์ด ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌ์ฒดํ™”ํ•˜๋ฉด ๋œ๋‹ค.

 

๋งŒ์•ฝ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ํ•˜์ž

 

LinuxClick(ConcreteProduct)

public class LinuxClick implements Click{
    @Override
    public void click() {
        System.out.println("๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.");
    }
}

 

LinuxScroll(ConcreteProduct)

public class LinuxScroll implements Scroll {
    @Override
    public void scroll() {
        System.out.println("๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์Šคํฌ๋กคํ•ฉ๋‹ˆ๋‹ค.");
    }
}

 

์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

๊ฐ๊ฐ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด๋†“์€ Click , Scroll ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ฒดํ™”ํ•œ๋‹ค.

 

๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋ ค๋ฉด ConcreteFactory ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

LinuxGuiFac(ConcreteFactory)

public class LinuxGuiFac implements GuiFactory {

    @Override
    public Click runClick() {
        return new LinuxClick();
    }

    @Override
    public Scroll scroll() {
        return new LinuxScroll();
    }
}

 

์ด์ œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค

 

๋ฉ”์ธ์—์„œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰์‹œ์ผœ๋ณด์ž

 

public class main {
    public static void main(String[] args) {
        GuiFactory gui = new LinuxGuiFac();
        Click click = gui.runClick();
        Scroll scroll = gui.scroll();

        click.click();
        scroll.scroll();
    }
}

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด,

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฆฌ๋ˆ…์Šค์—์„œ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

 

๋งŒ์•ฝ ๋ฆฌ๋ˆ…์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ(์œˆ๋„์šฐ , ๋งฅ) ์—์„œ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์—์„œ ํ–ˆ๋˜ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

(๊ณผ์ •์ƒ๋žต)

 

public class main {
    public static void main(String[] args) {
        GuiFactory gui = new WindowGuiFac();
        Click click = gui.runClick();
        Scroll scroll = gui.scroll();

        click.click();
        scroll.scroll();
    }
}

์œˆ๋„์šฐ๋กœ ๊ตฌํ˜„ ํŒฉํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ตฌํ˜„ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์—†์ด ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ

https://www.youtube.com/watch?v=soV1C6j9kkg 

https://gmlwjd9405.github.io/2018/08/08/abstract-factory-pattern.html

 

[Design Pattern] ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์ด๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•  ๋•Œ ํ”ํžˆ StringBuilder ์™€ StringBuffer ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ทธ ๋™์•ˆ์€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์˜ ์ฐจ์ด๋ผ๊ณ ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์•˜๋‹ค.

 

StringBuilder VS StringBuffer

 

์ŠคํŠธ๋ง ๋ฒ„ํผ ๊ตฌํ˜„ ์ฝ”๋“œ
์ŠคํŠธ๋ง ๋นŒ๋” ๊ตฌํ˜„ ์ฝ”๋“œ

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ŠคํŠธ๋ง ๋ฒ„ํผ์™€ ์ŠคํŠธ๋ง ๋นŒ๋” ๋ชจ๋‘ AbstractStringBuilder ๋ผ๋Š” ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

 

 

๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” append ํ•จ์ˆ˜์˜ ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋‘˜๋‹ค super() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด AbstractStringBuilder ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

๊ทผ๋ฐ ์ŠคํŠธ๋ง ๋ฒ„ํผ์—๋งŒ ์žˆ๋Š” ๊ฒƒ๋“ค์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋‹ค.

 

1. synchronize 

2. toStringCache

 

๊ฐ๊ฐ์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž

 

synchronize

- ์ด ํ‚ค์›Œ๋“œ๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.  

- ๊ณต์œ  ๋ฐ์ดํ„ฐ์— lock์„ ๊ฑธ์–ด ์ž‘์—…์ค‘์ด๋˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋งˆ์น ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ฒŒ ๋ณดํ˜ธํ•œ๋‹ค.

 

์ด ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ŠคํŠธ๋ง ๋ฒ„ํผ๋ฅผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ง€์›ํ•ด์ค€๋‹ค.

 

toStringCache

- ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ toString() ํ•จ์ˆ˜์˜ ์บ์‹œ ๊ฐ™์€ ๋ณ€์ˆ˜์ด๋‹ค.

   toString() ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์— ์ด value ๋ฐฐ์—ด์˜ ๋ณ€๊ฒฝ์ด ์—†๋‹ค๋ฉด,  toStringCache์„ ์ด์šฉํ•ด์„œ String์„ ๋งŒ๋“ ๋‹ค.

 

 

์ŠคํŠธ๋ง ๋ฒ„ํผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค toStringCache ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ค€๋‹ค.

 

๊ทธ ์ƒํƒœ์—์„œ toString()์„ ํ˜ธ์ถœํ•˜๋ฉด toStringCache ๋Š” null ์ด๊ธฐ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด value ๊ฐ’์œผ๋กœ String ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค !

 

@HotSpotIntrinsicCandidate
    public synchronized String toString() {
        return this.toStringCache == null ? (this.toStringCache = this.isLatin1() ? StringLatin1.newString(this.value, 0, this.count) : StringUTF16.newString(this.value, 0, this.count)) : new String(this.toStringCache);
    }

 

์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ธฐ์กด ๊ฐ’์„ ์ด์šฉํ•ด String ์„ ๋งŒ๋“ ๋‹ค. 

๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ String ์„ ๋งŒ๋“ ๋‹ค.

 

๊ทผ๋ฐ ์™œ toStringCache ๋ณ€์ˆ˜๋Š” ์ŠคํŠธ๋ง ๋ฒ„ํผ์—๋งŒ ์žˆ์„๊นŒ ?

 

๊ทธ ์ด์œ ๋Š” ์ŠคํŠธ๋ง ๋นŒ๋”๋Š” ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๊ฒŒ ๋ฌด์Šจ ์˜๋ฏธ๋ƒ๋ฉด, ์ŠคํŠธ๋ง ๋ฒ„ํผ๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์—ฌ๋Ÿฌ๋ฒˆ ๋ถˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ

 

๋‹จ์ผ ์“ฐ๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ŠคํŠธ๋ง ๋นŒ๋”๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์ด๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์ ๋‹ค.

 

๊ฒฐ๊ตญ ์ตœ์ ํ™”์˜ ์ฐจ์ด์ด๋‹ค.

 

๊ฒฐ๋ก 

 

๊ณตํ†ต์ 

 

์ŠคํŠธ๋ง ๋นŒ๋”์™€ ์ŠคํŠธ๋ง ๋ฒ„ํผ ๋ชจ๋‘ ๊ฐ™์€ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค.

 

 

์ฐจ์ด์ 

 

์ŠคํŠธ๋ง ๋นŒ๋” : ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด๊ฑฐ๋‚˜ ๋™๊ธฐํ™”๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€์•Š์•„๋„ ๋˜๋Š” ๊ณณ

์ŠคํŠธ๋ง ๋ฒ„ํผ : ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ

 

 

 

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ

https://woooongs.tistory.com/98?category=798806 

 

StringBuilder ์™€ StringBuffer ๋น„๊ต

StringBuilder ์™€ StringBuffer ๋ชจ๋‘ AbstractStringBuilder ๋ฅผ ์ƒ์†๋ฐ›์•„ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. ๋‘ ํด๋ž˜์Šค๋Š” ๋ชจ๋‘ String ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์ง€๋งŒ ์–ด๋–ค ์ฐจ์ด์ ์œผ๋กœ ์ธํ•ด ๊ตฌ๋ถ„๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค. appen

woooongs.tistory.com

https://stackoverflow.com/questions/46294579/why-stringbuffer-has-a-tostringcache-while-stringbuilder-not

 

Why StringBuffer has a toStringCache while StringBuilder not?

In JDK 8, StringBuffer class has a toStringCache, while StringBuilder doesn't. /** * A cache of the last value returned by toString. Cleared * whenever the StringBuffer is modified. */ private

stackoverflow.com

 

์ธ์ฆ๊ณผ ์ธ๊ฐ€

์ธ์ฆ :  ์œ ์ € ํ™•์ธ ์ ˆ์ฐจ

           ex) ๋กœ๊ทธ์ธ , ํšŒ์›๊ฐ€์ž…

์ธ๊ฐ€ : ํ•ด๋‹น ์œ ์ €๊ฐ€ ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง€ ํ™•์ธ

           ex) ๊ธ€ ์ˆ˜์ • , ์‚ญ์ œ ๋“ฑ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ์ž‘์—…๋“ค

 

HTTP์˜ ํŠน์„ฑ

HTTP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” stateless ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ๋กœ๊ทธ์ธ ์ •๋ณด ๋˜ํ•œ ๊ธฐ์–ตํ•   ์ˆ˜ ์—†๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋งค๋ฒˆ ์š”์ฒญ๋งˆ๋‹ค ๋กœ๊ทธ์ธ์„ ์š”๊ตฌํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋Š” ๋น„ํšจ์œจ ์ ์ด๋‹ค.

์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œ ์ €์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ธ์…˜ ์ธ์ฆ๊ณผ ํ† ํฐ ์ธ์ฆ์ด ์žˆ๋‹ค.

 

์„ธ์…˜ ์ธ์ฆ

์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ์„ธ์…˜์„ ์ƒ์„ฑํ•ด ํ•ด๋‹น ์„ธ์…˜์— ๋งž๋Š” ์„ธ์…˜ID๋ฅผ ์œ ์ €์˜ ์ฟ ํ‚ค๋กœ ์ €์žฅํ•œ๋‹ค.

๋‹ค์Œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์œ ์ €์˜ ์„ธ์…˜ID์™€ ์„œ๋ฒ„์˜ ์„ธ์…˜ID๋ฅผ ๋น„๊ตํ•ด์„œ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ  ์ธ๊ฐ€ํ•œ๋‹ค.

 

์žฅ์ 

1.  ์„œ๋ฒ„์— ์„ธ์…˜์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

2.  ์„œ๋ฒ„์— ์ €์žฅ ๋œ ์„ธ์…˜์€ ์•„๋ฌด๋‚˜ ์—ด๋žŒํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ด ์•ˆ์ „ํ•˜๋‹ค.

 

๋‹จ์ 

1. ์œ ์ €์˜ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ์ปค์ง„๋‹ค.

2. ์„œ๋ฒ„ ํ™•์žฅ ์‹œ ์„ธ์…˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

 

ํ† ํฐ ์ธ์ฆ

์œ ์ €์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํŽ˜์ด๋กœ๋“œ์™€ ์‹œํฌ๋ฆฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์•”ํ˜ธํ™” ํ•œ ํ† ํฐ์„ ์œ ์ €์—๊ฒŒ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

์œ ์ €๋Š” ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ์„ ๋ณด๊ด€ํ•ด๋†จ๋‹ค๊ฐ€ ๋‹ค์Œ ์š”์ฒญ ์‹œ ํ•จ๊ป˜ ๋ณด๋‚ธ๋‹ค.

์„ธ์…˜์€ ์„œ๋ฒ„์—์„œ ์ €์žฅ๋˜์ง€๋งŒ ํ† ํฐ์€ ์œ ์ €๊ฐ€ ์ €์žฅํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

ํ† ํฐ์€ ์„ธ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

1. ํ—ค๋”  : ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ๊ฒ€์ฆํ•˜๋Š” ๊ฐ€์— ๋Œ€ํ•œ ๋‚ด์šฉ

2. ํŽ˜์ด๋กœ๋“œ : ํ† ํฐ์— ๋‹ด๊ธด ์‚ฌ์šฉ์ž ์ •๋ณด

3. ์‹œํฌ๋ฆฟ ํ‚ค : ์•”ํ˜ธํ™” ํ‚ค

 

์žฅ์ 

1. ํ† ํฐ์„ ์œ ์ €๊ฐ€ ์ €์žฅํ•˜๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ์„œ๋ฒ„์— ๋ถ€๋‹ด์ด ์ ๋‹ค. 

2. ์„ธ์…˜ ๋ฐฉ์‹๋ณด๋‹ค ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค.

 

๋‹จ์ 

1. ๊ธด ๋ฌธ์ž์—ด์„ ๋ณด๋‚ด์•ผํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ† ํฐ์„ ์ €์žฅํ•˜๋‹ค ๋ณด๋‹ˆ ์„ธ์…˜๋ณด๋‹ค ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•˜๋‹ค.

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

https://velog.io/@chickenrun/%EC%84%B8%EC%85%98-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D-VS-Token-%EC%9D%B8%EC%A6%9D%EB%B0%A9%EC%8B%9D%EC%9D%B8%EC%A6%9D%EA%B3%BC-%EC%9D%B8%EA%B0%80

 

์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹ VS Token ์ธ์ฆ๋ฐฉ์‹(์ธ์ฆ๊ณผ ์ธ๊ฐ€)

HTTP๋Š” ๋ณธ๋ž˜ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” statlessํ•œ ํŠน์„ฑ์„ ๊ฐ€์ ธ, ๊ฐ ํ†ต์‹ ์˜ ์ƒํƒœ๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์›น์‚ฌ์ดํŠธ์—์„œ ์ธ์ฆ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.์œ ์ €๊ฐ€ ์–ด๋–ค ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉ ์ค‘์ผ ๋•Œ ์œ ์ €

velog.io

https://hudi.blog/session-based-auth-vs-token-based-auth/

 

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ (feat. ์ธ์ฆ๊ณผ ์ธ๊ฐ€)

์ธ์ฆ๊ณผ ์ธ๊ฐ€ ์„ธ์…˜๊ธฐ๋ฐ˜ ์ธ๊ฐ€์™€ ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ๊ฐ€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ด์ „์— ๋จผ์ €, ์ธ์ฆ๊ณผ ์ธ๊ฐ€๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ถ€ํ„ฐ ์•Œ์•„์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ๊ฐ™๊ฑฐ๋‚˜ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด

hudi.blog

 

์ œ๋„ค๋ฆญ์ด๋ž€?

์–ด๋–ค ํด๋ž˜์Šค์— ์•„์ง ํ˜•ํƒœ๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž์ด ํ•„๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ ์–ธํ•ด์ค˜์•ผํ• ๊นŒ?
 
์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ Object ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•˜์ง€๋งŒ ์ด๋Ÿด ๊ฒฝ์šฐ ํƒ€์ž…์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•„๋“œ๊ฐ’์„ ์–ป์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
 
instanceof ์—ฐ์‚ฐ์ž๋กœ ํƒ€์ž…์„ ์กฐ์‚ฌํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์กฐ์‚ฌํ•  ์ˆ˜๋Š” ์—†๋‹ค.
 
๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์•„์ง ํƒ€์ž…์ด ์ •ํ•ด์ง€์ง€์•Š์€ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.
์ด๊ฒƒ์ด "์ œ๋„ค๋ฆญ"์ด๋‹ค.
 

์ œ๋„ค๋ฆญ์ด๋ž€ ๊ฒฐ์ •๋˜์ง€ ์•Š์€ ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ 
์‹ค์ œ ์‚ฌ์šฉํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์œผ๋กœ ๋Œ€์ฒด์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

 
 
์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์ผ๋‹จ ํƒ€์ž…์„ ์„ ์–ธํ•œ ํ›„์— ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์€ ๋‚˜์ค‘์— ์„ค์ •ํ•˜๋Š” ๊ฑฐ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
 

public class Box<T>{
	public T content;
}
//'T' ๋Œ€์‹  ๋‹ค๋ฅธ ์•ŒํŒŒ๋ฒณ์„ ์จ๋„ ๋ฌด๋ฐฉ

์—ฌ๊ธฐ์„œ T๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๊ณ  ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
๋งŒ์•ฝ content์— 100์„ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด , ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ Integer๋กœ ๋Œ€์ฒดํ•˜๋ฉด๋˜๊ณ 
content์— '"name"์„ ๋„ฃ๊ณ ์‹ถ๋‹ค๋ฉด, ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ String์œผ๋กœ ๋Œ€์ฒดํ•˜๋ฉด ๋œ๋‹ค.
 


์ œ๋„ค๋ฆญ ํƒ€์ž…

์ œ๋„ค๋ฆญํƒ€์ž…์€ ๊ฒฐ์ •๋˜์ง€ ์•Š์€ ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

public class ํด๋ž˜์Šค๋ช…<A,B,..> {...}
public interface ์ธํ„ฐํŽ˜์ด์Šค๋ช…<A,B,..> {...}
//์„ ์–ธ๋ถ€์— '<>' ๋ถ€ํ˜ธ๊ฐ€ ๋ถ™๋Š”๋‹ค.

ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Object ํƒ€์ž…์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ , object๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ(ex.equals)๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
 

์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ

์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

public <A,B,...> ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜,..){ }

 
์ œ๋„ค๋ฆญ ํƒ€์ž…๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฉ”์†Œ๋“œ ์„ ์–ธ๋ถ€์—์„œ ์ •์˜๋œ๋‹ค .

public static <T> Box<T> boxing(T t) {
        Box<T> box = new Box<T>();
        
        box.setT(t);
        return box;
    }
    
    public static void main(String[] args) {
        Box<Integer> box1 = boxing(100);
        // 100์ด Integer ํƒ€์ž…์ด๋ฏ€๋กœ T๋Š” Integer๋กœ ๋Œ€์ฒด
        int intValue = box1.getT();
        System.out.println(intValue);

        Box<String> box2 = boxing("name");
        // 100์ด String ํƒ€์ž…์ด๋ฏ€๋กœ T๋Š” String์œผ๋กœ ๋Œ€์ฒด
        String strValue = box2.getT();
        System.out.println(strValue);
        
    }

์ œํ•œ๋œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ

๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

public <T extends ์ƒ์œ„ํƒ€์ž…> ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ(๋งค๊ฐœ๋ณ€์ˆ˜,...) { }

 
์ƒ์œ„ํƒ€์ž…์€ ํด๋ž˜์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
 
๋งŒ์•ฝ ์ƒ์œ„ํƒ€์ž…์„ Number๋กœ ์ œํ•œํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ž์‹ํด๋ž˜์Šค(Byte,Shoret,Long,Integer ...) ๋งŒ ์‚ฌ์šฉํžˆ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
 

์™€์ผ๋“œ์นด๋“œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ

์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ๋งค๊ฐœ๊ฐ’์ด๋‚˜ ๋ฆฌํ„ด ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ '?'(์™€์ผ๋“œ์นด๋“œ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
 
ex)
Student ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€๋Šฅ

๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(์ œ๋„ค๋ฆญํƒ€์ž…<? extends Students> ๋ณ€์ˆ˜) {...}

 
Worker ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€๋Šฅ

๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(์ œ๋„ค๋ฆญํƒ€์ž…<? super Worker> ๋ณ€์ˆ˜) {...}

 
์–ด๋–ค ํƒ€์ž…์ด๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€๋Šฅ

๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(์ œ๋„ค๋ฆญํƒ€์ž…<?> ๋ณ€์ˆ˜) {...}

 

์ž๋ฐ”8 ๋ถ€ํ„ฐ ์ปฌ๋ ‰์…˜ ๋ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ ๋ฐ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ŠคํŠธ๋ฆผ์ด๋ž€ ?

์ŠคํŠธ๋ฆผ์€ ์š”์†Œ๋“ค์ด ํ•˜๋‚˜์”ฉ ํ˜๋Ÿฌ๊ฐ€๋ฉด์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋‚ด์žฅ

 

์ŠคํŠธ๋ฆผ ์—†์ด ์ปฌ๋ ‰์…˜ ๋ฐ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” for ๋ฌธ์ด๋‚˜ iterator๋ฅผ ์ด์šฉํ–ˆ์–ด์•ผํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ŠคํŠธ๋ฆผ์˜ ๋“ฑ์žฅ์œผ๋กœ ๋งค๋ฌด ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ŠคํŠธ๋ฆผ ์—†์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ

List<String> list = ...;
for(int i=0;i<list.size();i++){
	String item = list.get(i);
}

์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ

Stream<String> stream = list.stream();
stream.forEach(item -> //item์ฒ˜๋ฆฌ);

 

์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ญ๊ฐ€ ์ข‹์„๊นŒ?

1. ๋‚ด๋ถ€๋ฐ˜๋ณต์ž์ด๋ฏ€๋กœ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค. 

2. ๋žŒ๋‹ค์‹์œผ๋กœ ๋‹ค์–‘ํ•œ ์š”์†Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข… ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํŒŒ์ดํ”„ ๋ผ์ธ์„ ํ˜•์„ฑํ•   ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ด๋ถ€๋ฐ˜๋ณต์ž

์ŠคํŠธ๋ฆผ์˜ ์žฅ์  1๋ฒˆ์—์„œ ๋‚ด๋ถ€๋ฐ˜๋ณต์ž์ด๋ฏ€๋กœ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•˜์˜€๋‹ค.๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ '๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž'๋ž€ ๋ฌด์—‡์ผ๊นŒ?

 

๋จผ์ € for ๋ฌธ์„ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

List<String> list = ...;
for(int i=0;i<list.size();i++){
	String item = list.get(i);
}

๊ธฐ์กด for๋ฌธ์€ ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž์ด๋‹ค.

 

์™ธ๋ถ€๋ฐ˜๋ณต์ž๋ž€ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ์ปฌ๋ ‰์…˜ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๊บผ๋‚ด์™€์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋“ค์„ item ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋‚ด์— ๊ฐ€์ ธ์™€์„œ ์ฒ˜๋ฆฌํ•˜๊ณ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ,

๋‚ด๋ถ€๋ฐ˜๋ณต์ž(์ŠคํŠธ๋ฆผ) ์€ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€์—์„œ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋ ‰์…˜ ์š”์†Œ๋“ค์„ ๋ฐ–์œผ๋กœ ๊บผ๋‚ผ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋”์šฑ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค.

 

์ด ์™ธ์—๋„ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์†Œ๋“ค์„ ๋ถ„๋ฐฐ์‹œ์ผœ ๋ณ‘๋ ฌ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข…์ฒ˜๋ฆฌ

์ŠคํŠธ๋ฆผ์€ ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

//์˜ค๋ฆฌ์ง€๋‚  ์ŠคํŠธ๋ฆผ
Stream<Student>  student = list.stream();
//์ค‘๊ฐ„์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ(๋งคํ•‘)
IntStream scoreStream = studentStream.mapToInt( student -> student.getScore());
//์ตœ์ข…์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆ (์ง‘๊ณ„)
double avg = scoreItem  = scoreStream.average().getAsDouble();

1. ์˜ค๋ฆฌ์ง€๋„ ์ŠคํŠธ๋ฆผ

 

2. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ   

- ๋งคํ•‘ ์ค‘๊ฐ„ ์ŠคํŠธ๋ฆผ์ด ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ๋‹ค.   

- ํ•„ํ„ฐ๋ง , ๋งคํ•‘ ,์ •๋ ฌ ์ž‘์—… ์ˆ˜ํ–‰

 

3. ์ตœ์ข… ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ   

- ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์—์„œ ์ •์ œ๋œ ์š”์†Œ๋“ค์„ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜ , ์ง‘๊ณ„ ์ž‘์—…(์นด์šดํŒ…, ์ข…ํ•ฉ , ํ‰๊ท )์„ ์ˆ˜ํ–‰

- ์ตœ์ข… ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ์ด ์—†์œผ๋ฉด ์ŠคํŠธ๋ฆผ์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ŠคํŠธ๋ฆผ์˜ ์ข…๋ฅ˜

 

 

BaseStream ์—๋Š” ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต ๋ฉ”์†Œ๋“œ๋“ค์ด ์ •์˜๋˜์–ด์žˆ๋‹ค.

 

BaseStream์˜ ์ž์‹ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

1. Stream 

     - ๊ฐ์ฒด ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

2. IntStream

    - int ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

3. LongStream

    - long ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

4. DoubleStream

    - double ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

 

๋ฆฌ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ

1. ์ปฌ๋ ‰์…˜์œผ๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ     

- List ์™€ Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ์ฒด์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

      ex) Product ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ๋ฐ›๋Š” ์ฝ”๋“œ

Stream<Product> stream =  list.stream();

2. ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ   

-  java.utils.Arrays ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

//๋ฌธ์ž์—ด ๋ฐฐ์—ด
String[] strArray = {"ํ™๊ธธ๋™","์‹ ์šฉ๊ถŒ","๊น€๋ฏธ๋‚˜"};
//๋ฌธ์ž์—ด ์ŠคํŠธ๋ฆผ(strStream) ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
String<String> strStream = Arrays.stream(strArray);

//์ •์ˆ˜ ๋ฐฐ์—ด
int[] intArray = {1,2,3,4,5};
//๋ฌธ์ž์—ด ์ŠคํŠธ๋ฆผ(intStream) ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
IntStream intS1tream  = Arrays.stream(intArray);

 

์ด์™ธ์—๋„ ์ˆซ์ž ๋ฒ”์œ„๋‚˜ ํŒŒ์ผ ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋กœ ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€,

ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ถ€๋กœ ๋ณด๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ์ž๋ฐ”8๋ถ€ํ„ฐ ๋žŒ๋‹ค์‹์„ ์ง€์›ํ•œ๋‹ค.

๋žŒ๋‹ค์‹ :(๋งค๊ฐœ๋ณ€์ˆ˜, ...) -> {์ฒ˜๋ฆฌ๋‚ด์šฉ}

 

์ž๋ฐ”๋Š” ๋žŒ๋‹ค์‹์„ ์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

์ถ”์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜์ด๊ณ  ๋‘๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๋žŒ๋‹ค์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

(x,y) -> { ์ฒ˜๋ฆฌ๋‚ด์šฉ };

x,y : ๋งค๊ฐœ๋ณ€์ˆ˜

-> { ์ฒ˜๋ฆฌ๋‚ด์šฉ } : ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์˜ ์‹คํ–‰ ๋ธ”๋ก

 

๋žŒ๋‹ค์‹์€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€์ž…๋  ์ˆ˜ ์žˆ๋‹ค.

public class Main {
    public static void main(String[] args) {
        action((x, y) -> {
            int result = x+y;
            System.out.println("result: "+ result);
        });

        action((x,y) -> {
            int result = x-y;
            System.out.println("result ="+result);
        });
    }

    public static void action(Calculable calculable) {
        int x = 10;
        int y = 4;
        calculable.calculate(x, y);
    }
}

calculable.calculate(x,y) ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋žŒ๋‹ค์‹์˜ ์ค‘๊ด„ํ˜ธ ๋ธ”๋ก์ด ์‹คํ–‰๋œ๋‹ค.

 

์–ด๋–ค ๋žŒ๋‹ค์‹์„ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋Š” ๋‹ฌ๋ผ์ง„๋‹ค.

 

* ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋žŒ๋‹ค์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

( @FuntionalInterface ๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์€ ๋ณธ์ธ ๋งˆ์Œ์ด์ง€๋งŒ ์ •ํ™•ํ•œ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. )

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๋žŒ๋‹ค์‹

//์‹คํ–‰๋ฌธ์ด ๋‘๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ
() ->{
	์‹คํ–‰๋ฌธ;
        ์‹คํ–‰๋ฌธ;
}

//์‹คํ–‰๋ฌธ์ด ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ
() -> ์‹คํ–‰๋ฌธ

์‹คํ–‰๋ฌธ์ด ๋‘ ๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.

public static void main(String[] args) {
        Person person = new Person();

        person.action(() -> {
            System.out.println("WORK");
            System.out.println("PROGRAMMING");
        });

        person.action(()->{
            System.out.println("WORK");
        });
    }

 

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋žŒ๋‹ค์‹

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ

 

๋งค๊ฐœ๋ณ€์ˆ˜ํƒ€์ž…์€ ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ var๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํƒ€์ž…์„ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

๋ฆฌํ„ด๊ฐ’์ด ์žˆ๋Š” ๋žŒ๋‹ค์‹

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์— ๋ฆฌํ„ด๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐreturn ๋ฌธ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ด„ํ˜ธ์™€ ํ•จ๊ป˜ return ํ‚ค์›Œ๋“œ ์ƒ๋žต๊ฐ€๋Šฅ๋ฆฌํ„ด๊ฐ’์€ ์—ฐ์‚ฐ์‹ or  ๋ฆฌํ„ด๊ฐ’์ด ์žˆ๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ

 

public static void main(String[] args) {
        Person person = new Person();

        person.action((x, y) -> {
            double result = x+y;
            return result;
        });

        person.action((x,y) -> (x+y));

    }

 

๋ฉ”์†Œ๋“œ ์ฐธ์กฐ

public class Computer {
    public static double staticMethod(double x,double y){
        return x+y;
    }public double instanceMethod(double x,double y){
        return x*y;
    }
}
public static void main(String[] args) {
        Person person = new Person();

        person.action(Computer::staticMethod);

        Computer com = new Computer();

        person.action(com::instanceMethod);

    }

 

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ

 

๋žŒ๋‹ค์‹์—์„œ ์ œ๊ณต๋˜๋Š” a ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ b ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

(a,b) -> {a.instanceMethod(b);}

์ด๊ฒƒ์„ ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํด๋ž˜์Šค::instanceMethod

a์˜ ํด๋ž˜์Šค :: ๋ฉ”์†Œ๋“œ ์ด๋ฆ„

 

public class MethodReference {
    public static void main(String[] args) {
        Person person = new Person();
        person.ordering(String :: compareToIgnoreCase);
    }
}

 

์ƒ์„ฑ์ž ์ฐธ์กฐ

๋žŒ๋‹ค์‹์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹จ์ˆœํžˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฆฌํ„ดํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ๋‹ค๋ฉด ์ƒ์„ฑ์ž ์ฐธ์กฐ๋กœ ๋Œ€์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

(a,b) -> {return new ํด๋ž˜์Šค(a,b);}

์ด๊ฒƒ์€ ์ƒ์„ฑ์ž ์ฐธ์กฐ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํด๋ž˜์Šค :: new

๊ณผ๊ฑฐ์— ์ค‘์ฒฉ ์„ ์–ธ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•œ ์ ์ด ์žˆ์ง€๋งŒ ๋žŒ๋‹ค์‹์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๊ฐœ๋…์ด ํ—ท๊ฐˆ๋ ค์„œ ์ต๋ช… ๊ฐ์ฒด์™€ ํ•จ๊ป˜ ๋ณต์Šต์„ ์ง„ํ–‰ํ•จ

https://cb036133.tistory.com/56

 

์ค‘์ฒฉ ํด๋ž˜์Šค

- ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์„ ์–ธํ•œ ํด๋ž˜์Šค 

- ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

- ํŠน์ • ํด๋ž˜์Šคํ•˜๊ณ ๋งŒ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๊ฒฝ์šฐ ์ค‘์ฒฉ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด

 

๋ฉค๋ฒ„ ํด๋ž˜์Šค

- ํด๋ ˆ์Šค์˜ ๋ฉค๋ฒ„๋กœ์„œ ์„ ์–ธ๋˜๋Š” ์ค‘์ฒฉ ํด๋ž˜์Šค

  1. ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค 

  2. ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค

 

๋กœ์ปฌ ํด๋ž˜์Šค

  3. ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ๋•Œ๋งŒ B๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

 

1. ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค 

   - ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ private์ ‘๊ทผ ์ œํ•œ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

   - ์ธ์Šคํ„ด์Šค ํ•„๋“œ๊ฐ’ , ์ƒ์„ฑ์ž , ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ์—์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค .( ๋ฐ”๊นฅ ๊ฐ์ฒด๊ฐ€ ์žˆ์–ด์•ผ B๊ฐ์ฒด๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)

   - ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•˜๋ ค๋ฉด  default ๋˜๋Š” public ์ ‘๊ทผ ์ œํ•œ์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

   - ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ํ•„๋“œ , ์ƒ์„ฑ์ž , ๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ์˜ฌ์ˆ˜ ์žˆ๋‹ค.

   - ์ •์  ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋Š” ์ž๋ฐ” 17 ๋ถ€ํ„ฐ ๊ฐ€๋Šฅ

 

2. ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค

   - ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— default ๋˜๋Š” public ์ ‘๊ทผ ์ œํ•œ์„ ๊ฐ€์ง„๋‹ค.

   - ๋ฐ”๊นฅ ๊ฐ์ฒด ๋‚ด๋ถ€ ์–ด๋””์—์„œ๋“  ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

   - ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ํ•„๋“œ , ์ƒ์„ฑ์ž , ๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

3. ๋กœ์ปฌ ํด๋ž˜์Šค

   - ์ƒ์„ฑ์ž ๋˜๋Š” ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ํด๋ž˜์Šค์ด๋‹ค.

   - ์ƒ์„ฑ์ž์™€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋™์•ˆ์—๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

   - ํ•„๋“œ , ์ƒ์„ฑ์ž , ๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

   - ์ •์  ํ•„๋“œ์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ์ž๋ฐ”17๋ถ€ํ„ฐ ๊ฐ€๋Šฅ

   - ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ๋กœ์ปฌ ํด๋ž˜์Šค ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ final ํŠน์„ฑ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

๋ฐ”๊นฅ ๋ฉค๋ฒ„ ์ ‘๊ทผ 

 

์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋Š” ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ œํ•œ์ด ๋”ฐ๋ฅธ๋‹ค.

 

์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค : ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ

์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค :  ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ •์  ํ•„๋“œ์™€ ์ •์  ๋ฉ”์†Œ๋“œ

 

์ค‘์ฒฉ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋ฐ”๊นฅ ํด๋ž˜์Šค ์ด๋ฆ„์— this ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค !

ex) ๋ฐ”๊นฅํด๋ž˜์Šค์ด๋ฆ„.this -> ๋ฐ”๊นฅ ๊ฐ์ฒด

 

์ค‘์ฒฉ ์ธํ„ฐํŽ˜์ด์Šค 

- ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ ์„ ์–ธ๋œ ์ธํ„ฐํŽ˜์ด์Šค

- ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

class A{
	[public|private] [static] interface B{
    	// ์ƒ์ˆ˜ ํ•„๋“œ
        // ์ถ”์ƒ ๋ฉ”์†Œ๋“œ
        // ๋””ํด๋“œ ๋ฉ”์†Œ๋“œ
        // ์ •์  ๋ฉ”์†Œ๋“œ
    } 
}

 

์ต๋ช… ๊ฐ์ฒด 

- ์ด๋ฆ„์ด ์—†๋Š” ๊ฐ์ฒด

- ๋ช…์‹œ์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํ•„๋“œ๊ฐ’ , ๋กœ์ปฌ ๋ณ€์ˆ˜๊ฐ’, ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ

 

์ต๋ช… ์ž์‹ ๊ฐ์ฒด : ํด๋ž˜์Šค๋ฅผ ์ƒ์†

์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด : ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„

 

์ต๋ช… ์ž์‹ ๊ฐ์ฒด

 

์ต๋ช… ์ž์‹ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑ๋œ๋‹ค.

new ๋ถ€๋ชจ์ƒ์„ฑ์ž(๋งค๊ฐœ๊ฐ’, ...){
 	//ํ•„๋“œ
    //๋ฉ”์†Œ๋“œ
}

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ ํƒ€์ž…์˜ ํ•„๋“œ, ๋กœ์ปฌ ๋ณ€์ˆ˜ , ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ž… ๊ฐ€๋Šฅ

 

์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด

 

์ต๋ช… ๊ตฌํ˜„ ๊ฐ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑ๋œ๋‹ค.

new ์ธํ„ฐํŽ˜์ด์Šค(๋งค๊ฐœ๊ฐ’, ...){
 	//ํ•„๋“œ
      //๋ฉ”์†Œ๋“œ
}

์ค‘๊ด„ํ˜ธ ๋ธ”๋ก์•ˆ์—๋Š” ์ฃผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์˜จ๋‹ค.

 

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

- ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ์ฒด๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ์ถ”๊ฐ€,์‚ญ์ œ,๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค , ํด๋ž˜์Šค

- ๋Œ€ํ‘œ์ ์œผ๋กœ List, Map , Set ์ด ์žˆ๋‹ค.

 

* List ์™€ Map์€ Collection ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ƒ์† , Map ์€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์ด ๋‘˜๊ณผ๋Š” ๋‹ค๋ฅป๋‹ค.

 

๋ถ„๋ฅ˜ ํŠน์ง•
Collection List - ์ˆœ์„œ ์œ ์ง€
- ์ค‘๋ณต ๊ฐ€๋Šฅ
Set - ์ˆœ์„œ x
- ์ค‘๋ณต x
Map -ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์—”ํŠธ๋ฆฌ ์ €์žฅ
- ํ‚ค๋Š” ์ค‘๋ณต ์ €์žฅ x

List ์ปฌ๋ ‰์…˜

- ๊ฐ์ฒด๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

- ArrayList , Vector , LinkedList ๋“ฑ์ด ์‚ฌ์šฉ๋œ๋‹ค.

- ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์ถ”๊ฐ€ , ๊ฐ์ฒด ๊ฒ€์ƒ‰ , ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex) add(), contatains() , clear()

 

ArrayList 

- ์ผ๋ฐ˜ ๋ฐฐ์—ด์€ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด ์ฃผ์–ด์•ผํ•˜์ง€๋งŒ , ArrayList๋Š” ์ œํ•œ์—†์ด ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ฐ์ฒด์˜ ๋ฒˆ์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค. (๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ๊ฒฝ์šฐ ๋™์ผํ•œ ๋ฒˆ์ง€๊ฐ€ ์ €์žฅ๋œ๋‹ค!!)

- null ๋„ ์ €์žฅ๊ฐ€๋Šฅ

- ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ชจ๋‘ ์•ž์œผ๋กœ 1์”ฉ ๋‹น๊ฒจ์ง„๋‹ค.

- ์„ ์–ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

List<E> list = new ArrayList<E>(); // E์— ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅ

List<E> list = new ArrayList<>(); // E์— ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅ

List list = new ArratList(); // ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅ

- ์‚ฝ์ž… ์‚ญ์ œ์‹œ ์ž๋ฃŒ ์ „์ฒด๊ฐ€ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ๋ฒˆํ•œ ์ˆ˜์ •์ด ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์—์„œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค, (LinkedList ์‚ฌ์šฉ)

 

Vector 

- ArrayList์™€ ๋™์ผํ•œ ๋‚ด๋ถ€๊ตฌ์กฐ์ด์ง€๋งŒ ๋™๊ธฐํ™”๋œ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. -> ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰ ๋ถˆ๊ฐ€ !!

- ์„ ์–ธ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

List<E> list = new Vector<E>(); // E์— ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅ

List<E> list = new Vector<>(); // E์— ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅ

List list = new Vector(); // ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ์ฒด ์ €์žฅ

 

LinkedList

- ArrayList์™€ ๋‹ฌ๋ฆฌ LinkedList๋Š” ์ธ์ ‘๊ฐ์ฒด๋ฅผ ์ฒด์ธ์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•ด์„œ ๊ด€๋ฆฌ 

- ๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์‚ญ์ œ์™€ ์‚ฝ์ž…์ด ์ผ์–ด๋‚˜๋Š” ๊ณณ์—์„œ ์šฉ์ดํ•˜๋‹ค.

List<E> list = new LinkedList<E>(); // E์— ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅ
List<E> list = new LinkedList<>(); // E์— ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅ
List list = new LinkedList(); // ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅ

Set ์ปฌ๋ ‰์…˜

- ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๊ณ  ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค !

- ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๋‹ค

 

HashSet 

- ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

- ๊ฐ์ฒด๋ฅผ ์ค‘๋ณต ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. 

   ๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ผ๋„ hash ์ฝ”๋“œ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ๊ฐ™๊ณ  equals ๋ฉ”์†Œ๋“œ๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋™์ผํ•œ ๊ฐ์ฒดํ•˜๊ณ  ํŒ๋‹จํ•˜๊ณ  ์ค‘๋ณต ์ €์žฅํ•˜       ์ง€ ์•Š๋Š”๋‹ค.(๋ฉ”์†Œ๋“œ ์žฌ์ •์˜๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค)

 

Set ์ปฌ๋ ‰์…˜์€ ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ํ•œ๊ฐœ์”ฉ ๋ฐ˜๋ณตํ•ด์„œ ๊ฐ€์ ธ์™€์•ผํ•œ๋‹ค.

1. for๋ฌธ์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๊ธฐ

2. iterator() ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ 

 

iterator() ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

- hasnext() : ๊ฐ€์ ธ์˜ฌ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ์ง€ ์•Œ๋ ค์ค€๋‹ค.

- next()  : ์ปฌ๋ ‰์…˜์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

- remove() : next๋กœ ๊ฐ€์ ธ์˜จ ๊ฐ์ฒด๋ฅผ set ์ปฌ๋ ‰์…˜์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

 

iterator ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Iterator<E> iterator = set.iterator();

 

Map ์ปฌ๋ ‰์…˜

- Map ์ปฌ๋ ‰์…˜์€ ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์—”ํŠธ๋ฆฌ๋ฅผ ์ €์žฅ

- ํ‚ค๋Š” ์ค‘๋ณต ์ €์žฅํ•  ์ˆ˜ ์—†์ง€๋งŒ ๊ฐ’์€ ์ค‘๋ณต์ €์žฅ ๊ฐ€๋Šฅ

- ๋งŒ์•ฝ ๋™์ผํ•œ ํ‚ค๊ฐ€ ์ €์žฅ๋˜๋ฉด ๊ธฐ์กด ํ‚ค๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.

- ํ‚ค๋ฅผ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ๋งŽ๋‹ค.

ex) put(K key , V value) : ์ฃผ์–ด์ง„ ํ‚ค์™€ ๊ฐ’์„ ์ถ”๊ฐ€ , ์ €์žฅ์ด ๋˜๋ฉด ๊ฐ’์„ ๋ฆฌํ„ด

      boolean  containsKey(Object key) : ์ฃผ์–ด์ง„ ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€

 

HashMap 

- Set์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค . (ํ‚ค๊ฐ’์— ํ•œํ•ด์„œ๋งŒ)

- hashcode ์˜ ๋ฆฌํ„ด๊ฐ’์ด ๊ฐ™๊ณ  equals ๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•  ๊ฒฝ์šฐ ์ค‘๋ณต์ €์žฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Map<K,V> map = new HashMap<K,V>();
Map<K,V> map = new HashMap<>();
Map map = new HashMap(); // ๋ชจ๋“  ํƒ€์ž…์˜ ํ‚ค์™€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฑฐ์˜ ์•ˆ์“ด๋‹ค.

 

HashTable

- HashMap๊ณผ ๋‹ค๋ฅธ ์ ์€ ๋™๊ธฐํ™” ๋œ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

  ๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— HashTable๋ฉ”์†Œ๋“œ๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

- ์„ ์–ธ์€ HashMap ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด ๋œ๋‹ค.

 

 

ArrayList VS LinkedList

 

๊ฐ™์€ Set ์ปฌ๋ ‰์…˜์ด์ง€๋งŒ ์ด ๋‘˜์€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ ?

 

 

1. ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅด๋‹ค.

    - ArrayList ๋Š” AbstractList(๋ฐฐ์—ด ํด๋ž˜์Šค)๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์ง€๋งŒ LinkedList๋Š” Abstarct Sequential List(์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํด๋ž˜์Šค)        ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค.

 

2. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

     - ArrayList๋Š” ์ญ‰ ๋Š˜์–ด์ง„ ๋ฐฐ์—ด์˜ ํ˜•์‹์„ ์ทจํ•˜๊ณ  ์žˆ์ง€๋งŒ , Linked List๋Š” ์„œ๋กœ ์ž๋ฃŒ์˜ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์ ธ ์žˆ๋‹ค.

     - ์ด๋•Œ๋ฌธ์— Linked List๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž… , ์‚ญ์ œ ์‹œ์— ๋ช‡๊ฐœ์˜ ์ฐธ์กฐ์ž๋งŒ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด ๋˜๋ฏ€๋กœ ๋น ๋ฅด๊ฒŒ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ์žฅ๋‹จ์ 

    - Linked List๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž… ์‚ญ์ œ์— ์šฉ์ดํ•˜์ง€๋งŒ Sequantial access ๋งŒ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€        ๋Šฅํ•˜๋‹ค.

      ์ฐธ์กฐ์ž๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค

      ์‚ฌ์‹ค ์ˆœ์ฐจ ์ ‘๊ทผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์ ธ ์žˆ๋Š” ArrayList๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.

    - Array List๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฌ์ง€๋งŒ random access๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ํƒ์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ๊ณ ์ž๋ฃŒ

https://www.nextree.co.kr/p6506/

 

์ค‘์ฒฉํด๋ž˜์Šค

- ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์„ ์–ธํ•œ ํด๋ž˜์Šค

- ํŠน์ • ํด๋ž˜์Šคํ•˜๊ณ ๋งŒ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ

- ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํŒŒ์ผ ์ƒ์„ฑ

๋ฉค๋ฒ„ ํด๋ž˜์Šค ๋กœ์ปฌ ํด๋ž˜์Šค
์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค ๋กœ์ปฌ ํด๋ž˜์Šค
๋ฐ”๊นฅ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ๋งŒ ์ค‘์ฒฉํด๋ž˜์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ ๋ฐ”๊นฅ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ค‘์ฒฉํด๋ž˜์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ• ๋•Œ๋งŒ ์ค‘์ฒฉํด๋ž˜์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ

 

์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค 

- ์ฃผ๋กœ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ private ์ ‘๊ทผ ์ œํ•œ์„ ๊ฐ€์ง

- ์ธ์Šคํ„ด์Šค ํ•„๋“œ๊ฐ’, ์ƒ์„ฑ์ž , ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ์—์„œ ์ƒ์„ฑ๊ฐ€๋Šฅ

- ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ”๊นฅ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•จ

- ์ค‘์ฒฉ ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ํ•„๋“œ,์ƒ์„ฑ์ž,๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ž๋ฐ”17๋ถ€ํ„ด ์ •์  ํ•„๋“œ, ์ •์  ๋ฉ”์†Œ๋“œ ์„ ์–ธ ๊ฐ€๋Šฅ)

 

์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค

- static ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ์ค‘์ฒฉ ํด๋ž˜์Šค

- ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์„œ ์ผ๋ฐ˜์ ์œผ๋กœ public ํ˜น์€ default

- ํด๋ž˜์Šค์˜ ์–ด๋””์—์„œ๋“  ์ƒ์„ฑ ๊ฐ€๋Šฅ

- ์ค‘์ฒฉ ํด๋ž˜์Šค์—๋Š” ํ•„๋“œ, ์ƒ์„ฑ์ž, ๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

๋กœ์ปฌํด๋ž˜์Šค

- ์ƒ์„ฑ์ž ํ˜น์€ ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ์ค‘์ฒฉํด๋ž˜์Šค

- ๋ฉ”์†Œ๋“œ(์ƒ์„ฑ์ž) ๊ฐ€ ์‹คํ–‰ ๋  ๊ฒฝ์šฐ์—๋งŒ ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ€๋Šฅ

- ์ค‘์ฒฉ ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ํ•„๋“œ,์ƒ์„ฑ์ž,๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ž๋ฐ”17๋ถ€ํ„ด ์ •์  ํ•„๋“œ, ์ •์  ๋ฉ”์†Œ๋“œ ์„ ์–ธ ๊ฐ€๋Šฅ)

- ๋กœ์ปฌ ํด๋ž˜์Šค ๋‚ด์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ๋ณ€์ˆ˜๋Š” (์ž๋ฐ”8 ์ดํ›„๋ถ€ํ„ฐ)์ž๋™์œผ๋กœ final ๋กœ ์„ ์–ธ

 

๋ฐ”๊นฅ๋ฉค๋ฒ„ ์ ‘๊ทผ

- ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ํด๋ž˜์Šค : ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค : ์ •์  ํด๋ž˜์Šค์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ๋ฐ”๊นฅ ํด๋ž˜์Šค ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ ์šฐํ•ด์„  this ๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค. ex) ๋ฐ”๊นฅํด๋ž˜์Šค.this -> ๋ฐ”๊นฅ ๊ฐ์ฒด

 

์ค‘์ฒฉ ์ธํ„ฐํŽ˜์ด์Šค

- ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ ์„ ์–ธ๋œ ์ธํ„ฐํŽ˜์ด์Šค

- ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

+ Recent posts