JiYoung Dev πŸ–₯

[μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜] λ°°μ—΄ (2023.03.30) λ³Έλ¬Έ

full stack/JAVA

[μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜] λ°°μ—΄ (2023.03.30)

Shinjio 2023. 3. 30. 18:45

자료/정보/자료ꡬ쑰

자료 

ν˜„μ‹€ μ„Έκ³„λ‘œλΆ€ν„° μˆ˜μ§‘ν•œ μ‚¬μ‹€μ΄λ‚˜ κ°œλ…μ˜ κ°’ λ˜λŠ” μ΄λ“€μ˜ 집합

μ‚¬μ „μ²˜λ¦¬, 가곡이 μ•ˆ 된 μˆ˜μ§‘ μƒνƒœ

 

정보 

νŠΉμ •ν•œ μš©λ„λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ '자료'λ₯Ό μ²˜λ¦¬ν•˜κ³  κ°€κ³΅ν•œ ν˜•νƒœ

 

자료ꡬ쑰

μžλ£Œλ“€μ„ 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 쑰직적, μ²΄κ³„μ μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν‘œν˜„ν•œ 것

 

λ°°μ—΄ (Array)

μ—¬λŸ¬κ°€μ§€ 데이터λ₯Ό ν•œ λ²ˆμ— 보관할 수 μžˆλŠ” ν˜•νƒœ

λ™μΌν•œ μžλ£Œν˜•(μ •μˆ˜ν˜•, λ¬Έμžμ—΄ λ“±)의 데이터λ₯Ό μ—°μ†λœ 곡간에 μ €μž₯ν•˜κΈ° μœ„ν•œ 자료ꡬ쑰

인덱슀(index)와 μΈλ±μŠ€μ— λŒ€μ‘ν•˜λŠ” λ°μ΄ν„°λ“€λ‘œ 이루어진 연속적인 자료ꡬ쑰

 

λ°°μ—΄μ˜ νŠΉμ§•

1.λ™μΌν•œ μžλ£Œν˜•μ˜ 데이터듀이 순차적으둜 μ €μž₯  (데이터듀에 μˆœμ„œκ°€ 있음)

    > μΈλ±μŠ€μ— λŒ€μ‘ν•˜λŠ” λ°μ΄ν„°λ“€λ‘œ 이루진 자료 ꡬ쑰

        β€» 인덱슀 : κ°€μž₯ 첫번째 λ“€μ–΄ μžˆλŠ” λ°μ΄ν„°λŠ” 0, κ·Έ λ‹€μŒ λ°μ΄ν„°λŠ” 1, ... → λ°μ΄ν„°μ˜ μˆœμ„œ

    > λ°˜λ³΅λ¬Έμ„ μ΄μš©ν•˜μ—¬ μ²˜λ¦¬ν•˜κΈ°μ— μ ν•©ν•œ 자료 ꡬ쑰

2. μΈλ±μŠ€μ— λŒ€μ‘ν•˜λŠ” λ°μ΄ν„°λ“€λ‘œ 이루어진 자료 ꡬ쑰

    > ν•œ λ²ˆμ— λ§Žμ€ λ©”λͺ¨λ¦¬ 곡간 μ„ μ–Έ κ°€λŠ₯

    > λ³€μˆ˜λŠ” 값을 ν•˜λ‚˜ 밖에 μ €μž₯ν•˜μ§€ λͺ»ν•˜λ©°, ν•˜λ‚˜μ˜ κ°’λ§Œ μ €μž₯ν•  수 μžˆλŠ” 만큼의 λ©”λͺ¨λ¦¬λ§Œ 생성

3. μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘

    > μΈλ±μŠ€λŠ” λ°°μ—΄μ˜ μ‹œμž‘ μœ„μΉ˜λ‘œλΆ€ν„° μƒλŒ€μ  μœ„μΉ˜

 

배열을 ν™œμš©ν•˜λ©΄ ν•œλ²ˆμ— 보관이 κ°€λŠ₯ν•˜κ³  ν•œλ²ˆμ— 처리 κ°€λŠ₯ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯

λ³€μˆ˜λŠ” 각각 λ‹€λ₯Έ 곡간에 μ €μž₯

 

λ°°μ—΄μ˜ μ„ μ–Έ 및 생성

λ°°μ—΄μ˜ 데이터λ₯Ό 닀루기 μœ„ν•΄μ„œλŠ” λ°°μ—΄μ˜ 0번 인덱슀의 μ£Όμ†Œκ°’(μ°Έμ‘°κ°’, reference)을 μ•Œκ³  μžˆμ–΄μ•Ό 함

 

λ°°μ—΄ 생성

데이터λ₯Ό μ €μž₯ν•  λ°°μ—΄ 곡간을 ν• λ‹Ήλ°›λŠ” 단계

new int[5];     // μ •μˆ˜ν˜• 5개λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ°°μ—΄ 생성
new μžλ£Œν˜•[λ°°μ—΄μ˜ν¬κΈ°]

new (λ‚΄κ°€ ν•„μš”ν•œ 도ꡬλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•  λ•Œ μ“°λŠ” ν‚€μ›Œλ“œ)

 

λ°°μ—΄ 레퍼런슀 λ³€μˆ˜(reference variable) μ„ μ–Έ

이 μ„ μ–Έλ§ŒμœΌλ‘œλŠ” λ°°μ—΄ 곡간이 ν• λ‹Ήλ˜μ§€ μ•ŠμœΌλ―€λ‘œ λ°°μ—΄ 생성을 ν•΄μ€˜μ•Ό 함. 

arr은 λ°°μ—΄ 곡간에 λŒ€ν•œ μ£Όμ†Œκ°’(λ ˆνΌλŸ°μŠ€κ°’)을 가지며 κ·Έ μžμ²΄κ°€ 배열은 μ•„λ‹˜. 

int[] arr ;
μžλ£Œν˜•[] λ³€μˆ˜μ΄λ¦„

arr : λ°°μ—΄μ—μ„œ 0번 μΈλ±μŠ€κ°€ 가지고 μžˆλŠ” μ£Όμ†Œ

0번 μΈλ±μŠ€κ°€ λ©”λͺ¨λ¦¬μƒμ— 어디에 μ‘΄μž¬ν•˜λŠ”μ§€, λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 가지고 있음. μ£Όμ†Œλ₯Ό μ•Œμ•„μ•Ό λ©”λͺ¨λ¦¬μƒ 데이터λ₯Ό μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— λ°°μ—΄ 레퍼런슀 λ³€μˆ˜λ₯Ό 선언을 ν•΄μ•Ό 배열을 μ‚¬μš©ν•  수 있음

 

β€» μΈλ±μŠ€κ°€ 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” 이유

0번 인덱슀λ₯Ό κΈ°μ€€μœΌλ‘œ μ£Όμ†Œλ₯Ό μ°ΎκΈ° λ•Œλ¬Έ

arr이 가지고 μžˆλŠ” 0번 인덱슀의 μ£Όμ†Œλ‘œλΆ€ν„° λͺ‡ μΉΈ λ–¨μ–΄μ ΈμžˆλŠ”μ§€ 확인

 

레퍼런슀 λ³€μˆ˜(reference variable)

λ©”λͺ¨λ¦¬ 상에 μƒμ„±λœ μΈμŠ€ν„΄μŠ€μ™€ λ©”μ„œλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ”λ° μ‚¬μš©λ˜λŠ” λ³€μˆ˜

λ°°μ—΄ μ„ μ–Έν•˜λ©΄ λ©”λͺ¨λ¦¬ 상에 μ—°μ†λœ 곡간 ν• λ‹Ή

→ 배열이 λ©”λͺ¨λ¦¬ 상 어디에 μƒμ„±λ˜μ—ˆλŠ”μ§€ κ·Έ 레퍼런슀 κ°’(μ£Όμ†Œ κ°’, μ°Έμ‘° κ°’)을 κΈ°μ–΅ν•˜κ³  μžˆλŠ” λ³€μˆ˜ 

 

자료ꡬ쑰λ₯Ό 이해할 λ•ŒλŠ” λ©”λͺ¨λ¦¬λ₯Ό 같이 이해해야 함 (λ©”λͺ¨λ¦¬μ˜ ꡬ쑰)

μ½”λ“œμ˜μ—­

μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œ

μ½”λ“œλŠ” 이미 μž‘μ„±λ˜μ–΄ μžˆμœΌλ―€λ‘œ 크기가 μ •ν•΄μ Έ 있음

 

데이터 μ˜μ—­ (Static area)

ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘ν•˜μžλ§ˆμž λ©”λͺ¨λ¦¬μƒμ— 올라감

 

μ „μ—­ λ³€μˆ˜

μ „μ—­λ³€μˆ˜λž€, 클래슀 λ‚΄ μ–΄λ””μ„œλ“  μ‚¬μš© κ°€λŠ₯ν•œ λ³€μˆ˜λ‘œ 클래슀 이름 λ°”λ‘œ 밑에 μž‘μ„±λ˜κ³  λ©”μ„œλ“œ 밖에 μ„ μ–Έλ˜μ–΄ μžˆμ–΄μ•Ό 함.

λ³€μˆ˜λŠ” μ„ μ–Έμœ„μΉ˜μ— 따라 μ „μ—­λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜λ‘œ λ‚˜λˆ μ§€λŠ”λ° 클래슀 λ‚΄ μ–΄λ””μ„œλ“  μ‚¬μš©ν•  수 있으면 μ „μ—­λ³€μˆ˜, νŠΉμ • ꡬ역({}) μ•ˆμ—μ„œλ§Œ μƒμ„±λ˜μ–΄ κ·Έ μ§€μ—­μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜λŠ” μ§€μ—­λ³€μˆ˜

정적(static) λ³€μˆ˜

ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ˜μžλ§ˆμž μ„ μ–Έλ˜λŠ” λ³€μˆ˜λ‘œ μ„ μ–Έ μœ„μΉ˜λŠ” 상관 μ—†μŒ (staticμ΄λΌλŠ” ν‚€μ›Œλ“œκ°€ λΆ™μ–΄μžˆμŒ)

μžλ°” μ–Έμ–΄μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” "동적 λ‘œλ”©μ„ 지원"ν•œλ‹€λŠ” 것. 
μžλ°” μ–Έμ–΄μ—μ„œλŠ” λ³€μˆ˜, 객체λ₯Ό μ„ μ–Έν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±. λ§Œμ•½ 동적 λ‘œλ”© 지원이 μ•ˆλœλ‹€λ©΄ ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•˜μžλ§ˆμž μ½”λ“œ μƒμ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜, 객체λ₯Ό μƒμ„±ν•΄μ„œ μ „λΆ€ λ©”λͺ¨λ¦¬μƒμ— ν• λ‹Ήν•΄μ€˜μ•Ό 함. μ΄λ ‡κ²Œ ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•˜μžλ§ˆμž ν”„λ‘œκ·Έλž¨ 전체에 λŒ€ν•΄ 곡간을 ν• λ‹Ήν•˜λ©΄ λ©”λͺ¨λ¦¬ ν™œμš©μ΄ λΉ„νš¨μœ¨μ μž„. 
μ΄λŸ¬ν•œ λΉ„νš¨μœ¨μ„ 쀄여 λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μžλ°”λŠ” 객체/λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ² λ‹€κ³  ν–ˆμ„ λ•Œ 객체/λ³€μˆ˜λ₯Ό 생성함. κ·ΈλŸ¬λ‚˜ μ •μ λ³€μˆ˜λŠ” 그렇지 μ•ŠμŒ. μ •μ λ³€μˆ˜λŠ” 무쑰건 μ²˜μŒμ— λ§Œλ“€μ–΄λ‘λŠ” λ³€μˆ˜λ‘œ ν”„λ‘œκ·Έλž¨ μ‹œμž‘λΆ€ν„° μ’…λ£Œκ°€ λ λ•ŒκΉŒμ§€ λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆμ–΄ μ–΄λ””μ„œλ“  μ‚¬μš©ν•  수 있음.

μ •μ λ³€μˆ˜μ™€ μ „μ—­λ³€μˆ˜λŠ” κ°œμˆ˜κ°€ μ •ν•΄μ Έ 있음 → 크기가 κ³ μ •λ˜μ–΄ 있음

 

νž™ μ˜μ—­ (Heap area)

μ‚¬μš©μžμ˜ 동적할당(ν”„λ‘œκ·Έλž¨ 싀행에 따라 크기가 달라짐)

μ°Έμ‘°ν˜•μ˜ 데이터 νƒ€μž…μ„ κ°–λŠ” 객체(Random, Scanner λ“±), λ°°μ—΄ λ“±(new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ§Œλ“œλŠ” μ• λ“€)을 μ €μž₯ν•˜λŠ” μ˜μ—­

β€» μ°Έμ‘°κ°’(μ£Όμ†Œ)λŠ” stackμ˜μ—­μ— μ €μž₯

μ‹€μ œλ‘œ μ¨μ•Όν•˜λŠ” 값듀이 μ €μž₯λ˜λŠ” μ˜μ—­

 

μŠ€νƒ μ˜μ—­ (Stack area)

ν”„λ‘œκ·Έλž¨ 싀행에 따라 크기가 달라짐

κΈ°λ³Έμžλ£Œν˜•μ˜ 데이터에 ν•΄λ‹Ήν•˜λŠ” μ§€μ—­λ³€μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” μ˜μ—­

객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•΄ λ§Œλ“  레퍼런슀 λ³€μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” μ˜μ—­

λ©”μ†Œλ“œκ°€ 호좜될 λ•Œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜λ©° μ’…λ£Œλ˜λ©΄ ν•΄μ œ

 

λ°°μ—΄ μ„ μ–Έ 및 μƒμ„±μ‹œ μ£Όμ˜μ‚¬ν•­

레퍼런슀 λ³€μˆ˜ μ„ μ–Έ μ‹œ λ°°μ—΄μ˜ 크기λ₯Ό 지정할 수 μ—†λ‹€

int[] arr = new int[5];
↑                     ↑ 크기 5인 μ •μˆ˜ν˜• 배열생성 (νž™ μ˜μ—­μ— μ €μž₯)
μƒμ„±ν•œ λ°°μ—΄μ˜ νž™μ˜μ—­ 상 μ£Όμ†Œκ°’μ„ μ €μž₯ → [] μ•ˆμ— 크기λ₯Ό 지정할 수 μ—†μŒ

 

λ°˜λ“œμ‹œ 배열이 μƒμ„±λœ ν›„ μ ‘κ·Όν•  수 μžˆλ‹€

int[] arr;   → λ°°μ—΄μ˜ μ£Όμ†Œκ°’μ„ μ €μž₯ν•  κ³΅κ°„λ§Œ λ§Œλ“€μ–΄ 놓은 것. 레퍼런슀 λ³€μˆ˜ μ„ μ–Έ (λ°°μ—΄ 생성 X)
arr[0]        → 배열이 μƒμ„±λœ 것이 μ•„λ‹ˆλ―€λ‘œ 배열에 μ ‘κ·Ό λΆˆκ°€

int[] arr;   → 레퍼런슀 λ³€μˆ˜ μ„ μ–Έ
arr = new int[];   → λ°°μ—΄ 생성
arr[0] μ ‘κ·Ό κ°€λŠ₯   

 

각 μ›μ†Œμ— μ ‘κ·Όμ‹œ []사이에 인덱슀λ₯Ό 적어 μ ‘κ·Ό 

arr[0];         -- arr이 가지고 μžˆλŠ” μ£Όμ†Œκ°’μ„ 가지고 배열을 μ°Ύμ•„κ°€μ„œ 0번 μΈλ±μŠ€κ°’ 가지고 올래
arr[4];         -- 4번 인덱슀 κ°’ 가지고 올래

 

λ°°μ—΄μ˜ μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•œλ‹€

λ ˆνΌλŸ°μŠ€λ³€μˆ˜κ°€ 0번 μΈλ±μŠ€κ°€ 어디에 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό μ €μž₯ν•˜κ³  있기 λ•Œλ¬Έ

 

λ°°μ—΄ μ„ μ–Έ 및 생성 μ½”λ“œ μž‘μ„±

 

λ°°μ—΄μ˜ λ²”μœ„λ₯Ό λ„˜μ–΄μ„°λŠ”λ° μ½”λ“œ 상 였λ₯˜ ν‘œκΈ°(λΉ¨κ°„ 밑쀄)κ°€ μ•ˆλ˜λŠ” 이유
: μžλ°”λŠ” 동적 λ‘œλ”©μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— λ°°μ—΄, 객체의 경우 μ‹€ν–‰ν•˜κΈ° μ „κΉŒμ§€λŠ” arr의 크기λ₯Ό μ•Œ 수 μ—†μŒ

try ~ catch μ˜ˆμ™Έμ²˜λ¦¬λ¬Έ ν™œμš©ν•˜μ—¬ 였λ₯˜μ½”λ“œ λŒ€μ‹  λ‹€λ₯Έ λ©”μ‹œμ§€ 좜λ ₯ κ°€λŠ₯

 

 

λ°°μ—΄ 생성 μ‹œ 값을 μ•Œκ³  μžˆλŠ” 경우
int[] arr = { κ°’1, κ°’2, ... ,  κ°’n }

 

레퍼런슀 μΉ˜ν™˜κ³Ό λ°°μ—΄ 곡유

int intArray[] = new int[5] ;
int myArray[] = intArray ;   // 레퍼런슀 μΉ˜ν™˜. myArrayλŠ” intArray와 λ™μΌν•œ 배열을 μ°Έμ‘°ν•œλ‹€. 

참쑰값이 κ°™μœΌλ©΄ 같은 객체λ₯Ό 가리킨닀

 

 

λ°°μ—΄μ˜ 크기

• 레퍼런슀 λ³€μˆ˜ μ„ μ–Έ μ‹œ κ²°μ •λ˜μ§€ μ•ŠμŒ

• λ°°μ—΄ μƒμ„±μ‹œ κ²°μ •λ˜λ©° λ°”κΏ€ 수 μ—†μŒ (크기 지정이 μ€‘μš”!)

• λ°°μ—΄μ˜ ν¬κΈ°λŠ” λ”°λ‘œ λ‹€λ£° 수 있음 → length 속성

 

λ°°μ—΄μ˜ 크기 속성(length) ν™œμš©

 

μ˜¬λ°”λ₯Έ λ°°μ—΄ μ„ μ–Έ 문자 → 6, 7

1. 레퍼런슀 λ³€μˆ˜λͺ… μ—†μŒ. λ°°μ—΄ μƒμ„±μ‹œ [ ] μ‚¬μš©ν•΄μ•Ό 함
2. avgλŠ” μ˜¬λ°”λ₯Έ μžλ£Œν˜•μ΄ μ•„λ‹ˆλ‹€
3. 레퍼런슀 λ³€μˆ˜ μ„ μ–Έμ‹œμ—λŠ” 크기 μ„ μ–Έ λΆˆκ°€λŠ₯
4. λ°°μ—΄ μƒμ„±μ‹œ 자료 크기 무쑰건 지정해야 함
5. λ°°μ—΄ μƒμ„±μ‹œ 크기 지정을 μœ„ν•΄ [ ] μ‚¬μš©ν•΄μ•Ό 함
8. 레퍼런슀 λ³€μˆ˜λͺ…μ—μ„œλŠ” 크기 지정 μ•ˆλ¨

 

λ°°μ—΄μ‹€μŠ΅

 

λ°°μ—΄μ˜ λͺ¨λ“ κ°’ 좜λ ₯ ;
Arrays 도ꡬ(객체)κ°€ 가지고 μžˆλŠ” toString λ©”μ„œλ“œ 호좜

toString λ°˜ν™˜νƒ€μž… ? String

 

β€» μ •μˆ˜ν˜• λ°°μ—΄μ˜ ꡬ성 μš”μ†ŒλŠ” μžλ™μœΌλ‘œ 0으둜 μ΄ˆκΈ°ν™”