Language/JAVA

[JAVA] λ§€κ°œλ³€μˆ˜μ— ... / μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 차이 정리

Alchemists 2022. 10. 5. 15:39
728x90

λ§€κ°œλ³€μˆ˜μ— ...

 

λ§€κ°œλ³€μˆ˜μ— OrderItem... orderItemsκ°€ μžˆμ—ˆλŠ”λ° 

μ΄κ²ƒμ˜ μ˜λ―ΈλŠ” κ°€λ³€μΈμžλΌκ³  ν•œλ‹€!

OrderItemμ΄λΌλŠ” μΈμžκ°€ 0λΆ€ν„° μ—¬λŸ¬κ°œκΉŒμ§€ 올 수 μžˆλ‹€λŠ” 것이닀.(μ—¬λŸ¬κ°œμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 받을 수 μžˆλ‹€λŠ” 뜻)

μžλ£Œν˜•μ΄ κΌ­ 배열일 ν•„μš” μ—†κ³  인자λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šκ±°λ‚˜ μΈμžκ°€ 1κ°œλΌλ„ κ°€λŠ₯ν•˜λ‹€.

λ§€κ°œλ³€μˆ˜ μ„ μ–Έν•  λ•Œ κ°€μž₯ λ§ˆμ§€λ§‰μ— 써야 ν•˜λ©° 전달 받은 κ°€λ³€μΈμžλŠ” 반볡문 μ¨μ„œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

κ°€λ³€μΈμžλŠ” λ§€κ°œλ³€μˆ˜ 개수λ₯Ό λ™μ μœΌλ‘œ μ§€μ •ν•΄μ£ΌλŠ” 방법이닀. 

 

	public static String[] strArr(String ... vargs) {
		return vargs;
	}

	public static void main(String[] args) {
		String[] sArr = strArr("A", "B", "C");
		
		for(String str : sArr) {
			System.out.print(str + " ");
		}
        
        strArr();
	}

https://binux.tistory.com/12

 

[java] κ°€λ³€μΈμž (variable arguments)

λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜ 개수λ₯Ό λ™μ μœΌλ‘œ μ§€μ •ν•΄μ£ΌλŠ” 방법이닀. ‘νƒ€μž…… λ³€μˆ˜λͺ…’ ν˜•μ‹μœΌλ‘œ μ„ μ–Έν•  수 있고, μ‚¬μš©λœ 예λ₯Ό 찾자면 PrintStream Class의 printf()κ°€ λŒ€ν‘œμ μΈ 예라고 ν•  수 μžˆλ‹€. public PrintStrea

binux.tistory.com

 

https://blog.naver.com/PostView.nhn?blogId=zzang9ha&logNo=222098886642 

 

[Java/μžλ°”] - κ°€λ³€ 인자(Varargs)

Java - λ§€κ°œλ³€μˆ˜μ˜ κ°€λ³€ 인자 κ°€λ³€ 인자(Varargs)λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό λ™μ μœΌλ‘œ 받을 수 μžˆλŠ” λ°©λ²•μœΌλ‘œ, μžλ°” 1...

blog.naver.com

 

 

흠 근데 배열을 μ“°λŠ” 것과 λ³„λ°˜ 차이가 μ—†λŠ”κ²ƒ 같은데 큰 차이점이

"ν•¨μˆ˜ν˜ΈμΆœμ‹œ λ§€κ°œλ³€μˆ˜ 값을 μƒλž΅κ°€λŠ₯ν•œκ°€?" 에 μžˆλ‹€.

배열은 크기가 0 μΈλ³€μˆ˜ λ˜λŠ” null을 λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨μ£ΌκΈ°λΌλ„ ν•΄μ•Όν•˜μ§€λ§Œ κ°€λ³€μΈμžλ₯Ό μ‚¬μš©ν•˜λ©΄ λ§€κ°œλ³€μˆ˜ μƒλž΅ν•΄μ•Όν•˜λŠ” κ²½μš°μ— 값이 μƒλž΅κ°€λŠ₯ν•Ÿ. 

 

좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 

 

μΆ”μƒν΄λž˜μŠ€λŠ” μΌλ°˜ν΄λž˜μŠ€μ™€ 큰 μ°¨μ΄λŠ” μ—†λŠ”λ° 상속을 톡해 μžμ† 클래슀λ₯Ό μ™„μ„±ν•˜λ„λ‘ν•œλ‹€.

κ·Έλž˜μ„œ λ―Έμ™„μ„± 섀계도라고도 ν•œλ‹€.

상속을 μœ„ν•œ ν΄λž˜μŠ€μ΄κΈ°μ— λ”°λ‘œ 객체λ₯Ό 생성할 ν•„μš”λ„ μ—†λ‹€. 

class μ•žμ— abstract μ˜ˆμ•½μ–΄ μ‚¬μš©ν•˜μ—¬ 상속을 톡해 κ΅¬ν˜„ν•΄μ•Όν•œλ‹€λŠ” κ²ƒλ§Œ μ•Œλ €μ£Όκ³  μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•œλ‹€.

 

πŸ‹ 좔상 클래슀 κ·œμΉ™

  • 좔상 ν΄λž˜μŠ€λŠ” ν‚€μ›Œλ“œ abstractλ₯Ό λΆ™μ—¬ ν‘œν˜„ν•œλ‹€.
    좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜μ§€ μ•Šμ€ ν΄λž˜μŠ€μ—μ„œλ„ abstractλ₯Ό λΆ™μ—¬μ„œ 좔상 클래슀둜 μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€.
  • 클래슀λ₯Ό abstract둜 μ§€μ •ν•˜λ©΄ newλ₯Ό 톡해 객체λ₯Ό 직접 생성할 수 μ—†λ‹€.
  • λ©”μ†Œλ“œμ— abstractλ₯Ό μ‚¬μš©ν•  경우 interface의 λ©”μ†Œλ“œμ™€ 같이 κ΅¬ν˜„ 뢀뢄은 μ—†λ‹€.
  • abstract둜 μ„ μ–Έν•œ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. (μ˜€λ²„λΌμ΄λ”©)
    μ΄λŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ 좔상 λ©”μ„œλ“œλ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜λŠ” 것이닀.

 

 

μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λ³Έ 섀계도라고 ν•  수 μžˆλ‹€. μ–˜λ„ μΆ”μƒν΄λž˜μŠ€μ²˜λŸΌ λ‹€λ₯Έ 클래슀 μž‘μ„±ν•˜λŠ”λ° 도움을 μ£ΌλŠ” λͺ©μ μœΌλ‘œ

μ‚¬μš©ν•˜κ³  닀쀑상속이 κ°€λŠ₯ν•˜λ‹€. (μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„°λ§Œ 상속이 κ°€λŠ₯ν•˜κ³ , ν΄λž˜μŠ€μ™€ 달리 닀쀑상속가λŠ₯)

μΈν„°νŽ˜μ΄μŠ€λ„ μΌμ’…μ˜ μΆ”μƒν΄λž˜μŠ€μΈλ°, μΆ”μƒν΄λž˜μŠ€λ³΄λ‹€ 좔상화 정도가 λ†’λ‹€. 

μΆ”μƒν΄λž˜μŠ€μ²˜λŸΌ μΌλ°˜λ³€μˆ˜λ‚˜ λ©”μ„œλ“œλ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μžˆλ‹€. 

μΈν„°νŽ˜μ΄μŠ€λͺ…은 λŒ€λΆ€λΆ„  '~을 ν•  수 μžˆλŠ”'의 의미인 able둜 λλ‚˜λŠ” 것듀이 λ§Žλ‹€. 

κ·Έλž˜μ„œ 뭐라도 κ°–μΆ°μ§„ μΆ”μƒν΄λž˜μŠ€λŠ” λ―Έμ™„μ„± 섀계도이고, κ΅¬ν˜„λœκ²Œ 아무것도 μ—†λŠ”κ²Œ μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. 

 

πŸ‹ μΈν„°νŽ˜μ΄μŠ€ κ·œμΉ™

  • 좔상 클래슀처럼 λΆˆμ™„μ „ν•œ 것이기 λ•Œλ¬Έμ— κ·Έ 자체만으둜 μ‚¬μš©λ˜κΈ° 보닀,
    λ‹€λ₯Έ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ”λ° 도움을 쀄 λͺ©μ μœΌλ‘œ μž‘μ„±λœλ‹€.
  • 일반 λ©”μ„œλ“œ λ˜λŠ” 멀버 λ³€μˆ˜λ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μ—†λ‹€.
  • λͺ¨λ“  멀버 λ³€μˆ˜λŠ” public static final이어햐 ν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
  • λͺ¨λ“  λ©”μ„œλ“œλŠ” public abtract이어야 ν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
    (단, JDK1.8λΆ€ν„° static λ©”μ„œλ“œμ™€ default λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.)

 

κ·Έλ ‡λ‹€λ©΄ μΈν„°νŽ˜μ΄μŠ€μ™€ μΆ”μƒν΄λž˜μŠ€μ˜ μš©λ„λ₯Ό 달리 λ‘λŠ” μ΄μœ κ°€ λ¬΄μ—‡μΌκΉŒ?

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”© ν•΄μ•Όν•œλ‹€λŠ” λΆˆνŽΈν•¨μ΄ μžˆλ‹€. κ·Έλž˜μ„œ κ³΅ν†΅λœ κΈ°λŠ₯이

μžˆλ‹€λ©΄ μΆ”μƒν΄λž˜μŠ€λ₯Ό μ΄μš©ν•΄ μΌλ°˜λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•˜μ—¬ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λ©΄λœλ‹€.

그리고 μžλ°”λŠ” ν•˜λ‚˜μ˜ 클래슀만 상속이 κ°€λŠ₯ν•˜κΈ°μ— λ‹€λ₯Έ μΆ”μƒν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜λŠ”λ° κ³΅ν†΅λœ κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€λ©΄

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ“°λ©΄λœλ‹€.

 

κ³΅ν†΅λœ κΈ°λŠ₯ : μΆ”μƒν΄λž˜μŠ€

μΈν„°νŽ˜μ΄μŠ€: κ³ μœ ν•œ 애듀이 ν• μˆ˜ μžˆλŠ” κΈ°λŠ₯λ“€ 

κ³ μœ ν•œ μ• λ“€: 일반 클래슀

 

πŸ’™ μ‚¬μš©μΌ€μ΄μŠ€ 정리 (by new_wisdomλ‹˜ λΈ”λ‘œκ·Έ )

좔상 클래슀

  • 관련성이 높은 클래슀 간에 μ½”λ“œλ₯Ό κ³΅μœ ν•˜κ³  싢은 경우
  • 좔상 클래슀λ₯Ό 상속 받을 ν΄λž˜μŠ€λ“€μ΄ κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” λ©”μ†Œλ“œμ™€ ν•„λ“œκ°€ λ§Žκ±°λ‚˜,
    publicμ΄μ™Έμ˜ μ ‘κ·Όμž(protected, private) 선언이 ν•„μš”ν•œ 경우
  • non-static, non-final ν•„λ“œ 선언이 ν•„μš”ν•œ 경우 (각 μΈμŠ€ν„΄μŠ€μ—μ„œ μƒνƒœ 변경을 μœ„ν•œ λ©”μ†Œλ“œκ°€ ν•„μš”ν•œ 경우)

μΈν„°νŽ˜μ΄μŠ€

  • μ„œλ‘œ 관련성이 μ—†λŠ” ν΄λž˜μŠ€λ“€μ΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ²Œ λ˜λŠ” 경우.
    ex) Comparable, Cloneable μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ ν΄λž˜μŠ€λ“€μ—μ„œ κ΅¬ν˜„λ˜λŠ”λ°, κ΅¬ν˜„ν΄λž˜μŠ€λ“€ 간에 관련성이 μ—†λ‹€.
  • νŠΉμ • 데이터 νƒ€μž…μ˜ 행동을 λͺ…μ‹œν•˜κ³  싢은데, μ–΄λ””μ„œ κ·Έ 행동이 κ΅¬ν˜„λ˜λŠ”μ§€λŠ” μ‹ κ²½μ“°μ§€ μ•ŠλŠ” 경우.
  • 닀쀑상속을 ν—ˆμš©ν•˜κ³  싢은 경우

 

 

 

πŸ“Œ λ„ˆλ¬΄ 잘 μ •λ¦¬λœ κΈ€ 

 

https://myjamong.tistory.com/150

 

[JAVA] μΆ”μƒν΄λž˜μŠ€ VS μΈν„°νŽ˜μ΄μŠ€ μ™œ μ‚¬μš©ν• κΉŒ? 차이점, 예제둜 확인 :: 마이자λͺ½

μΆ”μƒν΄λž˜μŠ€ μΈν„°νŽ˜μ΄μŠ€ μ™œ... μ‚¬μš©ν• κΉŒ? μš°λ¦¬λŠ” μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•΄μ„œ μ•Œκ³  μžˆλƒκ³  λˆ„κ°€ λ¬Όμ–΄λ³Έλ‹€λ©΄ μ•Œκ³  μžˆλ‹€κ³  λŒ€λ‹΅μ„ ν•˜κ³ μžˆμŠ΅λ‹ˆλ‹€. 그런데 이둠적인 λ‚΄μš© 말고 μ •μž‘ "μ™œ μ‚¬μš©ν•˜

myjamong.tistory.com

https://velog.io/@new_wisdom/Java-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

[Java] 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이

[Java] λ‚΄κ°€ μ΄ν•΄ν•œ 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이 정리 πŸ‘€

velog.io

 

728x90