๐Ÿค– Companion Object - ์„ ์–ธ ๋ฐ ์ ‘๊ทผ

ozzingยท2024๋…„ 2์›” 5์ผ
0

Companion Object๋ž€ ๋™๋ฐ˜ ๊ฐ์ฒด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด๋กœ, ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์†Œ๋“œ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Static

์ž๋ฐ”์˜ Static์€ ์ •์ ์ธ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

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

public class NameUtils {
	public static String getName(String lastName, String firstName) {
    	return lastName + firstName;
    }
}

// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ์‚ฌ์šฉ
NameUtils nameUtils = new NameUtils();
nameUtils.getName("์ผ€", "๋กœ๋กœ"); 

// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์—†์ด ์‚ฌ์šฉ
NameUtils.getName("ํƒ€", "๋งˆ๋งˆ"); 

Object

object ํ‚ค์›Œ๋“œ๋Š” ์ž๋ฐ”์˜ static๊ณผ new ํ‚ค์›Œ๋“œ๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค๊ณ  ์—ฌ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.

object Person {
	val name: String = "ozzing"
}

Person์„ ์„ ์–ธํ•จ์œผ๋กœ์จ Person ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ozzing์ด๋ผ๋Š” ์ด๋ฆ„์„ ์ ์žฌํ•œ๋‹ค.

Class ๋‚ด๋ถ€ Object - Companion Object

๋‹ค์–‘ํ•œ ์ฐจ์ด์ ์ด ์žˆ์ง€๋งŒ ์„ ์–ธ๊ณผ ์ ‘๊ทผ์—์„œ์˜ ๊ฐ„๋‹จํ•œ ์ฐจ์ด๋งŒ ํ›„์ˆ ํ•˜์˜€๋‹ค.

ํด๋ž˜์Šค ๋‚ด๋ถ€์— object๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

class PersonClass {
	object Person {
    	val name: String = "ozzing"
    }
}

์ด ๊ฒฝ์šฐ ์ด๋ฆ„์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” PersonClass.Person.name๊ณผ ๊ฐ™์ด ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

class PersonClass {
	companion object {
    	val name: String = "ozzing"
    }
}

๋ฐ˜๋ฉด companion object์˜ ๊ฒฝ์šฐ ๋™๋ฐ˜ ๊ฐ์ฒด๋กœ ํด๋ž˜์Šค ๋‚ด๋ถ€ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ PersonClass.name๊ณผ ๊ฐ™์ด ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์œ ๋Š” object ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” object Person ๋‚ด์—์„œ new๋กœ ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฐ˜๋ฉด, companion object์„ ์‚ฌ์šฉํ•˜๋ฉด object ๋ฐ–์ธ PersonClass์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ์ฒด๋ช…์„ ์ง€์–ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

class PersonClass {
	companion object Person {
    	val name: String = "ozzing"
    }
}

์ด ๊ฒฝ์šฐ์—๋Š” PersonClass.Name๊ณผ PersonClass.Person.name, Person.Name ์„ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Companion Object

์ž๋ฐ”์˜ static๊ณผ ๋งŽ์ด ๋น„๊ตํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” 'staticํ•œ ํด๋ž˜์Šค'๊ฐ€ ์•„๋‹Œ '๊ฐ์ฒด'์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

[๋น„์Šทํ•œ ์ ]

  • ์ •์  ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•จ
  • ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ

[๋‹ค๋ฅธ ์ ]

  • ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•จ
  • ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ช…์„ ์ง€์–ด์ค„ ์ˆ˜ ์žˆ์Œ
  • ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ

[๊ทธ๋ƒฅ ์ ]

  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ companion object๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ชจ๋“  private ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, private ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์šฉ์ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€