0321 - 0328


# 0321 - 0328

# 0321 - ์ž๋ฐ” ํ‘œ์ค€ (JLS, JSR, JEP)

์ž๋ฐ” ์ŠคํŽ™ ๊ด€๋ จํ•ด์„œ JSR-123, JLS-123 ์ฒ˜๋Ÿผ ์ŠคํŽ™์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์ŠคํŽ™๋’ค์—๋Š” '์ž๋ฐ” ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋กœ์„ธ์Šค(JCP, Java Community Process)'๊ฐ€ ์žˆ๋‹ค.

# ์ž๋ฐ” ๊ฐ•ํ™” ์ œ์•ˆ (Java Enhancement Proposal, JEP)

์ž๋ฐ” ์ฝ”์–ด ๊ธฐ์ˆ ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ์œ„ํ•œ ์ œ์•ˆ ๋ฌธ์„œ๋‹ค. ์ด ์ œ์•ˆ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ด์–ด์„œ ์„ค๋ช…ํ•  JSR์ด๋‚˜ JLS๊ฐ™์€ ๋ช…์„ธ๋กœ ์ •๋ฆฌํ•  ์ƒํƒœ๋Š” ์•„๋‹ˆ๋‹ค. OpenJDK/JDK์˜ ์—…๋ฐ์ดํŠธ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ ๋ชฉ๋ก๋“ค์ด๋‹ค.
์ฑ„ํƒ๋œ JEP๋Š” ํŠน์ • JDK๋ฆด๋ฆฌ์ฆˆ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  JEP๊ฐ€ ์Šน์ธ๋˜์–ด ์—…๋ฐ์ดํŠธ์— ํฌํ•จ๋˜๋Š”๊ฑด ์•„๋‹ˆ๋‹ค.
JEP์— ์ œ์•ˆ๋˜๋Š” ๋ชฉ๋ก๋“ค์ด JDK์˜ ๋กœ๋“œ๋งต์ด ๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๊ณผ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋“ค์„ ๋‚˜๋ˆ„๊ณ  ๋ช…์„ธ๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์ง€์ ๊นŒ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ํƒ€์ดํ•‘์ด ํ•„์š”ํ•˜๋‹ค.

# ์ž๋ฐ” ์š”์ฒญ ๋ช…์„ธ์„œ(Java Specification Request, JSR)

JCP์˜ ์ƒˆ ๋ช…์„ธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ๋œ ํŒ€์›๋“ค์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฌธ์„œ๋‹ค. ์ผ๋ฐ˜์ ์ธ JSR์˜ ์ฃผ์ œ๋Š” ์ด๋ฏธ ์„ฑ์ˆ™๋œ ๊ธฐ์ˆ ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ๋ถ„๋ฅ˜๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์— ์žˆ๋‹ค.
๋‹ค๋งŒ ์ด๋ช…์„ธ๋“ค์€ ํ•ญ์ƒ ์ž๋ฐ”์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์Œ์—๋„ ๋•Œ๋ก  ๋ช…์„ธ๋“ค์ด Java SE ๋˜๋Š” Java EE ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์ด ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

# ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ์„œ(Java Language Specification, JLS)

์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ์„œ๋ฅผ ๋œปํ•œ๋‹ค. JLS๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ๋ฌธ๋ฒ•๊ณผ ์ •์ƒ์ ์ธ/๋น„์ •์ƒ์ ์ธ ๊ทœ์น™๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •์ƒ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋ฐฉ๋ฒ•๋“ค๋„ ๋ณด์—ฌ์ค€๋‹ค.

JEP๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋‚˜์˜ค๊ณ  ๊ทธ JEP์ค‘ JSR๋กœ ์Šน๊ฒฉ๋ ๋งŒํ•œ ๊ฒƒ์„ ์„ ๋ณ„ํ•œ ๋‹ค์Œ ์Šน๊ฒฉํ•œ๋‹ค.
์ด๋Ÿฌํ•œ JSR์„ ๊ตฌ์ฒดํ™” ํ•ด์„œ ๋ฒ„์ „๋ณ„๋กœ ์ •์˜ํ•ด๋‘” ๊ฒƒ์ด JLS ๋ฌธ์„œ์ด๋‹ค.


# 0322 - @ElementColleciton, @CollectionTable

# ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜

๋ง ๊ทธ๋Œ€๋กœ ๊ฐ’ ํƒ€์ž…์„ ์ปฌ๋ ‰์…˜์— ๋‹ด์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (@OneToMany ์ฒ˜๋Ÿผ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, Integer, String, ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ๊ฐ™์€ ๊ฐ’ ํƒ€์ž…์„ ์ปฌ๋ ‰์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.)

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ปฌ๋ ‰์…˜์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ฐœ๋…์ ์œผ๋กœ ๋ณด๋ฉด 1๋Œ€ N๊ด€๊ณ„ ์ด๋‹ค. (๊ฐ’ ํƒ€์ž…์„ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์€, ๊ฐ’ ํƒ€์ž…์„ ์†Œ์œ ํ•œ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค์™€, ๋ชจ๋“  ๊ฐ’ ํƒ€์ž… ํ•„๋“œ๋ฅผ ๋ฌถ์–ด์„œ PK๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ PK๊ฒธ FK๋กœ ์‚ฌ์šฉํ•œ๋‹ค.)

# @ElementColleciton

๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. @Entity๊ฐ€ ์•„๋‹Œ Basic Type์ด๋‚˜ Embeddable Class๋กœ ์ •์˜๋œ ์ปฌ๋ ์…˜์„ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑํ•˜๋ฉฐ One-To-Many ๊ด€๊ณ„๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
@ElementColleciton์€ @CollectionTable๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

@Entity
public class StudyGroup {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    // Basic type
    @ElementCollection(fetch = FetchType.LAZY)
    @Column(name = "TOPIC_NAME")//String์ธ ๊ฒฝ์šฐ์— ํ•œํ•ด์„œ ์˜ˆ์™ธ์ ์œผ๋กœ ํ—ˆ์šฉ, ์ด์™ธ ํƒ€์ž…์€ @AttributeOverride๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ” ์†์„ฑ์„ ์žฌ์ •์˜ํ•œ๋‹ค.
    private Set<String> topicTags = new HashSet<String>();
 
    // Embedded type
    @ElementCollection
    @CollectionTable(name="study_group_member", joinColumns = @JoinColumn(name= "study_group_id", referencedColumnName = "id"))
    private List<StudyGroupMember> members = new HashSet<StudyGroupMember>();
}

@Embeddable
public class StudyGroupMember {
    private UUID memberId;
    private Boolean isOwner;
}
  • ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์€ ์กฐํšŒ ์‹œ ์ง€์—ฐ๋กœ๋”ฉ ์ „๋žต์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฐ’ ํƒ€์ž…์€ ๊ทธ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค. ์ฆ‰ ์˜์†์„ฑ ์ „์ด(Cascade ALL) + ๊ณ ์•„ ๊ฐ์ฒด ์ œ๊ฑฐ ๊ธฐ๋Šฅ์„ ํ•„์ˆ˜๋กœ ๊ฐ€์ง„๋‹ค.

# @ElementCollection๊ณผ @Entity์˜ @OneToMany ์ฐจ์ด

  • @ElementCollection

    • ์—ฐ๊ด€๋œ ๋ถ€๋ชจ Entity ํ•˜๋‚˜์—๋งŒ ์—ฐ๊ด€๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค.
    • ํ•ญ์ƒ ๋ถ€๋ชจ์™€ ํ•จ๊ป˜ ์ €์žฅ๋˜๊ณ  ์‚ญ์ œ๋˜๋ฏ€๋กœ cascade ์˜ต์…˜์€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ถ€๋ชจ Entity Id์™€ ์ถ”๊ฐ€ ์ปฌ๋Ÿผ(basic or embedded ํƒ€์ž…)์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹๋ณ„์ž ๊ฐœ๋…์ด ์—†์œผ๋ฏ€๋กœ ์ปฌ๋ ‰์…˜ ๊ฐ’ ๋ณ€๊ฒฝ ์‹œ, ์ „์ฒด ์‚ญ์ œ ํ›„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • @Entity ์—ฐ๊ด€

    • ๋‹ค๋ฅธ Entity์— ์˜ํ•ด ๊ด€๋ฆฌ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
    • join table์ด๋‚˜ ์ปฌ๋Ÿผ์€ ๋ณดํ†ต ID๋งŒ์œผ๋กœ ์—ฐ๊ด€์„ ๋งบ๋Š”๋‹ค.

# 0323 - docker compose ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

# docker compose๋ž€?

docker compose๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ docker container๋ฅผ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํˆด์ด๋‹ค.
์›น ์„œ๋น„์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„, ๋ฒก์—”๋“œ ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์„œ๋ฒ„๋ฅผ Docker container๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋™์ž‘์‹œํ‚ค๊ณ  docker compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

# docker-compose.yml

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

  • ์‹œ์Šคํ…œ ์•ˆ์—์„œ ๊ฐ€๋™ํ•˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋“ค์˜ ๊ตฌ์„ฑ์„ ๋ชจ์•„์„œ ์ •์˜
- version :  ๋ฒ„์ „ ์ง€์ •  
- services :  ์„œ๋น„์Šค ์ •์˜  
- image :  ์ด๋ฏธ์ง€ ์ง€์ •  
- build :  Dockerfile ์œ„์น˜ ์ง€์ •
- command :  container ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ช…๋ น
- entrypoint : container ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ช…๋ น
- depends_on : ์„œ๋น„์Šค๊ฐ„ ์˜์กด๊ด€๊ณ„ ์„ค์ •
- environment : ์ปจํ…Œ์ด๋„ˆ ์•ˆ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
- container_name : ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ์„ค์ •
- volumes : ์ปจํ…Œ์ด๋„ˆ์— ๋ณผ๋ฅจ Mount
- volumes_from : ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ๋ณผ๋ฅจ ๋งˆ์šดํŠธ
- links : ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ
- ports : Host ์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณต๊ฐœํ•˜๋Š” ํฌํŠธ์ง€์ •
- expose : ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ๊ณต๊ฐœํ•˜๋Š” ํฌํŠธ ์ง€์ •

# docker-compose ๊ธฐ๋ณธ ๋ช…๋ น์–ด

  • docker-compose up [์˜ต์…˜] [์„œ๋น„์Šค๋ช…] : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•œ๋‹ค.
-d : ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰
--No-deps : ๋งํฌ ์„œ๋น„์Šค ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ
--build : ์ด๋ฏธ์ง€ ๋นŒ๋“œ
-t : ํƒ€์ž„์•„์›ƒ์„ ์ง€์ •(๊ธฐ๋ณธ 10์ดˆ)
  • docker-compose ps : ํ˜„์žฌ ๋™์ž‘์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • docker-compose logs : ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • docker-compose run [์„œ๋น„์Šค๋ช…] [๋ช…๋ น] : docker-compose up ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑ ๋ฐ ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž„์˜์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๋ชจ๋‘ ์‚ญ์ œํ•  ๊ฒฝ์šฐ docker-compose start๊ฐ€ ์•„๋‹Œ, docker-compose up์œผ๋กœ ๋‹ค์‹œ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • docker-compose (start/stop/pause/unpause/restart) : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋น„์Šค ๋˜๋Š” ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘/์ •์ง€/์ผ์‹œ์ •์ง€/์žฌ์‹œ์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์„ค์ •๋’ค์— ์„œ๋น„์Šค๋ช…์„ ๋ถ™์ด๋ฉด ํŠน์ • ์„œ๋น„์Šค๋งŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • docker-compose rm : docker-compose๋กœ ์ƒ์„ฑํ•œ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ผ๊ด„ ์‚ญ์ œํ•œ๋‹ค.(์‚ญ์ œ ์ „, ๊ด€๋ จ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ข…๋ฃŒ ์‹œ์ผœ๋‘์–ด์•ผ ํ•œ๋‹ค.)
  • docker-compose kill : ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ•์ œ๋กœ ์ •์ง€์‹œํ‚จ๋‹ค. kill ๋’ค์—๋Š” ์„œ๋น„์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ์„œ๋น„์Šค๋งŒ killํ•  ์ˆ˜ ์žˆ๋‹ค. -s ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ทธ๋„์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • docker-compose down : ๋„คํŠธ์›Œํฌ ์ •๋ณด, ๋ณผ๋ฅจ, ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ผ๊ด„ ์ •์ง€ ๋ฐ ์‚ญ์ œ ์ฒ˜๋ฆฌํ•œ๋‹ค. (๋งŒ์•ฝ docker-compose down โ€”rmi all ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์ด๋ฏธ์ง€๊นŒ์ง€ ์‚ญ์ œ ํ•œ๋‹ค.)
  • docker-compse port [์„œ๋น„์Šค๋ช…] [ํ”„๋ผ์ด๋น— ํฌํŠธ๋ฒˆํ˜ธ] : ์„œ๋น„์Šค ํ”„๋ผ์ด๋น— ํฌํŠธ ๋ฒˆํ˜ธ์˜ ์„ค์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • docker-compose config : ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. docker-compose.yml์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅ

# 0327 - ๊ฐ€๋ณ€์ธ์ž(varargs)

  • ํ˜•ํƒœ
public void test(string... parameter) {
    ...    
}

# ์˜ค๋ฒ„๋กœ๋”ฉ

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

// ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•œ ๊ฐœ์ธ ๊ฒฝ์šฐ
public void search(String one) {}

// ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ
public void search(String one, String two) {}

// ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์„ธ ๊ฐœ์ธ ๊ฒฝ์šฐ
public void search(String one, String two, String three) {}

// Map์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
public void search(Map<String, String> param) {}

// ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
public void search(String[] param) {}

// List๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
public void search(List<String> param) {}

// VO๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
public void search(ParamVO param) {}

# ๊ฐ€๋ณ€์ธ์ž

๊ฐ€๋ณ€์ธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž๋ฐ” 1.5๋ถ€ํ„ฐ ์ง€์›๋œ๋‹ค. ์‚ฌ์šฉ๋ฒ•์€ ๋ณ€์ˆ˜ ํƒ€์ž… ๋’ค์— ๊ธฐํ˜ธ(...)๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€๋ณ€์ธ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ์•„๋ž˜ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค

public void callMethod() {
	
    // ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์Œ
    test();
    
    // ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•œ๊ฐœ
    test("A");
    
    // ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‘๊ฐœ
    test("A", "B");
    
    // ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ
    test(new String[]{"A", "B", "C"});
}

public void test(String... param) {

	System.out.println("param: " + param);
    
}

๋‹ค๋ฅธ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ฐ€๋ณ€์ธ์ž๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ์ œ์ผ ๋’ค์— ์œ„์น˜ ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

public void test2(String name, String... param) {

	System.out.println("param: " + param);
    
}
Last update: September 13, 2022 21:44
Contributors: ahnjs