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

 

์›๋ž˜๋Œ€๋กœ๋ผ๋ฉด ์„น์…˜ 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)๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

 

 

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋นˆ ์ด๋ฆ„๊ณผ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์ค€๋‹ค. Public๊ณผ ํ•จ๊ป˜ ์“ด ๊ฒƒ์€ ํƒ€์ž…๊ณผ ์ด๋ฆ„์ด ๋œ๋‹ค. ์˜ˆ์‹œ๋กœ public MemberService memberService( )์˜ ๊ฒฝ์šฐ MemberService๋Š” ํƒ€์ž…์ด ๋˜๊ณ  memberService๋Š” ๋นˆ์˜ ์ด๋ฆ„์ด ๋œ๋‹ค. return new์™€  ํ•จ๊ป˜ ์“ฐ์ด๋ฉด ๋นˆ ๊ฐ์ฒด๊ณผ ๋œ๋‹ค. ์˜ˆ๋กœ return MemberServiceImpl(memberRepository( ))์˜ ๊ฒฝ์šฐ MemberServiceImpl์ด ๋นˆ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—” ๋นˆ์ด ์ œ๋Œ€๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค.

 

 


 

[ โ—€๏ธŽ ]

 

 

[Spring] ๊น€์˜ํ•œ ๊ธฐ๋ณธํŽธ_ ์„น์…˜ 4. ๊ฐ์ฒด์ง€ํ–ฅ์›๋ฆฌ์ ์šฉ

์„น์…˜ 3. ์˜ˆ์ œ๋งŒ๋“ค๊ธฐ์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ตฌํ˜„์ฒด์˜ ์˜์กด์„ฑ์„ ์™„์ „ํžˆ ๋ฐฐ์ œํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„๊ฐ€ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ• 

post-this.tistory.com

 

 

 

 

 

๐Ÿงธ

์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”


 

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

test์— ์ด 3๊ฐ€์ง€์˜ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

  • beanfind
    ใ„ด ApplicationContextInfoTest, ApplicationContextBasicFindTest, ApplicationnContextExtendsFindTest
         , ApplicationContextSameBeanFindTest
  • beandefinition
    ใ„ด BeanDefinitionTest
  • xml
    ใ„ด XmlAppContext

 


 

โœ”๏ธ  beanfind_ApplicationContextInfoTest

 

โ–บ  findAllBean

: ๋‚ด๋ถ€์— ํฌํ•จ๋œ Bean์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

AnnotationConfigApplicationContext ac 
= new AnnotationConfigApplicationContext(AppConfig.class);

 

 

AnnotationConfigApplicationContext

: Bean์œผ๋กœ ์ง€์ •๋œ ๊ฐ์ฒด๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” context๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

 

ApplicationContext๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” AnnotationConfigApplicationContext์ด๋ฉฐ ํ˜„์žฌ ๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด๋‹ค. ์„น์…˜ 4 ๊ฐ•์˜์—์„œ AppConfig์— @Configuration๊ณผ @Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ์ •์˜ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ •์˜๋ฅผ ํ†ตํ•ด ๋นˆ์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ํ˜น์€ ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

 

 

ใ…ค- ApplicationContext ์„ค๋ช… ์ถœ์ฒ˜

 

[Spring] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(Application Context)์™€ ์Šคํ”„๋ง์˜ ์‹ฑ๊ธ€ํ†ค(Singleton)

์ด๋ฒˆ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(Application Context) [ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(Application Context)๋ž€? ] Spring์—์„œ๋Š” ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ๊ด€๊ณ„

mangkyu.tistory.com

 

 

 

- AnnotationConfigApplicationContext ์ถœ์ฒ˜

 

Bean ๊ฐ์ฒด๋“ค์˜ ๋งŒ๋‚จ์˜ ๊ด‘์žฅ : AnnotationConfigApplicationContext

AnnotationConfigApplicationContext AnnotationConfigApplicationContext ์€ Bean์œผ๋กœ ์ง€์ •๋œ ๊ฐ์ฒด๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” context ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. AnnotationConfigApplicationContext ์„ ํ†ตํ•ด ํ˜„์žฌ ์–ด๋–ค Bean ๊ฐ์ฒด๋“ค

jindevelopetravel0919.tistory.com

 

 

 

-  AnnotationConfigApplication  ์ถœ์ฒ˜

 

[Spring] AnnotationConfigApplicationContext์˜ ์—ญํ• ๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ•

Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ApplicationContext ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜๋กœ AnnotationConfigApplicationContext๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AnnotationConfigApplicationContext๋Š” Java ๊ธฐ๋ฐ˜์˜ ์„ค์ • ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ(Bean)

jjangadadcodingdiary.tistory.com

 

 

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์† AppConfig์˜ ๋นˆ์ด๋ฆ„๊ณผ ๋นˆ๊ฐ์ฒด

 

 

 

 

••• ์ด์–ด์„œ ๋‹ค์Œ ์ฝ”๋“œ •••

 

 

 

String[] beanDefinitionNames = ac.getBeanDefinitionNames();

 

 

getBeanDefinitionNames( )

: ํŒฉํ† ๋ฆฌ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  bean์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  @bean์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋“ฑ๋ก๋œ ์‹ฑ๊ธ€ํ†ค Bean์€ ๋ฌด์‹œํ•œ๋‹ค. ๋˜ํ•œ ๊ณ„์ธต๊ตฌ์กฐ๋„ ๋ฌด์‹œํ•œ๋‹ค. 

 

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

 

 

 

 

- getBeanDefinitionNames ์ •์˜ ์ถœ์ฒ˜

 

ListableBeanFactory (Spring Framework 6.1.11 API)

Extension of the BeanFactory interface to be implemented by bean factories that can enumerate all their bean instances, rather than attempting bean lookup by name one by one as requested by clients. BeanFactory implementations that preload all their bean d

docs.spring.io

 

 

 

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

 

 

for (String beanDefinitionName : beanDefinitionNames) {
            Object bean = ac.getBean(beanDefinitionName);
            System.out.println ("name = " + beanDefinitionName + "object = " + bean); }

 

 

getBean( );

: ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ bean์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

Object

: ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ž๋ฐ” ํด๋ž˜์Šค์— ๋”ฐ๋กœ extendsํ•˜์ง€ ์•Š์œผ๋ฉด java.lang.Object๋ฅผ ์ƒ์†ํ•œ๋‹ค. ํ•„๋“œ๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์œผ๋ฉฐ ๋ชจ๋“  ํƒ€์ž…์„ ๋‹ค ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

beanDefinitionNames๋Š” ๋ชจ๋“  ๋นˆ์„ ๋ฐ˜ํ™˜ ๋ฐ›์•„์˜จ ๋ฌธ์ž์—ด์ด๋‹ค. for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ beanDefinitionNames์— ๋“ค์–ด์žˆ๋Š” ๋นˆ ์ด๋ฆ„์„ beanDefinitionName ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ac.getBean์„ ์ด์šฉํ•˜์—ฌ ๋นˆ ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•˜๋ฉฐ ์ด๋•Œ bean์— ์ €์žฅ๋˜๋Š” ํƒ€์ž…์€ Object๋กœ ๋ชจ๋“  ํƒ€์ž…์„ ๋‹ค ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง ๋‚ด๋ถ€์— ์žˆ๋Š” ๋นˆ๊นŒ์ง€ ๋ชจ๋‘ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ž˜ <๊ฒฐ๊ณผ>๋ฅผ ๋ณด๋ฉด name์€ ๋นˆ์˜ ์ด๋ฆ„์ด ์ถœ๋ ฅ๋˜์—ˆ๊ณ  object๋Š” ์ง€์ •๋œ ํด๋ž˜์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค. ์ฆ‰ discountPolicy๋Š” hello.core.discount.RateDiscountPolicy์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

<๊ฒฐ๊ณผ>
name = discountPolicy
object = hello.core.discount.RateDiscountPolicy@246f8b8b

์š”๋”ด์‹์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.๐Ÿป

 

 

Q.๊ผญ beanDefinitionName ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์ค˜์•ผํ•˜๋Š”๊ฑด๊ฐ€? 

A.
๊ผญ ๊ทธ๋Ÿดํ•„์š”๋Š” ์—†๋‹ค. ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ฟ.

String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (int i = 0; i < beanDefinitionNames.length; i++) {
    String beanName = beanDefinitionNames[i];
    System.out.println("Bean Name " + (i + 1) + ": " + beanName);
}โ€‹

์ด๋Ÿฐ์‹์œผ๋กœ ๊ทธ๋ƒฅ ๋ณ€์ˆ˜์—†์ด ๋ฐ›์•„๋„ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ›์•„์˜จ ๊ฑธ beanName์— ์ €์žฅํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

Q.ac.getBean์—์„œ ac๋Š” ๊ผญ ๋ถ™์—ฌํ•˜๋Š”๊ฑธ๊นŒ? 

A.
getBean์€ApplicationContext์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ์ด๋‹ค.๊ทธ๋ ‡๊ธฐ์— ๊ด€๋ จ ApplicationContext์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ๋ ค๋ฉด ๋‚ด๊ฐ€ ์ง€์ •ํ•œ ๋ณ€์ˆ˜(ac)๋ฅผ ๊ผญ ๋ถ™์—ฌ์จ์•ผ ํ•œ๋‹ค.

 

 

 

 

- getBean ์ถœ์ฒ˜

 

BeanMap (Spring Framework 6.1.11 API)

Limit the properties reflected in the key set of the map to readable properties.

docs.spring.io

 

 

 

- Object ์ถœ์ฒ˜

 

2. Java ์ž๋ฐ” [API] - Object ํด๋ž˜์Šค, Object ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ 1

์ž๋ฐ”์˜ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ๋•Œ extends ํ‚ค์›Œ๋“œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์œผ๋ฉด ์•”์‹œ์ ์œผ๋กœ java.lang.Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋ฐ”์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object ํด๋ž˜์Šค์˜ ์ž์‹์ด๊ฑฐ๋‚˜ ์ž์† ํด

kephilab.tistory.com

 

 

 

 

 

โ–บ  findApplicationBean

: ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ bean ์ถœ๋ ฅํ•˜๊ธฐ.

 

 

for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
๋ชจ๋“  ๋นˆ์„ getBeanDefinitionNames๋กœ ๊ฐ€์ ธ์™”๋‹ค. ๊ทธ๋ฆฌ๊ณ  for์„ ํ†ตํ•ด ๋ชจ๋“  ๋นˆ์˜ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ getBeanDefinition์œผ๋กœ beanDefinition์— ์ €์žฅํ•  ๊ฒƒ์ด๋‹ค.

 

getBeanDefinition( );

: ํŠน์ • bean์˜ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

 

BeanDefinition

: ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ bean์˜ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

 

Q. ์œ„์˜ ์ฝ”๋“œ ์ค‘ getBean์—์„œ๋Š” Object๋ผ๋Š” ๊ฐ์ฒด ํƒ€์ž…์„ ์ ์—ˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ์™œ BeanDefinition์„ ์ ์„๊ฑธ๊นŒ?
getBean๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ์ธ๊ฑฐ ์•„๋‹Œ๊ฐ€? ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ bean์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ˆ. ๊ทธ๋Ÿฐ๋ฐ ์™œ ๋‹ค๋ฅด๊ฒŒ ์“ฐ๋Š”๊ฑธ๊นŒ?

A. getBean()๊ณผ getBeanDefinition( )์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค. getBean()์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ์˜ ์‹ค์ œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ (์‰ฝ๊ฒŒ ๋งํ•ด์„œ bean๊ณผ ์—ฐ๊ฒฐ๋œ ํด๋ž˜์Šค) Object ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— getBeanDefinition()์€ ํŠน์ • ๋นˆ์˜ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ ธ์˜จ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ์ •์˜ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ BeanDefinition์ด ๋˜๊ธฐ์— ๋นˆ์˜ ์ด๋ฆ„์ด ํ˜ธ์ถœ๋˜๋ฉด BeanDefinition ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ Object์™€ BeanDefinition์„ ์จ์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋ฉฐ BeanDefinition์€ ํ•˜๋‚˜์˜ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์ด ์•„๋‹ˆ๋‹ค.

 

 

Q. getBean( ) ๋ฉ”์„œ๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Object๋กœ ๋ฐ›๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์ผ๋ฐ˜์ ์œผ๋กœ Object๋กœ ๋ฐ›๋Š”๊ฐ€?

A. ๋นˆ์˜ ์‹ค์ œ ํƒ€์ž…์ด ๋ฌด์—‡์ด๋“ ์ง€ ์ƒ๊ด€์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Object๋กœ ๋ฐ›๋Š”๋‹ค. (์œ ์—ฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค)

 

 

 

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

 

 

if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name = " + beanDefinitionName 
                + "object = " + bean); }

 

 

getRole

: ํ•ด๋‹น ์—ญํ• ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ •์ˆ˜๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

ROLE_APPLICATION

: ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ(๋‚ด๊ฐ€ ๋งŒ๋“ ) ๋นˆ์ด๋‹ค. ์ •์ˆ˜๊ฐ’์€ 2

  • ROLE_SUPPORT : ์Šคํ”„๋ง ๋‚ด๋ถ€์—์„œ ์ง€์›ํ•˜๋Š” ์—ญํ• ์„ ๊ฐ€์ง„ ๋นˆ์ด๋‹ค. ์ •์ˆ˜๊ฐ’์€ 4
  • ROLE_INFRASTRUCTURE : ์Šคํ”„๋ง์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋Š” ๋นˆ์ด๋‹ค. ์ •์ˆ˜๊ฐ’์€ 8

 

for๋ฌธ์œผ๋กœ ๋ชจ๋“  ๋นˆ์˜ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™”๊ณ (beanDefinition), ๊ทธ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ if๋ฌธ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋นˆ์ธ์ง€ ์•„๋‹Œ์ง€ ๊ตฌ๋ถ„ํ•  ๊ฒƒ์ด๋‹ค. beanDefinition์— ์žˆ๋Š” ์ •๋ณด๋ฅผ getRole์„ ํ†ตํ•ด ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๊ทธ ์—ญํ• ์ด ROLE_APPLICATION์ธ์ง€ ํ™•์ธํ•˜์—ฌ ๋งž์œผ๋ฉด ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œBeanDefinition.ROLE_APPLICATION์œผ๋กœ ์“ด ์ด์œ ๋Š” ROLE_APPLICATION์ด BeanDefinition ํด๋ž˜์Šค ์•ˆ์— ์„ ์–ธ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์ ์–ด์•ผ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•œ๋‹ค.

beanDefinitionName(๋ชจ๋“  ๋นˆ์„ ๋ฐ˜ํ™˜๋˜์–ด ์ €์žฅํ•œ ๋ณ€์ˆ˜)์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋นˆ์„ ๊บผ๋‚ด Object ํƒ€์ž…์ธ bean์— ์ €์žฅํ•œ๋‹ค.

 

 

Q. ๋ฌด์กฐ๊ฑด getBean( )๊ณผ Object๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฐ›์•„์•ผ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๊ฐ€?
ใ…ค
A. ๊ทธ๋ ‡๋‹ค. ์‹ค์ œ ๋นˆ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์–ด์™€์•ผ๋งŒ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. getRole( )์€ ํ•ด๋‹น ์—ญํ• ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ ๋ฟ, ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ์‹ค์ œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” getBean( )์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. getBean(ํƒ€์ž…) ํ˜น์€ getBean(๋นˆ์ด๋ฆ„, ํƒ€์ž…)์„ ์ ์œผ๋ฉด ์กฐํšŒ๊ฐ€ ๋œ๋‹ค.

 

 

 

 

- getRole ์ถœ์ฒ˜

 

BeanDefinition (Spring Framework 6.1.11 API)

Return the current bean class name of this bean definition. Note that this does not have to be the actual class name used at runtime, in case of a child definition overriding/inheriting the class name from its parent. Also, this may just be the class that

docs.spring.io

 

 

 

- getRole์˜ ์ƒ์ˆ˜ ์ถœ์ฒ˜

 

BeanDefinition (Spring Framework 6.1.11 API)

Return the current bean class name of this bean definition. Note that this does not have to be the actual class name used at runtime, in case of a child definition overriding/inheriting the class name from its parent. Also, this may just be the class that

docs.spring.io

 

 

 

 

 


 

 

 

 

โœ”๏ธ  beanfind_ApplicationContextBasicFindTest

 

โ–บ  findBeanByName

: ๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒํ•˜๊ธฐ.

 

 

MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);

 

 

assertThat( ).isInstanceOf( )

: ํ•ด๋‹น ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

bean ์ด๋ฆ„ ์ค‘์—์„œ memberService์ด๋ฉฐ ํ•ด๋‹น ํƒ€์ž…์„ MemberService๋กœ ์ง€์ •ํ•œ ๋นˆ์„ MemberService(์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ)๊ฐ€์ง€๋ฉฐ ๋ณ€์ˆ˜ ์ด๋ฆ„์€ memberService์œผ๋กœ ๋ฐ›๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ MemberServiceimpl(๊ตฌ์ฒดํด๋ž˜์Šค)์ด memberService์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ๋น„๊ตํ•œ๋‹ค.

์ข€ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด, AppConfig์— ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฉ”์„œ๋“œ ๋ช…์„ ๊ฐ™์ด ์ ์—ˆ๊ณ  return ๊ฐ’์œผ๋กœ ๊ตฌ์ฒดํด๋ž˜์Šค๋ฅผ ์ ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ AppConfig์— ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌ์ฒดํด๋ž˜์Šค๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๊ณ  "memberService"๋ฅผ ์ ์–ด ์ด๋ฆ„์œผ๋กœ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

 

โ–บ  findBeanByNameX

: ๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒํ•˜์ง€ ์•Š๊ธฐ.

 

 

 assertThrows(NoSuchBeanDefinitionException.class,
                () -> ac.getBean("XXXX", MemberService.class));

 

 

assertThrows

: JUnit ๋˜๋Š” AssertJ์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐœ์ƒ๋œ ์˜ˆ์™ธ ํƒ€์ž…๊ณผ ์˜ˆ์ƒ๋˜๋Š” ์˜ˆ์™ธ ํƒ€์ž…์ด ์ผ์น˜ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋Š” ์„ฑ๊ณตํ•œ๋‹ค.

 

 

NoSuchBeanDefinitionException.class

: ์ •์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” Bean ์ธ์Šคํ„ด์Šค๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

() -> ๋žŒ๋‹ค์‹

: (๋งค๊ฐœ๋ณ€์ˆ˜)๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  -> ์‹œ์ž‘๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

 

-> (์‹œ์ž‘๋ถ€๋ถ„)์œผ๋กœ ๊ฐ€์„œ XXXX๊ฐ€ MemberService.class์˜ ํ•ด๋‹น ๋นˆ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด NoSuchBeanDefinitionException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

 

 

 

- assertThrows ์ถœ์ฒ˜

 

[Junit] Junit5 Exception Throw ํ…Œ์ŠคํŠธ

์ด ๊ธ€์€ ํ˜ผ์ž ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Junit4 Exception ํ…Œ์ŠคํŠธ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด ์‚ฌ์šฉ

small-stap.tistory.com

 

 

 

- NoSuchBeanDefinitionException ์ถœ์ฒ˜

 

NoSuchBeanDefinitionException (Spring Framework 6.1.11 API)

Return the required type of the missing bean, if it was a lookup by type that failed.

docs.spring.io

 

 

 

- ๋žŒ๋‹ค์‹ ์ถœ์ฒ˜

 

[Java/์ž๋ฐ”] ๋žŒ๋‹ค์‹(Lambda)์ด๋ž€? ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ๋ฒ•

๋žŒ๋‹ค์‹์ด๋ž€ ? ๋žŒ๋‹ค์‹์ด๋ž€ ์‰ฝ๊ฒŒ ๋งํ•ด ๋ฉ”์„œ๋“œ๋ฅผ "ํ•˜๋‚˜์˜ ์‹"์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ํ›จ์”ฌ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ๋ฐ˜ํ™˜๊ฐ’์ด ์—†์–ด์ง€๋ฏ€๋กœ "์ต๋ช…ํ•จ์ˆ˜

hstory0208.tistory.com

 

 

 

 

 


 

 

 

 

โœ”๏ธ  beanfind_ApplicationContextSameBeanFindTest

 

    @Configuration
    static class SameBeanConfig {
        @Bean
        public MemberRepository memberRepository1() {
            return new MemoryMemberRepository();
        }
        @Bean
        public MemberRepository memberRepository2() {
            return new MemoryMemberRepository();
        }
  }
AppConfig๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์‹ซ์œผ๋‹ˆ, ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ™์€ ๊ตฌ์ฒดํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‘๊ฐœ์˜ bean์„ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

โ–บ  findAllBeanByType

 

Map<String, MemberRepository> beansOfType =
	ac.getBeansOfType(MemberRepository.class);

 

 

getBeansOfType

: ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š”๋‹ค. Bean ์ด๋ฆ„์„ key๋กœ ๊ฐ์ฒด๋ฅผ value๋กœ ํ•˜๋Š” Map์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฃผ๋กœ ํŠน์ • ํƒ€์ž…์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋นˆ์ด ์žˆ์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

MemberRepository ํƒ€์ž…์— ์žˆ๋Š” ๋นˆ์„ getBeansOfType ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด key์™€ value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด String์— bean์˜ ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ€๊ณ  MemberRepository์— ์‹ค์ œ bean์˜ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ MemberRepository ํƒ€์ž…์— bean์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ BeansOfType ๋ณ€์ˆ˜์— ๋ชจ๋‘ ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

 

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

 

 

       for (String key : beansOfType.keySet()) {
            System.out.println("key = " + key + " value = " +
beansOfType.get(key));
        }

 

KeySet

: Map์˜ ๋ชจ๋“  key๋ฅผ ๊ฐ€์ ธ์™€ Set๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. for-each ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ , ๊ฐ key๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ value์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

beansOfType์— ์žˆ๋Š” ๋ชจ๋“  key(๋นˆ์˜ ์ด๋ฆ„)๋ฅผ ๊ฐ€์ ธ์™€ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ณ€์ˆ˜ key์— ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  get(key)๋ฅผ ํ†ตํ•ด ๊ทธ key(๋นˆ์˜ ์ด๋ฆ„)์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ beansOfType์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. ์—ฌ๊ธฐ์„œ beansOfType์€ key์™€ MemberRepository๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜๋ช…์œผ๋กœ, get(key)๋Š” ๋นˆ์˜ ์ด๋ฆ„์— ๋งž๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

 

 

 

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

 

 

  System.out.println("beansOfType = " + beansOfType);
        assertThat(beansOfType.size()).isEqualTo(2);
beansOfType์€ ๋ชจ๋“  bean์˜ ์ด๋ฆ„๊ณผ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, ๊ทธ๊ฒƒ์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•œ๋‹ค.  assertThat์„ ์ด์šฉํ•˜์—ฌ beansOfType์— ์žˆ๋Š” bean์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.

 

 

 

 

 

- getBeansOfType ์ถœ์ฒ˜

 

getBean์˜ NoSuchBeanDefinitionException ํšŒํ”ผํ•˜๊ธฐ

getBean์˜ NoSuchBeanDefinitionException ํšŒํ”ผํ•˜๊ธฐ

thecodinglog.github.io

 

 

 

- KeySet ์ถœ์ฒ˜

 

[Java] Map ์ „์ฒด ์ถœ๋ ฅ(entrySet, keySet, Iterator, Lambda, Stream)

๋ชฉ์ฐจ Map ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•1. entrySet()entrySet() ๋ฉ”์„œ๋“œ๋Š” Map์—์„œ ๋ชจ๋“  Entry(Key-Value ์Œ)๋ฅผ ๊ฐ€์ ธ์™€ Set ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. foreach ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ Entry์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘

tychejin.tistory.com

 

 

 

 


 

 

 

โœ”๏ธ XML

 

<bean id="memberService" class="hello.core.member.MemberServiceImpl">
         <constructor-arg name="memberRepository" ref="memberRepository" /> ์ฐธ์กฐ
</bean>
     
                                   ์‹ค์ œ ๊ตฌํ˜„ ๊ฐ์ฒด
<bean id="memberRepository" class="hello.core.member.MemoryMemberRepository" />

 

 

GenericXmlApplicatonContext

: ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์„ ์ฝ์–ด์™€ ๋กœ๋”ฉ ์‹œํ‚ค๊ณ , ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

 

 

- GenericXmlApplicationContext ์ถœ์ฒ˜

 

[SPRING]GenericXmlApplicationContext๋ž€? ์Šคํ”„๋ง ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•

์˜ค๋Š˜์€ ApplicationContext.xml ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , GenericXmlApplicationContextํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดํ•ด๋ฅผ ์‰ฝ๊ฒŒ

junghn.tistory.com

 

 

 

 


 

 

.

ํ˜ผ์ž ์ฒœ์ฒœํžˆ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์ ํ˜€์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ์•ˆํ•˜๊ณ  ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ€ ๋ชจ๋‘๋“ค ํ™”์ดํŒ…ํ•˜์„ธ์š” ๐Ÿ€

 

 

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

 

 

 

์„น์…˜ 3. ์˜ˆ์ œ๋งŒ๋“ค๊ธฐ์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ตฌํ˜„์ฒด์˜ ์˜์กด์„ฑ์„ ์™„์ „ํžˆ ๋ฐฐ์ œํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„๊ฐ€ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์˜€๋‹ค. ์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” ๊ทธ๋Ÿฐ ๋ถ€๋ถ„์„ ๋ฐ”๊พธ๋ฉฐ ์Šคํ”„๋ง์˜ ์–ด๋–ค ์ ์ด ํŽธ๋ฆฌํ•˜์—ฌ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์„ ํƒํ–ˆ์ง€๋Š” ์•Œ์•„๊ฐ€๋Š” ๊ฐ•์˜๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์–ด๋–ค ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ์˜์กด์ ์ด์ง€ ์•Š๋Š” ์ฝ”๋“œ์ธ์ง€ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

 

 

 


 

[ โ—€๏ธŽ ]

 

[Spring] ๊น€์˜ํ•œ ๊ธฐ๋ณธํŽธ_ ์„น์…˜ 3. ์˜ˆ์ œ๋งŒ๋“ค๊ธฐ

์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์˜ ๊ธฐ์ดˆ ํ‹€์„ ๋งŒ๋“œ๋Š” ๊ฐ•์˜์˜€๋‹ค. ์—ฌ๊ธฐ์—์„œ ์•Œ์•„๋‘˜ ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋‹ค. ํ˜„์žฌ ๊ฐ•์˜ ์‹œ์ ์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜์ง„

post-this.tistory.com

 

 

 

 

 

๐Ÿงธ 

์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”


 

 

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

  • member
    ใ„ด class : Member, MemberServiceImpl, MemoryMemberRepository
    ใ„ด interface : MemberService, MemberRepository
    ใ„ด enum : Grade
  • discount
    ใ„ด class : FixDiscountPolicy, RateDiscountPolicy
    ใ„ด interface : DiscountPolicy
  • order
    ใ„ด class : Order, OrderServiceimpl
    ใ„ด interface : OrderService
  • test
    main
    ใ„ด MemberApp, OrderApp
    test
    ใ„ด RateDiscountPolicyTest, MemberServiceTest
  • AppConfig

 


 

โœ”๏ธ  discount

    < ์กฐ๊ฑด >

  • ์„œ๋น„์Šค ์˜คํ”ˆ ์ง์ „์— ํ• ์ธ ์ •์ฑ…์„ ์ง€๊ธˆ์ฒ˜๋Ÿผ ๊ณ ์ • ๊ธˆ์•ก ํ• ์ธ์ด ์•„๋‹ˆ๋ผ ์ข€ ๋” ํ•ฉ๋ฆฌ์ ์ธ ์ฃผ๋ฌธ ๊ธˆ์•ก๋‹น ํ•  ์ธํ•˜๋Š” ์ •๋ฅ % ํ• ์ธ์œผ๋กœ ๋ณ€๊ฒฝ.
  • ๊ธฐ์กด ์ •์ฑ…์€ VIP๊ฐ€ 10000์›์„ ์ฃผ๋ฌธํ•˜๋“  20000์›์„ ์ฃผ๋ฌธํ•˜๋“  ํ•ญ์ƒ 1000์›์„ ํ• ์ธ.
  • ์ƒˆ๋กœ ๋‚˜์˜จ ์ •์ฑ…์€ 10%๋กœ ์ง€์ •ํ•ด๋‘๋ฉด ๊ณ ๊ฐ์ด 10000์› ์ฃผ๋ฌธ์‹œ 1000 ์›์„ ํ• ์ธํ•ด์ฃผ๊ณ , 20000์› ์ฃผ๋ฌธ์‹œ์— 2000์›์„ ํ• ์ธํ•ด์ฃผ๋Š” ๊ฑฐ์—์š”!

 

โ–บ RateDiscountPolicy

: ์ด ์ฃผ๋ฌธ ๊ธˆ์•ก์˜ 10% ํ• ์ธ ์ •์ฑ…

 

private int discountPercent =10;
.
.
    if (member.getGrade() == Grade.VIP) {
            return price * discountPercent / 100;
        }

 

์ •๋ฅ ํ• ์ธ์ •์ฑ…์ธ RateDiscountPolicy๋Š” DiscountPolicy ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์ธ DiscountPolicy์— ์†ํ•ด์žˆ๋Š” discount ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จ์‹œ์ผœ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. ๋ฉ”์„œ๋“œ discount๋ฅผ ์ œ๋Œ€๋กœ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  member์™€ price ๊ฐ’์ด ๋“ค์–ด์™€์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋“ค์–ด์˜จ member์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ Member๋ฅผ ํ†ตํ•ด getGradeํ•˜์—ฌ VIP์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๊ทธ ํ›„ ๋“ค์–ด์˜จ price๊ฐ’์„ ํ• ์ธ๋ฅ ์„ ๊ณ„์‚ฐํ•˜์—ฌ returnํ•œ๋‹ค.

 

 

 


 

 

โœ”๏ธ  Test

 

โ–บ RateDiscountTest

: % ํ• ์ธ ๊ด€๋ จ ํ…Œ์ŠคํŠธ 

 

 

ํ…Œ์ŠคํŠธ ๋งŒ๋“œ๋Š” ๋‹จ์ถ•๊ธฐ

mac : cmd + shift + T 

    @Test
    @DisplayName("VIP๋Š” 10% ํ• ์ธ์ด ์ ์šฉ๋˜์–ด์•ผํ•œ๋‹ค.")
    void vip_o() {

        Member member = new Member(1L, "memberVIP", Grade.VIP);

        int discount = discountPolicy.discount(member, 10000);
        
        assertThat(discount).isEqualTo(1000);

    }

 

 

@Test

: ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ์œ„์— ์„ ์–ธํ•ด์•ผ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด ๋œ๋‹ค.

 

 

assertThat(A).isEqualTo(B)

: A์™€ B์˜ ๊ฐ’์ด ๋งž๋Š”์ง€ ๋Œ€์ƒ ๋‚ด์šฉ ์ž์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” ํ…Œ์ŠคํŠธ๋‹ค.

 

 

@Test ํ•  ๋•Œ ์“ฐ๋Š” ๊ณต์‹

โžฐ  given (์‹คํ–‰๋‹จ๊ณ„) : ์–ด๋–ค ์กฐ๊ฑด์„ ์ฃผ๊ณ 
Member member = new Member(1L, "memberVIP", Grade.VIP);
โ–ป ID๋Š” 1L, ์ด๋ฆ„์€ memberVIP, ๋“ฑ๊ธ‰์€ VIP์ธ member๊ฐ€

โžฐ   when (์‹คํ–‰๋‹จ๊ณ„) : ์ƒํ™ฉ์ด ์–ด๋– ํ• ๋•Œ
int discount = discountPolicy.discount(member, 10000);
โ–ป ์ด ๊ธˆ์•ก ๋งŒ์›์„ ํ• ์ธ ์ •์ฑ…์— ๋„ฃ์—ˆ์„ ๋•Œ

โžฐ  then (๊ฒ€์ฆ๋‹จ๊ณ„) : ์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•œ๋‹ค.
assertThat(discount).isEqualTo(1000);
โ–ป ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ 1000์ด ๋˜์–ด์•ผํ•œ๋‹ค.

 

 

 

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

 

 

import static org.assertj.core.api.Assertions.*;

 

Assertions

: AssertJ์—์„œ ์ œ๊ณตํ•˜๋Š” API๋กœ ํ…Œ์ŠคํŠธ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

 

 

Assertions.assertThat(discount).isEqualTo(1000);

 

๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ฝ”๋“œ

mac: command + enter

assertThat(discount).isEqualTo(1000);

 

 

assertThat(A).isEqualTo(B)

: A์˜ ๊ฐ’์ด ๊ธฐ๋Œ“๊ฐ’ B์™€ ๊ฐ™์€์ง€ ํ™•์ธํ•ด์ฃผ๋Š” ์ฝ”๋“œ์ด๋‹ค.
ํ˜„์žฌ ์ฝ”๋“œ์—์„œ๋Š” discount์˜ ๊ฐ’๊ณผ 1000์˜ ๊ฐ’์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜๋Œ€๋กœ ๋‹ค๋ฅธ์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋Š” assertThat(A).isNotEqualTo(B)์ด ๋˜๊ฒ ๋‹ค.

 

 

 

- ๋‹ค์–‘ํ•œ assertThat()์˜ ์ •๋ณด๋ฅผ ์ œ๊ณต, ์ถœ์ฒ˜

 

[Spring] Junit5 Assertions, assertThat()

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

m42-orion.tistory.com

 

 

 

 


 

 

 

โœ”๏ธ  AppConfig

 

OCP์™€ DIP๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐํ•  ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

์ฆ‰, ํ™˜๊ฒฝ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•  ํด๋ž˜์Šค์ด๋‹ค. ๋ณดํ†ต Ioc์ปจํ…Œ์ด๋„ˆ ํ˜น์€ DI์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

Q. ์›๋ž˜ ๋ฌธ์ œ์ ์€?


A.  OrderServiceImpl์ด FixDiscountPolicy์— ์˜์กดํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

์ˆ˜์ • ์ „ ์ฝ”๋“œ

public class OrderServiceImpl implements OrderService {
     private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
 }

 

 

ํ• ์ธ ์ •์ฑ…์ด ๋‹ฌ๋ผ์ง€๋ฉด OrderServiceImpl ํด๋ž˜์Šค์— ๊ฐ€์„œ RateDiscounPolicy๋ฅผ ๋‹ค๋ฅธ ํ• ์ธ ์ •์ฑ… ํด๋ž˜์Šค๋กœ ๋งค๋ฒˆ ์ˆ˜์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

 

์ˆ˜์ • ํ›„ ์ฝ”๋“œ

public class OrderServiceImpl implements OrderService{

   private final MemberRepository memberRepository;
   private final DiscountPolicy discountPolicy;

   public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
       this.memberRepository = memberRepository;
       this.discountPolicy = discountPolicy;
   }
}

 

private

: ์„ ์–ธ๋œ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์•ˆํ•˜๋Š” ์ ‘๊ทผ์ œ์–ด์ž

 

final

: final์ด ๋ถ™์€ ๋ณ€์ˆ˜๋Š” ์ƒ์ˆ˜๊ฐ€ ๋˜์–ด, final์ด ๋ถ™์€ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

 

 

Q. ์™œ ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ private final๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์„ ์–ธํ•˜๋‚˜?

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

 

 

 

 

••• ์ด์–ด์„œ AppConfig ์ฝ”๋“œ ๋ถ€๋ถ„ •••

 

 

 

 

๋ฆฌํŒฉํ„ฐ๋ง ํ›„ ์ฝ”๋“œ

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }
.
.
.

    @Bean
    public DiscountPolicy discountPolicy() {
        return new RateDiscountPolicy();
    }

}

 

@Configuration

: ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜ or Bean์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ Bean์„ ๋“ฑ๋กํ•  ๋•Œ ์‹ฑ๊ธ€ํ†ค์ด ๋˜๋„๋ก ๋ณด์žฅํ•ด์ค€๋‹ค. ๋˜ ์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ์—์„œ Bean์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

 

 

@Bean

: Spring์˜ DI Container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” POJO(Plain Old Java Object)๋ฅผ Bean์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. @Bean์œผ๋กœ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•œ๋‹ค.

 

 

AppConfig์— ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž๋Š” ๊ตฌํ˜„์ฒด๋ฅผ returnํ•ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ์–ด๋–ค ํด๋ž˜์Šค์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ •์˜ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

MemberServiceImpl(๊ตฌํ˜„์ฒด)์€ MemberService(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ผญ ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ตฌํ˜„์ฒด ์† return ๊ฐ’์„ ๋ณด๋ฉด save์™€ findById๋กœ ์ฃผ๊ณ ์žˆ๋Š”๋ฐ, ํšŒ์›๊ฐ€์ž…์ด ๋œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ˜น์€ ์ €์žฅ์†Œ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ํšŒ์› ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด MemberRepository ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ •๋ฆฌํ•ด๋ณด๋ฉด MemberService(์ธํ„ฐํŽ˜์ด์Šค) - MemberServiceImpl(๊ตฌํ˜„์ฒด)   ->   MemberRepository(์ธํ„ฐํŽ˜์ด์Šค) - MemoryMemberRepository(๊ตฌํ˜„์ฒด)๋กœ MemberServiceImpl์ด save์™€ findById๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด MemberRepository ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐํ–ˆ๊ณ  ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” MemberServiceImpl์„ ์ƒ์†ํ•˜๊ณ  ์žˆ๊ธฐ์— ๊ตฌํ˜„์ฒด์™€ ๊ตฌํ˜„์ฒด๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ƒํ™ฉ์„ ๋ง‰์€ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ AppConfig๋ฅผ ๋‹ค์‹œ ๋ณด๋ฉด ๋ฉ”์„œ๋“œ memberService( )๋Š” MemberService ํƒ€์ž…์œผ๋กœ ๋นˆ์„ ๋“ฑ๋กํ–ˆ๊ณ  MemberServiceImpl๊ณผ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉฐ, ๊ทธ ์†์—์„œ save์™€ findById๋ฅผ ์ˆ˜ํ–‰์„ ์œ„ํ•ด MemberRepository๋ฅผ ์˜์กด์„ฑ์œผ๋กœ ๋ฐ›์•„ ํšŒ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

๊ทธ ์•„๋ž˜ DiscountPolicy๋ฅผ ๋ณด์ž. ์ „์˜ ๋ฌธ์ œ์ ์œผ๋กœ, OrderServiceImpl ํด๋ž˜์Šค์— ๋“ค์–ด๊ฐ€์„œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ”๋€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ํ–ˆ๋‹ค.(FixDiscountPolicy๋ฅผ RateDiscountPolicy๋กœ) ๊ทธ๋Ÿฐ๋ฐ AppConfig์—์„œ ์ •์˜ํ•˜๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋‹ˆ OrderServiceImpl์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ •์˜ํ•˜๊ณ  AppConfig์—์„œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋ฅผ ์—ฐ๊ฒฐ์ง€์–ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

- @Configuration ์ •๋ณด ์ถœ์ฒ˜

 

[Spring] @Configuration ๊ฐœ๋…๊ณผ ์žฅ์ 

๋”๋ณด๊ธฐ 1. @Configuration ์ด๋ž€? : @Configuration์ด๋ผ๊ณ  ํ•˜๋ฉด ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜ or Bean์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค. ๋”๋ณด๊ธฐ 2. @Configuration์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ญ๊ฐ€ ์ข‹์€๋ฐ? : @Configuration ์• 

castleone.tistory.com

 

 

 

- @Bean์— ๊ด€๋ จํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ์ถœ์ฒ˜

 

[Spring] ๋นˆ ๋“ฑ๋ก์„ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ @Bean, @Configuration, @Component ์ฐจ์ด ๋ฐ ๋น„๊ต - (1/2)

๊ธฐ์กด์˜ Spring MVC์—์„œ๋Š” xml์„ ํ™œ์šฉํ•˜์—ฌ Bean์„ ๋“ฑ๋กํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋Š” ์š”์†Œ๋“ค์„ xml์— ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ด ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กœ์›Œ ์ ธ์„œ ์–ด๋…ธํ…Œ์ด์…˜(Annotation, @)๋ฅผ ํ™œ

mangkyu.tistory.com

 

 

 

 

โœ”๏ธ  MemberServiceTest

์„น์…˜ 3์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •ํ•˜๊ธฐ.

 

     @BeforeEach
     public void beforeEach() {
         AppConfig appConfig = new AppConfig();
         memberService = appConfig.memberService();
     }

 

@BeforeEach

: ํ…Œ์ŠคํŠธ๊ฐ€ ๋ณต์žกํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplate ๊ฐ€ ๋ถ™์€ ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „์— ์‹คํ–‰๋œ๋‹ค.

 

ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์‚ฌ์šฉํ•  MemberService๋ฅผ ์„ ์–ธํ•˜๊ณ  ํ…Œ์ŠคํŠธ์— ๋“ค์–ด๊ฐ„๋‹ค. AppConfig์— ์ •์˜๋˜์–ด์žˆ๋Š” memberService ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด AppConfig๋ฅผ ์ •์˜ํ•ด์คฌ๋‹ค. ๊ทธ๋ฆฌ๊ณ  memberService(์ธํ„ฐํŽ˜์ด์Šค)์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์˜ค๊ธฐ ์œ„ํ•ด์„œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค€๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ํ›„์— ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด์— ๋งž์ถฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

- @BeforeEach ์ถœ์ฒ˜

 

[Spring] @Before @BeforeClass @BeforeEach @BeforeAll

@Before @BeforeClass @BeforeEach @BeforeAll Spring ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ „์— ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•˜

bcp0109.tistory.com

 

 

 

 


 

 

 

โœ”๏ธ  OrderApp

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ

 

 

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);

 

AnnotationConfigApplicationContext

: java ๊ธฐ๋ฐ˜์˜ ์„ค์ •ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Bean ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

 

AnnotationConfigApplicationContext์— ํ•ด๋‹น ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ Bean์ด ๋“ค์–ด์žˆ๋Š” ์„ค์ •ํด๋ž˜์Šค๋ฅผ ๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์–ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Bean์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.(@Bean์ด ๋ถ™์–ด์žˆ๋Š” ๊ฒƒ๋“ค์„ ๊ด€๋ฆฌํ•จ) ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ทธ ์•„๋ž˜ ์ค„์— ์žˆ๋Š” ์ฝ”๋“œ์ฒ˜๋Ÿผ getBean์„ ํ†ตํ•ด ์„ค์ •ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค. (๋งŒ์•ฝ @Bean์ด ์—†๋‹ค๋ฉด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค)

์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ์•„๋ณด์ž. ์„ค์ • ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์—ˆ์–ด๋„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์„ค์ •ํด๋ž˜์Šค ์† ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— "memberService"์™€ "orderService"์ธ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ ์–ด getBean์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋‹ค.

๋งจ ์•ž์— MemberService์™€ OrderService๊ฐ€ ๋ถ™์–ด์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํ˜„์žฌ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ๋‚ด์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๊ฐ๊ฐ memberService, orderService๋ฅผ ๋ถ™์—ฌ์คฌ๋Š”๋ฐ ๊ทธ ์ด๋ฆ„๋“ค์˜ (๊ฐ€์ ธ์˜ฌ) ํƒ€์ž…์„ ์•ž์— ์ •์˜ํ•œ ๊ฒƒ์ด MemberService์™€ OrderService๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ ํƒ€์ž…์˜ ๋งž๊ฒŒ ์ •์˜๋œ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜จ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋’ค์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค. MemberService.class์™€ OrderService.class์™€ ๊ฐ™์ด ๋ง์ด๋‹ค. ๋งŒ์ผ  memberService ๋ฉ”์„œ๋“œ๋ฅผ ์„ค์ •ํด๋ž˜์Šค ๋‚ด์— MemberService.class๋กœ ์ง€์ •์„ ํ•ด๋†จ๋Š”๋ฐ ํ…Œ์ŠคํŠธ์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋ฐ”๊ฟ€ ๊ฒฝ์šฐ ์‹ค์ œ ๋นˆ๊ณผ ๊ธฐ๋Œ€ํ•œ ๋นˆ์˜ ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒฐ๊ณผ ๊ฐ’์ด ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  .class๋Š” ์•Œ๋งž๊ฒŒ ์ ์–ด๋†จ์ง€๋งŒ ๋งจ ์•ž์— MemberService์™€ OrderService๋ฅผ ๋‹ค๋ฅธ ํƒ€์ž…์„ ์ ์„ ๊ฒฝ์šฐ์—๋„ ํƒ€์ž…์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.

 

 

 

 

- ApplicationContext ์ถœ์ฒ˜

 

[Spring] ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(ApplicationContext)

ApplicationContext๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค.(์ •ํ™•ํžˆ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถ€๋ฅผ ๋•Œ, BeanFactory, ApplicationContext๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ๋งํ•˜์ง€๋งŒ, BeanFactory๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค.)

velog.io

 

 

 

 


 

 

[ โ–ถ๏ธŽ ]

 

 

 

[Spring] ๊น€์˜ํ•œ ๊ธฐ๋ณธํŽธ_ ์„น์…˜ 5. ์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ์™€์Šคํ”„๋ง๋นˆ

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋นˆ ์ด๋ฆ„๊ณผ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์ค€๋‹ค. Public๊ณผ ํ•จ๊ป˜ ์“ด ๊ฒƒ์€ ํƒ€์ž…๊ณผ ์ด๋ฆ„์ด ๋œ๋‹ค. ์˜ˆ์‹œ๋กœ public MemberService memberService( )์˜ ๊ฒฝ์šฐ MemberService๋Š” ํƒ€

post-this.tistory.com

 

 

 

 

ํ˜ผ์ž ์ฒœ์ฒœํžˆ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์ ํ˜€์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ์•ˆํ•˜๊ณ  ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ€ ๋ชจ๋‘๋“ค ํ™”์ดํŒ…ํ•˜์„ธ์š” ๐Ÿ€

 

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

 

์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์˜ ๊ธฐ์ดˆ ํ‹€์„ ๋งŒ๋“œ๋Š” ๊ฐ•์˜์˜€๋‹ค. ์—ฌ๊ธฐ์—์„œ ์•Œ์•„๋‘˜ ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋‹ค. ํ˜„์žฌ ๊ฐ•์˜ ์‹œ์ ์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜์ง„ ๋ชปํ–ˆ๋Š”๋ฐ, ๊ทธ ๋ฌธ์ œ์ ์„ ํ†ตํ•ด ์ถ”ํ›„ ์–ด๋–ค ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•˜๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด์˜ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ •๋ฆฝํ•ด์•ผํ• ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๊ฐ•์˜๊ฐ€ ์ด๋ค„์ง„๋‹ค. ์–ด์จŒ๋“  ํ˜„์žฌ ์‹œ์ ์—์„  ํ”„๋กœ์ ํŠธ์˜ ํ‹€์„ ์–ด๋–ค์‹์œผ๋กœ ์งœ์•ผํ•˜๋ฉฐ enum, interface, class๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์™œ ์žˆ๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

๐Ÿงธ

์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ์ ์—ˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

 


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

โœ”๏ธ   ์ด ์„ธ๊ฐ€์ง€์˜ package๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

  • member
    ใ„ด class : Member, MemberServiceImpl, MemoryMemberRepository
    ใ„ด interface : MemberService, MemberRepository
    ใ„ด enum : Grade
  • discount
    ใ„ด class : FixDiscountPolicy
    ใ„ด interface : DiscountPolicy
  • order
    ใ„ด class : Order, OrderServiceimpl
    ใ„ด interface : OrderService

 


โœ”๏ธ  member

โ–บ  Member

ํšŒ์›์ €์žฅ์†Œ ๊ด€๋ฆฌ

 

 

GetterSetter(public)

: private ๊ฐ’์„ ์™ธ๋ถ€๋กœ ๋นผ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

 

id, name, grade์ธ ์ด 3๊ฐ€์ง€ private ์ •๋ณด๋ฅผ ๋„ฃ์—ˆ๋‹ค.

 

 

- GetterSetter ์ถœ์ฒ˜ 

 

[OOP] Getter์™€ Setter๋Š” ์ง€์–‘ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค

๋ชฉ์ฐจ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์–ผ๋งˆ ์ „ ์‚ฌ๋‚ด์—์„œ Getter์™€ Setter๋ฅผ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์„ธ๋ฏธ๋‚˜๊ฐ€ ์žˆ์—ˆ๋‹ค. Setter์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์›Œ๋‚™ ๋งŽ์ด ์•Œ๋ ค์ ธ์žˆ์—ˆ์ง€๋งŒ Getter์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์ž˜ ํ•˜์ง€ ์•Š

colabear754.tistory.com

 

 

 

 

โ–บ MemoryMemberRepository

ํšŒ์›์ •๋ณด๋ฅผ store์— ์ €์žฅํ•˜๋Š” ํšŒ์›์ €์žฅ์†Œ

 

 public void save(Member member) {
        store.put(member.getId(), member);
    }

 

save๋ผ๋Š” ๋ฉ”์„œ๋“œ๋Š” Member ํด๋ž˜์Šค์— ์ •์˜ํ•œ ๊ฐ์ฒด๋ฅผ ๋”ฐ๋ฅด๋ฉฐ Member์— ์žˆ๋Š” getter๋ฅผ ํ†ตํ•ด id ๊ฐ’์„ ์–ป๊ณ  ๊ทธ id ๊ฐ’์„ store์— put ํ•˜๊ฒ ๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— save ์•ž์— void๋ฅผ ๋ถ™์—ฌ์ค€ ๊ฒƒ์ด๋‹ค. ๋ฐ˜ํ™˜ํ•˜๋Š” ํƒ€์ž…์— void๋ฅผ ๋ถ™์—ฌ ํ˜ธ์ถœํ•œ ์ชฝ์— ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ช…์‹œํ•œ ๊ฒƒ์ด๋‹ค. (ํ˜ธ์ถœ ์ชฝ์€ ๋„ฃ์–ด๋‹ฌ๋ผ ํ–ˆ์œผ๋‹ˆ ๋„ฃ์œผ๋ฉด ๋์ธ ๊ฒƒ์ด๋‹ค.)

 

 

 

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

 

 

  public Member findById(Long memberId) {
        return store.get(memberId);
    }

 

findById

: id๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

id๋Š” Member ํด๋ž˜์Šค์— private Long id;๋ผ๊ณ  ์„ ์–ธ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Map<Long, Member>๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ  store์—์„œ id๋ฅผ ์ฐพ์„ ๋•Œ๋„ Long ํƒ€์ž…์œผ๋กœ ์ ์€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด findById ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ฐพ์€ id๋Š” Member ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

 

Q. findById์™€ getById์™€์˜ ์ฐจ์ด์ ์€?

A. ํ˜„์žฌ inteliJ์—์„œ getById๋ณด๋‹ค getReferenceById๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์œ ํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ getReferenceById๋Š” findById์™€ ๋‹ค๋ฅด๊ฒŒ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ null์ด ์•„๋‹Œ EntityNotFoundException ์˜ˆ์™ธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.

 

 

Q. Member member์˜ Member์™€ Long memberId์˜ Long, ์™œ ํƒ€์ž…์ด ๋‹ค๋ฅธ๊ฐ€?

A. ๊ณ ๊ฐ์ด ์žˆ๋‹ค. ๊ณ ๊ฐ์˜ ์ •๋ณด๋Š” ์ด ์„ธ๊ฐ€์ง€์ธ id, name, grade๊ฐ€ ๋œ๋‹ค. ์ด ์ค‘์— ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์€ id ๋ฟ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ณ ๊ฐ์˜ ์ •๋ณด๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ id๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Member ๊ฐ์ฒด ์† id ํ•„๋“œ๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— memberId ์•ž์—” Long ํƒ€์ž…์œผ๋กœ ์ ์–ด์ค€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  id๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ์˜ ์ •๋ณด๋ฅผ ์ฐพ์•„์˜ค๋ฉด ๊ทธ ์†์— name๊ณผ grade๋„ ํฌํ•จ๋˜์–ด ์žˆ๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Member ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

- findById์™€ getById์˜ ์ฐจ์ด ์ถœ์ฒ˜

 

220905 TIL getById() vs findById()

๊ธˆ์š”์ผ ์ฝ”๋”ฉ ์ธํ„ฐ๋ทฐ ์‹œ๊ฐ„์— ๋ฐ›์•˜๋˜ ์งˆ๋ฌธ ์ค‘ ์ œ๋Œ€๋กœ ๋Œ€๋‹ตํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์งˆ๋ฌธ์ธ findById์™€ getById์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ดค๋‹ค. getById ์šฐ์„  getById()๋Š” Spring Data JPA 2.7.2๋ถ€ํ„ฐ Deprecated ๋˜๊ณ  getReferenceById()๋กœ ๋ณ€๊ฒฝ์ด

seungjjun.tistory.com

 

 

 

 

 

โ–บ MemberServiceImpl

ํšŒ์›๊ฐ€์ž…๊ณผ ํšŒ์›์กฐํšŒ ํ•œ๋‹ค. (ํšŒ์›์„œ๋น„์Šค์ œ๊ณต)

 

 

[ํ…Œ์ŠคํŠธ ํ•  ๋•Œ]

// ํ…Œ์ŠคํŠธ MemberServiceTest 
MemberService memberService = new MemberServiceImpl();
...
์œ„์˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ํšŒ์›์ •๋ณด๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

MemberServiceImpl ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. MemberServiceImpl ํด๋ž˜์Šค๋Š” MemberService๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ MemberServiceImpl์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ MemberService์ธ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•œ ์ด์œ ๋Š” ๋‹คํ˜•์„ฑ์„ ์œ„ํ•จ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ค ๊ตฌํ˜„์ฒด์™€ ์—ฐ๊ด€๋˜์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. 

MemberServiceImpl memberServiceImpl = new MemberServiceImpl( );์€ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. ์™œ๋ƒํ•˜๋ฉด MemberServiceImpl์— ์†ํ•ด์žˆ๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์ด์šฉ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํƒ€์ž…์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋‹ค๋ฅธ ๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ์—ฌ๋„ ๋™์ž‘ ๋ฐฉ์‹์ด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜์—๋„ ์ข‹๋‹ค.

 

 

// MemberServiceImpl ํด๋ž˜์Šค

private final MemberRepository memberRepository = new MemoryMemberRepository();

  @Override
    public void join(Member member) {
        memberRepository.save(member);
    }
...

 

MemoryMemberRepository(ํšŒ์›์ €์žฅ์†Œ)์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ์›ํ• ํ•˜๊ฒŒ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด
'private final MemberRepository memberRepository = new MemoryMemberRepository();' ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

์•„๊นŒ test ์ฝ”๋“œ์—์„œ ๋ณธ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํƒ€์ž… ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์— ์—ฐ๊ฒฐํ•  ๊ตฌํ˜„์ฒด๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. ํ›„์— ๋ฐฐ์šฐ๊ฒ ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์“ฐ๋Š” ๋ฐฉ์‹์ด ๋งž๋Š” ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค. ๋งŒ์ผ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์„ ์–ธ๋˜์–ด์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—(์˜์กด์„ฑ ๋ฌธ์ œ) ์ด ๋ฐฉ์‹์€ ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ˜„์žฌ ์ฝ”๋“œ์—์„œ final์ด ๋ถ™์–ด์žˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์„ ์–ธ๋œ ๊ตฌํ˜„์ฒด์ธ MemoryMemberRepository๋ฅผ ๋‹ค๋ฅธ ๊ตฌํ˜„ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ์ด๋‹ค. (๋‚ด๋ถ€ ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค)

memberRepository์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ํšŒ์›๊ฐ€์ž…์ด ๋˜๋„๋กํ•œ๋‹ค.

 

 

 

 

 


 

 

 

โœ”๏ธ  discount

     < ์กฐ๊ฑด >

  • ํ• ์ธ ์ •์ฑ…์€ ๋ชจ๋“  VIP๋Š” 1000์›์„ ํ• ์ธํ•ด์ฃผ๋Š” ๊ณ ์ • ๊ธˆ์•ก ํ• ์ธ์„ ์ ์šฉํ•ด๋‹ฌ๋ผ. (๋‚˜์ค‘์— ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋‹ค.)
  • ํ• ์ธ ์ •์ฑ…์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ํšŒ์‚ฌ์˜ ๊ธฐ๋ณธ ํ• ์ธ ์ •์ฑ…์„ ์•„์ง ์ •ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , ์˜คํ”ˆ ์ง์ „๊นŒ์ง€ ๊ณ ๋ฏผ์„ ๋ฏธ๋ฃจ๊ณ  ์‹ถ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ ํ• ์ธ์„ ์ ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ๋„ ์žˆ๋‹ค. (๋ฏธํ™•์ •)

 

โ–บ DiscountPolicy

: ์ผ๋ฐ˜(?) ํ• ์ธ ์ •์ฑ…

ํ™•์ •๋œ ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜๋งŒ ํ•ด์ค€๋‹ค.

 

 

โ–บ FixDiscountPolicy 

 : VIP๋Š” 1000์› ํ• ์ธ ์ •์ฑ…

 

private int discountFixAmount = 1000;
ํ• ์ธํ•  ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋”ฐ๋กœ 1000์›์„ ์„ ์–ธํ•œ๋‹ค.

 

if (member.getGrade() == Grade.VIP) {
            return discountFixAmount;
discount ๋ฉ”์„œ๋“œ๋Š” Member์™€ price๋ฅผ ๋ฐ›๋Š”๋‹ค.(Member member, int price) ๊ทธ๋ ‡๊ฒŒ Member ํด๋ž˜์Šค์— ์žˆ๋Š” getGrade๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋“ฑ๊ธ‰์ด VIP์ด๋ฉด discountFixAmount๋ฅผ ๋ฆฌํ„ดํ•˜์—ฌ ๊ฐ€๊ฒฉ์˜ 1000์›์„ ํ• ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

 

 

 


 

โœ”๏ธ  order

 

โ–บ Order

: ๊ณ ๊ฐ์˜ ์ฃผ๋ฌธ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ตœ์ข… ๊ธˆ์•ก ๊ณ„์‚ฐ

 

public Order(Long memberId, String itemName, int itemPrice ,int discountPrice) {
        this.memberId = memberId;
        this.itemPrice = itemPrice;
        this.itemName = itemName;
        this.discountPrice = discountPrice;
    }

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์ธ์ž๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ์ธ์ž๋ฅผ ๋ฐ›์•„ ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด Order ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค. 

์ธ์ž์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์œ„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜(memberId, itemName ๋“ฑ) ์•ˆ์— ๊ตฌ์ฒด์ ์ธ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ๋œ๋‹ค. ๊ทธ๊ฒƒ์„ ์ธ์ž๋ผ๊ณ  ํ•˜๋Š”๋ฐ

 

 

 

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

 

 

public Long getmemberId() {
	return memberId;
}

public String getItemName() {
	return itemName;
    }
getter๋ฅผ ์ด์šฉํ•˜์—ฌ memberId์™€ ItemName์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” Order ํด๋ž˜์Šค์—์„œ ๋ณ€์ˆ˜๋ฅผ private์œผ๋กœ ์ •์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Order ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ฐ์ฒด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์œผ๋ฉด getter๋ฅผ ํ†ตํ•ด์•ผํ•œ๋‹ค. 

๋งŒ์•ฝ getter๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด, ์•ž์—์„œ ๋ดค๋“ฏ์ด order.getmemberId();๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.

 

 

 

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

 

 

public String toString() {
        return "Order{" +
                "memberId=" + memberId +
                ", itemName='" + itemName + '\'' +
                ", itemPrice=" + itemPrice +
                ", discountPrice=" + discountPrice +
                '}';
    }
toString์€ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

 

 

 

Q. ๋งŒ์•ฝ toString์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅ์ด ๋ ๊นŒ?

 

Order order = new Order(1L, "Laptop", 1000, 100);
System.out.println(order);โ€‹

 

A. ์˜ˆ์ œ๋กœ chat-GPT๊ฐ€ ๋งŒ๋“ค์–ด์คฌ๋‹ค. ์ถœ๋ ฅ๊ฒฐ๊ณผ๋Š” [ Order@5e2de80c ] ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
์ฆ‰, toString์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด memberId,itemname,itemprice,discountprice๊ฐ€ ์ญˆ์šฑ- ์ถœ๋ ฅ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ’์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

โ–บ OrderServiceImpl

: ์ฃผ๋ฌธ ๊ณ ๊ฐ์„ ํ™•์ธํ•˜์—ฌ ๋“ฑ๊ธ‰์— ๋งž๋Š” ํ• ์ธ์ •์ฑ…์„ ์ ์šฉ ํ•œ๋‹ค.

 

    private final MemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
์ฃผ๋ฌธ ๊ณ ๊ฐ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ณ , ๊ทธ์— ๋งž๋Š” ํ• ์ธ ์ •์ฑ…์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋ฅผ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋กœ ๋ฐ”๊พธ๋Š” ๊ฑธ ์™ธ๋ถ€์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก final๋กœ ์ •์˜ํ–ˆ๋‹ค.

 

 

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

 

 

 @Override
     public Order createOrder(Long memberId, String itemName, int itemPrice) {
         Member member = memberRepository.findById(memberId);
         int discountPrice = discountPolicy.discount(member, itemPrice);
         return new Order(memberId, itemName, itemPrice, discountPrice);
}
createOrder๋ผ๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜ํƒ€์ž…์€ Order๊ฐ€ ๋œ๋‹ค. ์ด๊ฑธ ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ OrderServiceTest๋ฅผ ๋ณด๋ฉด Order order = orderService.createOrder(memberId, "itemA", 10000);์ด๋ž€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.

์ธ์ž๊ฐ€ createOrder๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋งž์ถฐ ๋“ค์–ด์˜ค๊ณ  memberId๋Š” memberRepository๋กœ ๋“ค์–ด๊ฐ€ ํšŒ์› ์ •๋ณด๋ฅผ ์ฐพ๋Š”๋‹ค.(ํšŒ์›์ •๋ณด ์ฐพ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ํšŒ์› ๋“ฑ๊ธ‰, ํšŒ์› ์ด๋ฆ„ ๋“ฑ์„ ์•Œ์•˜์„ ๊ฒƒ์ด๋‹ค.) ๊ทธ๋ฆฌ๊ณ  ์–ป์–ด๋‚ธ ํšŒ์› ์ •๋ณด(member)์™€ ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ๊ฐ€์ง€๊ณ  discountPolicy์— ์žˆ๋Š” discount ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•˜๋ฉด ํšŒ์› ๋“ฑ๊ธ‰์ด VIP์ธ ๊ฒฝ์šฐ 1000์›์„ ํ• ์ธํ•˜๋ผ๋Š” ์ฝ”๋“œ์— ๋งž์ถฐ discountFixAmount๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ 1000์›์ด๋ž€ ๊ฐ’์„ ํ• ์ธํ•œ๋‹ค๋Š” ์ •๋ณด๊ฐ€ discountPrice์— ์ €์žฅ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ Order(์ฃผ๋ฌธ์„ ๋ฐ›์•„ ์ตœ์ข… ๊ณ„์‚ฐํ•˜๋Š” ํด๋ž˜์Šค)์—์„œ ์š”๊ตฌํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋งž๋Š” ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋‹ค์‹œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋กœ ๊ฐ€๊ฒ ๋‹ค. Assertions.assertThat(order.getDiscountPrice( )).isEqualTo(1000);์ด ์žˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” getDiscountPrice๊ฐ€ 1000์›์ด๋ž‘ ๋™์ผํ•œ์ง€์— ๋Œ€ํ•ด ๋ฌป๋Š” ์ฝ”๋“œ์ธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์•„๊นŒ ์œ„์— ์žˆ๋˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ Order์— ์žˆ๋Š” ๊ฐ์ฒด ์ •๋ณด๋“ค์„ order์— ๋„ฃ๊ณ  Order ํด๋ž˜์Šค์— ์žˆ๋Š” getDiscountPrice ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’ private์œผ๋กœ ์„ ์–ธ๋œ ํ• ์ธ ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.  ๊ทธ๋ ‡๊ฒŒ 1000์›์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ๋œ ๊ฒƒ์ด๋‹ค.

 

 

[ โ–ถ๏ธŽ ]

 

 

[Spring] ๊น€์˜ํ•œ ๊ธฐ๋ณธํŽธ_ ์„น์…˜ 4. ๊ฐ์ฒด์ง€ํ–ฅ์›๋ฆฌ์ ์šฉ

์„น์…˜ 3. ์˜ˆ์ œ๋งŒ๋“ค๊ธฐ์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ตฌํ˜„์ฒด์˜ ์˜์กด์„ฑ์„ ์™„์ „ํžˆ ๋ฐฐ์ œํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„๊ฐ€ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ• 

post-this.tistory.com

 

 

 

 

ํ˜ผ์ž ์ฒœ์ฒœํžˆ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์ ํ˜€์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ์•ˆํ•˜๊ณ  ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ€ ๋ชจ๋‘๋“ค ํ™”์ดํŒ…ํ•˜์„ธ์š” ๐Ÿ€

 

๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!
ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ



: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ ์นœ๊ตฌ๋Š” ์ด ์ฑ…์„ ๊ณจ๋ž๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‚˜๋„ ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋”ฐ๋ผ์ƒ€๋‹ค. ์‹ค์ œ๋กœ ์ฑ…์„ ์‚ดํŽด๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค. ๋‹ค๋ฅธ ์ฑ…์€ ๋ณธ ์ ์ด ์—†์–ด ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ๋‚ด ์ƒ๊ฐ์œผ๋ก  ์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ์ด ์ฑ…์„ ๊ฐ€์ง€๊ณ  ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค. ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!

 

 

๐Ÿฐ


โœ”๏ธ  ์ „์œ„ํ˜•, ํ›„์œ„ํ˜• ์ฆ๊ฐ ์—ฐ์‚ฐ์ž_ 86p

 

 ์ „์œ„ํ˜•

: ++๊ฐ€ ๋ณ€์ˆ˜๋ณด๋‹ค ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ฒƒ

int a = 3;
int b = ++a;
System.out.println(a);
System.out.println(b);

 

1) int b = ++a
    : a ์•ž์— ++๊ฐ€ ๋จผ์ € ์žˆ๋Š” ์ „์œ„ํ˜•์œผ๋กœ a์˜ ๊ฐ’์€ 1 ์ƒ์Šนํ•œ 4๊ฐ€ ๋œ๋‹ค.
2) int b = ++a
    : a๋Š” 4๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐ’์€ ์™ผ์ชฝ์— ์žˆ๋Š” b์— ๋„ฃ์–ด์ค€๋‹ค.
3) System.out.println(a);
    : a์˜ ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. ++๊ฐ€ ์•ž์— ์žˆ๊ฒŒ๋˜๋ฉด์„œ a์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ณ  ๊ทธ ํ›„ b์— ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.
       ๊ทธ๋Ÿฌ๋ฏ€๋กœ a๊ฐ’์€ 4๊ฐ€ ๋œ๋‹ค.
4) System.out.println(b);
    : b์˜ ๊ฐ’์€ 4๊ฐ€ ๋œ๋‹ค.

 

 

 

 

 ํ›„์œ„ํ˜•

: ++๊ฐ€ ๋ณ€์ˆ˜๋ณด๋‹ค ๋’ค์— ๋‚˜์˜ค๋Š” ๊ฒƒ

int c = 3;
int d = c++;
System.out.println(c);
System.out.println(d);

 

1) int d = c++;
    : c์˜ ๊ฐ’์ด ๋จผ์ € d์— ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ๋ ‡๊ฒŒ d์˜ ๊ฐ’์€ 3์ด ๋„ฃ์–ด์ง„๋‹ค.
2) int d = c++;
    : ๊ทธ ํ›„์— c์˜ ๊ฐ’์ด 1 ์ƒ์Šนํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ a๋Š” 4๊ฐ€ ๋œ๋‹ค.
3) System.out.println(c);
    : c๋Š” 1 ์ƒ์Šนํ•œ ๊ฐ’์ด 4๊ฐ€ ๋œ๋‹ค.
4) System.out.println(d);
    : d๋Š” ++๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „ a์˜ ๊ฐ’์„ ๋‹ด์•˜๊ธฐ์— 3์ด ๋œ๋‹ค.

 

 

 

 


 

โœ”๏ธ  ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž์™€ ๋น„ํŠธ์—ฐ์‚ฐ์ž ์ฐจ์ด์ _ 100p

 

 ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž

: ์‡ผํŠธ์„ฏํ‚ท์œผ๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฒฐ๊ณผ๊ฐ€ ์ด๋ฏธ ํ™•์ •๋์„ ๋•Œ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ๊ณผ์ •์„ ์ƒ๋žตํ•œ๋‹ค.

 

int a, b, c;

a = 3; b = 3; c = 3;

System.out.println(false && a++ > 6);
System.out.println(true || b++ > 6);
System.out.println(true ^ c++ > 6);

System.out.println(a);
System.out.println(b);
System.out.println(c);

 

 

1) System.out.println(false && a++ > 6);
   : ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๋Š” ์‡ผํŠธ ์„œํ‚ท์œผ๋กœ ๊ฐ’์ด ๊ฒฐ์ •๋‚˜๋ฉด ๋’ค์˜ ๊ณ„์‚ฐ์„ ์•ˆํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
     &&(AND)๋Š” ๋‘ ๊ฐ’์ด ๋ชจ๋‘ true์—ฌ์•ผ true ๊ฐ’์ด
์ตœ์ข…์ ์œผ๋กœ ๋‚˜์˜ค๋Š”๋ฐ,
    ์ด๋ฏธ false๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ๋’ค์˜ ๊ณ„์‚ฐ์€ ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

2) System.out.println(false && a++ > 6);
    : ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, a๋Š” 3์œผ๋กœ ๊ทธ๋Œ€๋กœ ๋‚จ๋Š”๋‹ค.

3) System.out.println(true || b++ > 6);
    : ||(OR)๋Š” ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ true์—ฌ๋„ true๊ฐ’์ด ์ตœ์ข…์ ์œผ๋กœ ๋‚˜์˜จ๋‹ค.
     ์œ„์˜ ์‹์—์„  true๊ฐ€ ์ด๋ฏธ ๋‚˜์˜ค๋ฏ€๋กœ ๊ตณ์ด ๋’ค์˜ ๊ณ„์‚ฐ์€ ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค. b๋Š” ๊ทธ๋Œ€๋กœ 3์ธ๋œ๋‹ค.

4) System.out.println(true ^ c++ > 6);
     : ^(XOR)๋Š” true-false(false-true) ๊ฐ’์ด ๋‚˜์˜ค๋ฉด true์ด๊ณ , true-true ํ˜น์€ false-false ๊ฐ’์ด ๋‚˜์˜ค๋ฉด false์ด๋‹ค.
      ์•ž์— ๋‚˜์˜จ ๊ฐ’์ด true์ด๋ฏ€๋กœ ๋’ท ๊ณ„์‚ฐ์„ ์ญ‰ ํ•ด๋ด์•ผ ์ตœ์ข…๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

5) System.out.println(true ^ c++ > 6);
     : c++๋Š” 4๊ฐ€ ๋˜๊ณ  ๊ทธ ๊ฐ’์ด 6๋ณด๋‹ค ํฐ ์ง€๋ฅผ ๋ฌป๋Š”๋‹ค. 4 > 6์€ ํ‹€๋ ธ์œผ๋ฏ€๋กœ (true ^ false)๊ฐ€ ๋œ๋‹ค. ์ตœ์ข…๊ฐ’์€ true๊ฐ€ ๋œ๋‹ค.

6) ๊ทธ๋Ÿฌ๋ฉด ๊ฐ ๊ฐ’์„ ์‚ดํˆ์„ ๋•Œ, a์™€ b๋Š” ๋’ค์˜ ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š์•˜์œผ๋‹ˆ ์ดˆ๊ธฐ ์„ค์ •๋œ ๊ฐ’ 3์ด ์ถœ๋ ฅ๋œ๋‹ค.
     ๊ทธ๋ฆฌ๊ณ  c๋Š” ๊ณ„์‚ฐ์„ ๋๊นŒ์ง€ ํ–ˆ๊ธฐ์— ์ฆ๊ฐ๋˜์–ด 4๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

 

 

 ๋น„ํŠธ์—ฐ์‚ฐ์ž

int a, b, c;

a = 3; b = 3; c = 3;

System.out.println(false & a++ > 6);
System.out.println(true | b++ > 6);
System.out.println(true ^ c++ > 6);

System.out.println(a);
System.out.println(b);
System.out.println(c);

 

1) System.out.println(false & a++ > 6);
  : ๋น„ํŠธ์—ฐ์‚ฐ์ž๋Š” ๋…ผ๋ฆฌ์—ฐ์‚ฌ์ž์™€ ๋‹ค๋ฅด๊ฒŒ ์‡ผํŠธ์„œํ‚ท์ด ์—†๋‹ค. ํ•ด๋‹น ๊ฐ’์ด false๋กœ ๋‚˜์˜ค๋”๋ผ๊ณ  a์˜ ๊ฐ’์€ 1 ์ฆ๊ฐ€ํ•˜์—ฌ 4๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
2) ๊ทธ๋ž˜์„œ ๋ถˆ๋ฆฌ์–ธ๊ฐ’์€ ๋…ผ๋ฆฌ์—ฐ์‚ฌ์ž์™€ ๊ฐ™์ง€๋งŒ ๊ฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค. 
3) a,b,c ๋ชจ๋‘ ์ฆ๊ฐ€ํ•˜์—ฌ 4๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

 


 

 

โœ”๏ธ  ์‚ผํ•ญ์—ฐ์‚ฐ์ž_ 103p

(์ฐธ ๋˜๋Š” ๊ฑฐ์ง“) ? ์ฐธ์ผ ๋•Œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : ๊ฑฐ์ง“์ผ ๋•Œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ

 

int a = 2;

int b = (a % 2 == 0) ? 10: 20
System.out.println(b);
1) int b = (a % 2 == 0) ? 10: 20
    : ์ฒซ๋ฒˆ์งธ๋กœ ๊ด„ํ˜ธ ์•ˆ์˜ ๊ณ„์‚ฐ์‹์œผ๋กœ ๋ด์ฃผ๋ฉด ๋œ๋‹ค. a๋Š” 1๋กœ 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ’์„ ๋ฌป๋Š”๋ฐ 2๋กœ 1์„ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€ ๊ฐ’์€ 1์ด๋œ๋‹ค.
      ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ด„ํ˜ธ ์•ˆ์˜ ์‹์€ false๊ฐ€ ๋œ๋‹ค.
2) int b = (a % 2 == 0) ? 10: 20
    : ๊ด„ํ˜ธ ์‹์˜ ๊ฐ’์ด true๋ฉด 10, false๋ฉด 20์˜ ๊ฐ’์ด ์ตœ์ข…์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.
     1)์—์„œ ์‚ดํŽด๋ณธ ๊ด„ํ˜ธ ๊ฐ’์˜ ๊ฒฐ๊ณผ๋Š” false๋กœ b์˜ ๊ฐ’์€ 20์ด ๋œ๋‹ค.

 

 

๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!
ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

  


์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ ์นœ๊ตฌ๋Š” ์ด ์ฑ…์„ ๊ณจ๋ž๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‚˜๋„ ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋”ฐ๋ผ์ƒ€๋‹ค. ์‹ค์ œ๋กœ ์ฑ…์„ ์‚ดํŽด๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค. ๋‹ค๋ฅธ ์ฑ…์€ ๋ณธ ์ ์ด ์—†์–ด ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ๋‚ด ์ƒ๊ฐ์œผ๋ก  ์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ์ด ์ฑ…์„ ๊ฐ€์ง€๊ณ  ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค. ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!

 

 

๐Ÿฐ

 


 

โœ”๏ธ  ์ž๋ฃŒํ˜• ์„ ์–ธํ•˜๊ธฐ_ 55p

// ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜ = ๊ฐ’;

int a = 3;
String b = "mybymine";

 

 

 ์ž๋ฃŒํ˜•

: ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋ชฉ์ ์— ๋”ฐ๋ผ ํฌ๊ธฐ์™€ ํŠน์ง•์„ ๋‚˜๋ˆ ์ค€๋‹ค.

๊ธฐ๋ณธ์ž๋ฃŒํ˜• : boolean, byte, short, int, long, chr
์ฐธ์กฐ์ž๋ฃŒํ˜• : ๋ฐฐ์—ด, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค

 

 

• ๋ณ€์ˆ˜

: ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ถ€์—ฌํ•˜๋Š” ์ด๋ฆ„

์‚ฌ๋ฌผํ•จ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„์‹œ, ์‚ฌ๋ฌผํ•จ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‚ฌ๋ฌผํ•จ์— ๋ถ€์—ฌ๋œ ๋ฒˆํ˜ธ๋‚˜ ๋ฌธ์ž๊ฐ€ ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

์ฃผ์˜์‚ฌํ•ญ
(1) ์ž๋ฃŒํ˜•์€ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์„ ์–ธํ•œ๋‹ค.
(2) ์ž๋ฃŒํ˜•์€ ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฒˆ๋งŒ ์„ ์–ธํ•œ๋‹ค.

 

 

 ๊ฐ’

: ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๋Š” ๊ฐ’

 

 

 


 

 

 

โœ”๏ธ  ์ด๋ฆ„ ์ž‘์„ฑ์‹œ ์ฃผ์˜์‚ฌํ•ญ_ 59p

1. ํŠน์ˆ˜ ๋ฌธ์ž๋Š” ๋ฐ‘์ค„(_)๊ณผ ๋‹ฌ๋Ÿฌ($) ํ‘œ๊ธฐ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.
2. ์•„๋ผ๋น„์•„ ์ˆซ์ž๋Š” ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‚˜ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ๋Š” ์•ˆ๋œ๋‹ค.
3. ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์•ฝ์–ด(public, int, static ๋“ฑ)๋Š” ์‚ฌ์šฉ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

 

 

  ๋ณ€์ˆ˜๋ช…์„ ์ง€์„ ๋•Œ ๊ถŒ์žฅ ์‚ฌํ•ญ

: ๋‚™ํƒ€ํ‘œ๊ธฐ๋ฒ•

int ourClassNum;

 

 

  ์ƒ์ˆ˜๋ช…์„ ์ง€์„ ๋•Œ ๊ถŒ์žฅ ์‚ฌํ•ญ

: ์ƒ์ˆ˜๋Š” ๋ณ€์ˆ˜์™€ ๊ตฌ๋ถ„์ง“๊ธฐ์œ„ํ•ด ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์‚ฌ์šฉ

final int MY_DATA;

 

 

Q. ์ƒ์ˆ˜์™€ ๋ณ€์ˆ˜์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?
A. ์ƒ์ˆ˜๋Š” ๋ณ€ํ•  ์ˆ˜ ์—†๋Š”, ๊ณ ์ •๋œ ๊ฐ’์„ ์˜๋ฏธํ•˜๊ณ  ๋ณ€์ˆ˜๋Š” ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๋งํ•œ๋‹ค.
    ๊ทธ๋ ‡๊ธฐ์— ๋ณ€์ˆ˜ ์•ž์— final์„ ๋ถ™์ด๋ฉด ์ƒ์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

 

โžฐใ…ค final์— ๋Œ€ํ•˜์—ฌ...

final์€ ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ, ํด๋ž˜์Šค์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.
(1) ๋ณ€์ˆ˜์— ๋ถ™์œผ๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’, ์ƒ์ˆ˜๊ฐ€ ๋œ๋‹ค.
(2) ๋ฉ”์†Œ๋“œ์— ๋ถ™์œผ๋ฉด override๊ฐ€ ์ œํ•œ๋˜๋Š”๋ฐ, ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ๋‹ค.
(3) ํด๋ž˜์Šค์— ๋ถ™์œผ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

ใ€ฐ๏ธ  final ๋ฉ”์†Œ๋“œ ๊ด€๋ จ ์˜ˆ์‹œ ใ€ฐ๏ธ 
class A {
    final void display() {
        System.out.println("mybymine");
    }
}

class B extends A {
    void display() {
        System.out.println("java velog!");
    }
}โ€‹


class A์— final void display๊ฐ€ ๋ถ™์œผ๋ฉด์„œ ์ด ๊ฐ’์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋๋‹ค.
๊ทธ๋ž˜์„œ class B์—์„œ A๋ฅผ ์ƒ์†๋ฐ›์•„ display( )๊ฐ’์„ ๋ฐ”๊ฟ” ์ถœ๋ ฅํ•˜๋ คํ•ด๋„ final์ด ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— 
override์— ์‹คํŒจํ•˜๊ฒŒ ๋œ๋‹ค.

 

ใ…ค- final ๊ด€๋ จ ์ •๋ณด ์ถœ์ฒ˜

 

[Java] final ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ ์—ฌ๋Ÿฌ๋ถ„๋“ค๊ณผ java์˜ final ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. final final ํ‚ค์›Œ๋“œ๋Š” ๋ณ€์ˆ˜(variable), ๋ฉ”์„œ๋“œ(method), ๋˜๋Š” ํด๋ž˜์Šค(class)์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด final ํ‚ค์›Œ๋“œ๋Š” ์–ด๋–ค

sabarada.tistory.com

 

 

 

โžฐใ…ค๊ทธ๋ ‡๋‹ค๋ฉด override๋Š” ๋ฌด์—‡์ธ๊ฐ€?  

์ƒ์œ„ ํด๋ž˜์Šค์— ์ •์˜๋œ ๋ณ€์ˆ˜ ํ˜น์€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
(1) ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)์€ ์ƒ์† ๊ด€๊ณ„์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ 
(2) ์˜ค๋ฒ„๋กœ๋”ฉ(overloading)์€ ๋™์ผํด๋ž˜์Šค ๋˜๋Š” ์ƒ์† ๊ด€๊ณ„์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

- override ๊ด€๋ จ ์ •๋ณด ์ถœ์ฒ˜

 

์˜ค๋ฒ„๋ผ์ด๋“œ

  Override, Overriding   ์˜ค๋ฒ„๋ผ์ด๋“œ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ(2022-02-02)

www.ktword.co.kr

 

 

 


 

 

โœ”๏ธ  ์ž๋ฃŒํ˜•์˜ ์ข…๋ฅ˜_ 63p

 

 ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ

์ฒซ๋ฒˆ์งธ ์˜์—ญ - ํด๋ž˜์Šค ์˜์—ญ, ์ •์  ์˜์—ญ, ์ƒ์ˆ˜ ์˜์—ญ, ๋ฉ”์„œ๋“œ ์˜์—ญ

๋‘๋ฒˆ์งธ ์˜์—ญ - ์Šคํƒ ์˜์—ญ (๋ณ€์ˆ˜๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„)

์„ธ๋ฒˆ์งธ ์˜์—ญ - ํž™ ์˜์—ญ (๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„)

 

 

  ๊ธฐ๋ณธ์ž๋ฃŒํ˜•๊ณผ ์ฐธ์กฐ์ž๋ฃŒํ˜•

๊ธฐ๋ณธ ์ž๋ฃŒํ˜• - int, float, double, char ๋“ฑ ์ž˜ ์•Œ๊ณ ์žˆ๋Š” ์ž๋ฃŒํ˜•

์ฐธ์กฐ ์ž๋ฃŒํ˜• - class, interface, enum์œผ๋กœ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๊ธฐ์ดˆ๋กœ ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒํ˜•

 

 

  ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’

๊ธฐ๋ณธ ์ž๋ฃŒํ˜•: ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ(๋‘๋ฒˆ์งธ์˜์—ญ)์— ์‹ค์ œ ๋ณ€์ˆซ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค

์ฐธ์กฐ ์ž๋ฃŒํ˜•: ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ’์€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ -> ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์นซ๊ฐ’ ์ €์žฅํ•œ๋‹ค.

 

๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!
ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

์ด ์ฑ…์„ ๊ณ ๋ฅด๊ฒŒ ๋œ ์ด์œ ๋Š” ์นœ๊ตฌ์˜ ์ถ”์ฒœ์ด์—ˆ๋‹ค. ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ ํ˜€์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ด์œ ๋กœ ์นœ๊ตฌ๋Š” ์ด ์ฑ…์„ ๊ณจ๋ž๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‚˜๋„ ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋”ฐ๋ผ์ƒ€๋‹ค. ์‹ค์ œ๋กœ ์ฑ…์„ ์‚ดํŽด๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด์žˆ๋‹ค. ๋‹ค๋ฅธ ์ฑ…์€ ๋ณธ ์ ์ด ์—†์–ด ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ๋‚ด ์ƒ๊ฐ์œผ๋ก  ์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ์ด ์ฑ…์„ ๊ฐ€์ง€๊ณ  ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•˜๋‹ค. ๋ชจ๋‘๋“ค ํ™”์ดํŒ…!!

 

 

๐Ÿฐ


โœ”๏ธ  ํด๋ž˜์Šค ์„ ์–ธ๋ถ€_ 45p

public class Test {

}

 

 

• public

: ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์ง€๋‹Œ ์ ‘๊ทผ์ง€์ •์ž๋‹ค.

 ๋ช‡ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜๋“  ์ตœ๋Œ€ 1๊ฐœ์˜ ํด๋ž˜์Šค๋งŒ public์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ ‘๊ทผ์ง€์ •์ž(์ ‘๊ทผ์ œํ•œ์ž, Access Modifier)๋ž€?
public - protected - private - default๋กœ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค ํ˜น์€ ๊ทธ๋“ค์ด ๊ฐ€์ง€๋Š”๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์— ์ œํ•œ์„ ๊ฑฐ๋Š” ๊ฒƒ์ด๋‹ค.
9์žฅ์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

 

class

: ํด๋ž˜์Šค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ์ž๋ฐ” ํ‚ค์›Œ๋“œ๋‹ค.

 

Q. ๋งŒ์•ฝ class๊ฐ€ ์•„๋‹Œ interface๋ผ๋ฉด?

public interface Test {

}

 

 

 

• Test

: ํด๋ž˜์Šค๋ช… ๋’ค์—๋Š” { ๋‚ด๋ถ€๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํฌํ•จํ•œ } ์ค‘๊ด„ํ˜ธ๊ฐ€ ์˜ค๋ฉฐ ํด๋ž˜์Šค๋ช…์€ ๋ฐ˜๋“œ์‹œ ์†Œ์ŠคํŒŒ์ผ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผํ•œ๋‹ค.

 

๋‚ด๋ถ€๊ตฌ์„ฑ์š”์†Œ?
ํ•„๋“œ(Field), ๋ฉ”์„œ๋“œ(Method), ์ƒ์„ฑ์ž(Constructor), ์ด๋„ˆ ํด๋ž˜์Šค(Inner class)์ด๋‹ค.
์ด 4์ข…๋ฅ˜๋ฅผ ์ œ์™ธํ•œ ๊ฒƒ๋“ค์€ ์˜ฌ ์ˆ˜ ์—†๋‹ค.

 

 

 

 

 


 

โœ”๏ธ  main( ) ๋ฉ”์„œ๋“œ_ 45p

โ€ฃ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๊ฐ€ ๋ฉ”์„œ๋“œ ์˜์—ญ์— ๋กœ๋”ฉ๋˜๋ฉด ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์€ main( )๋ฉ”์„œ๋“œ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค.
โ€ฃ ์‹คํ–‰ ์ดํ›„ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ main( )๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

public static void main(String[] args) {

}

 

 

 

 static

: ์ •์  ๋ฉ”์„œ๋“œ

 

Q. static์„ ๋ถ™์ด๋Š”๊ฑธ๊นŒ?
A. main ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
    static์€ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์‹œ์ผœ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

    ์ฆ‰, main ๋ฉ”์„œ๋“œ๋Š” ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ƒ์„ฑ์ด ์—†๋‹ค.
    ๊ทธ๋•Œ static์„ ๋ถ™์—ฌ์ฃผ์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰ํ•  ๊ฐ์ฒด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์ด ์ทจ์†Œ๋œ๋‹ค.
    ํ•˜์ง€๋งŒ static์€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•ญ์ƒ ์ƒ์ฃผํ•˜๋„๋ก ์„ค์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๊ฐ€ ์—†๋Š” main์ด ์ฃฝ์ง€ ์•Š๊ฒŒ ๋ฐฉ์ง€ํ•œ๋‹ค.ใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…คใ…ค

 

- static ์ฐธ๊ณ ํ•œ tistory

 

[JAVA] ์ž๋ฐ” public static void main (String[] args) ์˜๋ฏธ

์ž๋ฐ” ์ฝ”๋“œ์˜ ๊ธฐ์ดˆ ์ž๋ฐ”์˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ public static void main (String[] args) ํ•จ์ˆ˜๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์™œ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ์œ„์˜ ๊ตฌ๋ฌธ์œผ๋กœ ์‹คํ–‰์ด ๋˜์–ด์•ผ ํ• ๊นŒ์š”? ์ด ์˜๋ฏธ๋ฅผ ํŒŒํ—ค์ณ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ( ์ž๋ฐ”

mozi.tistory.com

 

 

 

 void

: ๋ฆฌํ„ด ํƒ€์ž…์œผ๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์˜๋ฏธํ•œ๋‹ค.

 

void๋Š” ๋ฆฌํ„ด๊ฐ’์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธด ํ•˜์ง€๋งŒ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

- void ์ฐธ๊ณ ํ•œ velog

 

์ž๋ฐ” void๋ž€?

์ž๋ฐ”์˜ main ํ•จ์ˆ˜์— void๋ผ๊ณ  ์“ฐ์—ฌ ์žˆ๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ณ„ ์ƒ๊ฐ์—†์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๊ทธ ์“ฐ์ž„์ƒˆ์— ํ˜ธ๊ธฐ์‹ฌ์ด ์ƒ๊ฒจ void๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ธ์ œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ๐Ÿ“– void์˜

velog.io

 

 

 

 Strings[  ] args

: ๋งค์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ, ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

โžฐ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์„œ Chat-GPT์”จ์—๊ฒŒ ์—ฌ์ญธ๋‹ค.

java YourProgram arg1 arg2

 

  1. ๋ช…๋ นํ”„๋กฌํ”„ํŠธ๋‚˜ ํ„ฐ๋ฏธ๋„์— ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ ์–ด์ค€๋‹ค.
    ์—ฌ๊ธฐ์„œ YourProgram์€ ์‹คํ–‰ํ•  ํด๋ž˜์Šค ์ด๋ฆ„, arg1๊ณผ arg2๋Š” ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋ช…๋ น์ค„ ์ธ์ˆ˜๊ฐ€ ๋œ๋‹ค.

  2. JVM์ด ์‹คํ–‰๋˜๊ณ  JVM์ด YourProgram์„ ์ฐพ์•„ main ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

  3. main ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ String[ ] args๋Š” ["arg1", "arg2"]์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    ์—ฌ๊ธฐ์„œ args[0]์—๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์ธ "arg1"์ด ์ €์žฅ๋˜๊ณ , args[1]์—๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์ธ "arg2"๊ฐ€ ์ €์žฅ๋œ๋‹ค.
System.out.println("์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜: " + args[0]);
System.out.println("๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜: " + args[1]);

 


4. ๊ฒฐ๊ณผ:
    ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜: arg1
    ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜: arg2

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ๋ก , ์ธ์ˆ˜์˜ ์ด๋ฆ„(?)์€ ๋ฌธ์ž์—ด๋กœ ์“ฐ๋„๋ก ์•ฝ์†ํ–ˆ๊ณ 
๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ๊ทธ ์ธ์ˆ˜๋ฅผ ์ œ๋Œ€๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ main ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ String์œผ๋กœ ์ง€์ •ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜์ค‘์— ๋‹ค์‹œ ์•Œ์•„๋ณด๊ณ  ์‹ถ๋‹ค... ๐Ÿฅฒ

 


 

 

๐Ÿ‘๏ธ‍๐Ÿ—จ๏ธ ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด๋‚˜, ์ €์—๊ฒŒ ๋” ์•Œ๋ ค์ฃผ๊ณ  ์‹ถ์€ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ๐Ÿป

+ Recent posts