<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

์›๋ž˜๋Œ€๋กœ๋ผ๋ฉด ์„น์…˜ 4-2๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•˜์ง€๋งŒ... 4-1์„ ์ •๋ฆฌํ•˜๊ณ  velog์— ์žˆ๋˜ ๊ธ€๋“ค Tistory๋กœ ๋‹ค์‹œ ์˜ฎ๊ธฐ๋ฉด์„œ ๊ฐ•์˜ ๋‚ด์šฉ์ด ์ œ๋Œ€๋กœ ๊ธฐ์–ต๋‚˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ keep going~ 4-2๋Š” 8์›” ์ค‘์ˆœ์— ๋‹ค์‹œ ๋“ค์œผ๋ฉด์„œ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ•˜๊ณ  ์„น์…˜ 5 ๊ฐ•์˜ ๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•œ๋‹ค. ํžˆํžˆ. ์ทจ์—…์ด ์š”์ƒˆ ์ž˜ ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„ ์•ฝ๊ฐ„์˜ ๋‘๋ ค์›€์ด ์žˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!

 

 

 

๐Ÿงธ 




๐Ÿงธ ๊ตฌ์กฐํŒŒ์•… ๋ ˆ์ธ ๊ผฌ์šฐ- ๐Ÿงธ

    •  singleton
      ใ„ด class : SingletonService, SingletonTest, StatefulService, StatefulServiceTest, ConfigurationSingletonTest 
    • AppConfig

 


 

Q.  ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

A. ์‹ฑ๊ธ€ํ†ค์ด ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

โœ”๏ธ  SingletonTest

 

โ–บ pureContainer

์ˆœ์ˆ˜ ์ž๋ฐ”์ฝ”๋“œ๋กœ ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•œ๋‹ค.

 

MemberService memberService1 = appConfig.memberService();

MemberService memberService2 = appConfig.memberService();

 

AppConfig๋ฅผ ๋ณด๋ฉด MemberServiceํƒ€์ž…์˜ bean ์ด๋ฆ„์ด memberService ๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
appConfig.memberService๋Š” MemberService ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜๋ณตํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
memberService1์€ memberService๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. (์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ธฐ์‰ฝ๊ฒŒ ์ด๋ฆ„๋งŒ ๋Œ€์—ฌํ•ด์ฃผ๋Š” ๋Š๋‚Œ์ธ ๊ฒƒ ๊ฐ™๋‹ค...(?))

๊ฒฐ๋ก ์ ์œผ๋กœ memberService1์„ ํ†ตํ•ด MemberServiced ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋‹จ ์ด๋ ‡๊ฒŒ ์ดํ•ดํ•˜๊ธดํ•จ๐Ÿง

 

ํ˜„์žฌ ๋งŒ๋“  AppConfig๋Š” ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ, ๋งŽ์€ ๊ฐ์ฒด ์ƒ์„ฑ•์†Œ๋ฉธ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.

 

 

 

โ–ธ  ๊ฒฐ๊ณผ

 

๊ฐ ๊ฐ’์ด 6a472554์™€ 7ff2a664๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

 

••• ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

Assertions.assertThat(memberService1).isNotSameAs(memberService2);

 

assertThat(A).isNotSameAs(B)

: ๋Œ€์ƒ A์™€ ๋Œ€์ƒ B์˜ ์ฃผ์†Œ๊ฐ’์ด ๋‹ค๋ฅธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ

 

Q. assertThat(A).isEqualTo(B)์™€ assertThat(A).isSameAs(B)์™€ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?
A. isEqualTo๋Š” ๋Œ€์ƒ์˜ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜๊ณ  isSameAs๋Š” ๋Œ€์ƒ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

์˜ˆ์‹œ) isEqualTo
String A = "Hi";
String B = "Hi";

assertThat(A).isEqualTo(B);โ€‹



์˜ˆ์‹œ) isSameAs (==)

String A = "Hi";
String B = A;

assertThat(A).isSameAs(B);

 

 

 

 


 

 

 

โœ”๏ธ SingletonService

์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

 

private static final SingletonService instance = new SingletonService();

 

private

: ๋ณ€์ˆ˜๋ฅผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ํ•œ๋‹ค.

 

static

:  instance ๋ณ€์ˆ˜๊ฐ€ ํด๋ž˜์Šค ์ˆ˜์ค€์—์„œ ๊ด€๋ฆฌ๋˜๊ฒŒ ํ•˜๋ฉฐ, ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค.

 

final

: ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

 

 

Q. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์— static์€ ์™œ ์“ฐ๋Š”๊ฑธ๊นŒ? 

์ „์— ์ž๋ฐ”์™„์ „์ •๋ณต์—์„œ static์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ฐพ์•„๋ดค๋˜ ๊ฒƒ์ด ๊ธฐ์–ต๋‚œ๋‹ค. ๊ทธ๋•Œ๋Š” main ๋ฉ”์„œ๋“œ์— ๋“ค์–ด๊ฐ€ ์žˆ๋˜ ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ, ํ•˜์—ฌํŠผ ๊ธฐ์–ต์„ e๋˜์งš์–ด๋ณด์ž๋ฉด static์„ ์‚ฌ์šฉํ•ด์•ผ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ์—†์ด๋„ ํ˜ธ์ถœ์ด ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์–ด์„œ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.(์ •ํ™•ํ•˜์ง€ ์•Š์•„์„œ ๋ณต์Šต์ด ํ•„์š”ํ•˜๋‹ค) ๊ทธ๋Ÿฐ๋ฐ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์—๋Š” ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์งˆ ์•Š๋Š”๋‹ค.

 

A.  static์€ ์ธ์Šคํ„ด์Šค(๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ„ ๊ฐ์ฒด)๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ๋‹จ์ˆœํžˆ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ธ์Šคํ„ฐ์Šค๋ฅผ ์ƒ์„ฑ ํ›„ ๊ณต์œ ํ•ด ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ static์€ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ๋˜๋„๋ก ํ•˜๋ฉฐ, ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ (์‚ฌ์šฉ)ํ•˜๋„๋ก ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. private์™€ final์˜ ์—ญํ• ์€ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ํ•ด์ค€๋‹ค.

 

 

- ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด๊ณผ static์˜ ๊ด€๋ จ ์ถœ์ฒ˜

 

์‹ฑ๊ธ€ํ„ด ํŒจํ„ด( Singleton Pattern ) ๊ณผ static - Java ๋””์ž์ธ ํŒจํ„ด

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ž€? ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์€ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด static์€ ์ „์—ญ ๋ณ€์ˆ˜์™€ ๊ฐ™์•„ ๋ณด์ด๊ณ  ๊ฐ์ฒด ์ง€ํ–ฅ์ด ์•„๋‹ˆ๋ผ๋Š” ์ฃผ์žฅ์— ์ด๋Ÿฌํ•œ ๋น„ํŒ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋‚˜์™”๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ, ์–ด๋–ค

100100e.tistory.com

 

 

Q. ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค์˜ ์ฐจ์ด

A. ๊ฐ์ฒด๋Š” ์„ ์–ธ, ์ธ์Šคํ„ด์Šค๋Š” ์‹ค์ฒดํ™”๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์„ ๋•Œ, ์ธ์Šคํ„ด์Šค๋Š” ๊ทธ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ ค์กŒ์„ ๋•Œ๋ฅผ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํŠน๋ณ„ํ•œ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•œ๋‹ค. (์šฉ์–ด์˜ ์˜๋ฏธ๊ฐ€ ์กฐ๊ธˆ ๋‹ค๋ฅผ ๋ฟ, ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.)

Dog myDog = new Dog(); 
Dog anotherDog = new Dog();


์œ„์˜ ๋‘ ์ฝ”๋“œ์—์„œ myDog์™€ anotherDog๋Š” Dog ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ด์ž ์ธ์Šคํ„ด์Šค์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ๊ฐ์ฒด์ง€๋งŒ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

- ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค์˜ ์ฐจ์ด์  ์ถœ์ฒ˜

 

instance๋ž€?

์ธ์Šคํ„ด์Šค๋ž€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming)์—์„œ class์— ์†Œ์†๋œ ๊ฐœ๋ณ„์ ์ธ ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, user๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  hong์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ, hong์ด๋ผ๋Š” ๊ฐ์ฒด๋Š” user

velog.io

 

 

 

•••๊ทธ ๋‹ค์Œ ์ฝ”๋“œ •••

 

 

public static SingletonService getInstance() {
        return instance;
    }

 

 

SingletonService์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ , getInstance( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ ‘๊ทผํ•œ๋‹ค. 
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ static์œผ๋กœ ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ getInstance( )์ธ ๋“ฏ ํ•˜๋‹ค.

 

 

  private SingletonService() {

    }

 

์ƒ์„ฑ์ž

: ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ

 

 

Q. ์ƒ์„ฑ์ž๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์ธ๊ฐ€?

A. ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŠน์ˆ˜ ๋ชฉ์ ์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋กœ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌด์กฐ๊ฑด ํด๋ž˜์Šค๋‹น ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด์•ผํ•˜๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋๋Š”๋ฐ ๊ทธ์— ๋งž๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

	public Book() {	}                          // ๊ธฐ๋ณธ์ƒ์„ฑ์ž
	
	public Book(String title, int price) {    // ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ƒ์„ฑ์ž
		this.title = title;
		this.price = price;
	}

 

		Book b1 = new Book();                // ๊ฐ์ฒด์ƒ์„ฑ - ๊ธฐ๋ณธ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ
		Book b2 = new Book("๊ตญ์–ด์ฑ…", 3000);   // ๊ฐ์ฒด์ƒ์„ฑ - ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ƒ์„ฑ์ž ํ˜ธ์ถœ๋จ

 

 

 

- ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์„ค๋ช… ์ถœ์ฒ˜

 

[Java] ์ž๋ฐ” - ์ƒ์„ฑ์ž์˜ ๋ชฉ์ , ํŠน์ง•, ์‚ฌ์šฉ๋ฒ• (Constructor)

์ž๋ฐ” - ์ƒ์„ฑ์ž์˜ ๋ชฉ์ , ํŠน์ง•, ์‚ฌ์šฉ๋ฒ• 1. ์ƒ์„ฑ์ž์˜ ๋ชฉ์  ์ƒ์„ฑ์ž(Constructor)๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŠน์ˆ˜ ๋ชฉ์ ์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋กœ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 2. ์ƒ์„ฑ์ž์˜ ํŠน

kadosholy.tistory.com

 

 

 

 

Q. ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์˜ ์ƒ์„ฑ์ž๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์ธ๊ฐ€? ์™œ ์“ฐ๋Š”๊ฑธ๊นŒ?

A. ์œ„์˜ ์ƒ์„ฑ์ž๋Š” ๊ธฐ๋ณธ์ƒ์„ฑ์ž์™€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์ผ๋‹จ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” public์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š”๋ฐ, ์œ„์˜ ์ฝ”๋“œ๋Š” private๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ ๋ช…์‹œ์  ์ƒ์„ฑ์ž(๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š”)๋‹ค.  private๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

 

••• ์—ฐ๊ฒฐ๋œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํ™•์ธํ•˜๊ธฐ •••

 

 

โœ”๏ธ  SingletonTest

 

โ–บ singletonServiceTest

 

SingletonService singletonService1 = SingletonService.getInstance();
SingletonService singletonService2 = SingletonService.getInstance();

 

SingletonService์˜ ์ฝ”๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋„๋ก private ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  static, final, private๋กœ ์ธ์Šคํ„ด์Šค ๋ณ€๊ฒฝ์„ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด getInstance ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

getInstance( )๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜์—ฌ singletonService1๊ณผ singletonService2์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค ๋‚ด์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

โœ”๏ธ SingletonTest

 

โ–บ springContainer

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด DIP,OCP๋ฅผ ์œ„๋ฐ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”๊ตฌ๋‚˜ private ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์œ ์—ฐ์„ฑ๋„ ๋–จ์–ด์ง„๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

 

MemberService memberService1 = ac.getBean("memberService", MemberService.class);
MemberService memberService2 = ac.getBean("memberService", MemberService.class);

 

AppConfig์— ์ •์˜๋˜์–ด์žˆ๋Š” memberService๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋นˆ์„ MemberService ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋•Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ํŠน์„ฑ์— ์˜ํ•ด ๊ฐ™์€ ๋นˆ ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

 

 

 

๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  StatefulService

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฌด์ƒํƒœ๋กœ ์„ค๊ณ„ํ•ด์•ผํ•œ๋‹ค.

 

 

 

๐Ÿ‘๏ธ‍๐Ÿ—จ๏ธ ๋ฌธ์ œ์ 

 

์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ ํ˜น์€ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์€ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์™€ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์ผ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ฒ˜๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.

 

private int price; 

public void order(String name, int price) { 
	...
	this.price = price; 
}

 

์ฒซ๋ฒˆ์งธ ์ฃผ๋ฌธ์ž๊ฐ€ 2๋งŒ์›์„ ์ฃผ๋ฌธํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ ๋‘๋ฒˆ์งธ ์ฃผ๋ฌธ์ด 10๋งŒ์› ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด,
์ฒซ๋ฒˆ์งธ ์ฃผ๋ฌธ์ž์˜ ์ฃผ๋ฌธ๊ฐ€๊ฒฉ์ด 10๋งŒ์›์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๐Ÿ’ซ  ํ•ด๊ฒฐํ•ด๋ณด์ž

 

public int order(String name, int price) {
        ...
        return price;
    }

 

1. ๋ฌด์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์›๋ž˜ ์žˆ๋˜ this.price = price;๋ฅผ ์ง€์›Œ์ค€๋‹ค.
2. ๋ฆฌํ„ด๊ฐ’์„ ๋“ค์–ด์™”๋˜ ๊ฐ€๊ฒฉ์œผ๋กœ ๋‚˜๊ฐ€๋„๋ก return price;๋กœ ์ˆ˜์ •ํ•œ๋‹ค.

 

 

 


 

 

 

 

โœ”๏ธ  StatefulServiceTest

 

โ–บ TestConfig

 	@Bean
        public StatefulService statefulService() {
            return new StatefulService();
        }

 

@Bean์„ ์จ์„œ ๊ฐ„๋‹จํ•œ ์„ค์ • ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

	StatefulService statefulService1 = ac.getBean(StatefulService.class);
        StatefulService statefulService2 = ac.getBean(StatefulService.class);

 

statefulService1๊ณผ statefulService2์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด TestConfig์— ์žˆ๋Š” StatefulService๋กœ ๊ฐ€์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

	int userAprice = statefulService1.order("A", 2000);
        int userBprice = statefulService2.order("B", 1000);

 

StatefulService์˜ order ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 
์ˆœ์„œ๋Œ€๋กœ ๋‚ด๋ถ€์ƒํƒœํ•„๋“œ price์— ๊ฐ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์ด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

์ •์ƒ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค

 

 

 

 

 

 


 

๐ŸŒท

 

๊ฒฐ๋ก ์ ์œผ๋กœ AppConfig์— ๋ถ™์–ด์žˆ๋Š” @Configuration๊ณผ @Bean์„ ํ†ตํ•ด ๊ฐ ์ธ์Šคํ„ด์Šค์˜ ์‹ฑ๊ธ€ํ†ค์„ ๋ณด์žฅํ•ด์ค€๋‹ค.

๋งŒ์ผ @Configuration์ด ์—†๋‹ค๋ฉด AppConfig์˜ memberRepository๋Š” ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์€ ๋ฌด์ƒ(stateless)๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

+ Recent posts