πŸ–₯️ CS

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ (ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°, μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°)

seonghye0n 2023. 6. 5. 16:25
CSλŠ” 면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ 책을 ν•™μŠ΅ν•˜λ©° 글을 올릴 μ˜ˆμ •μ΄λ‹€.
μ˜€λŠ˜μ€ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ— κ΄€ν•΄ 정리λ₯Ό 해보렀고 ν•œλ‹€. μžλ°”λ₯Ό 처음 κ³΅λΆ€ν•˜λ©΄ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λΌλŠ” 단어λ₯Ό 많이 듀을텐데 이것도 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ 쀑 ν•˜λ‚˜μ΄λ‹€.

 

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ κ°œλ°œμžμ—κ²Œ ν”„λ‘œκ·Έλž˜λ°μ˜ 관점을 κ°–κ²Œ ν•΄μ£ΌλŠ” 개발 방법둠이닀.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ ν”„λ‘œκ·Έλž¨μ„ μƒν˜Έ μž‘μš©ν•˜λŠ” κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ λ³Ό 수 있게 ν•œλ‹€. 즉 객체λ₯Ό κ΄€μ μœΌλ‘œ κ°œλ°œν•˜λŠ” 방법둠이라고 ν•  수 μžˆλ‹€. μžλ°”λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜λŠ” λŒ€ν‘œμ μΈ 언어인데 1.8λΆ€ν„°λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ λžŒλ‹€μ‹, μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ 슀트림 같은 κΈ°λŠ₯이 μΆ”κ°€λ˜μ—ˆλ‹€.

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ 크게 μ„ μ–Έν˜•, λͺ…λ Ήν˜•μœΌλ‘œ λ‚˜λ‰˜κ³  μ„ μ–Έν˜•μ€ ν•¨μˆ˜ν˜•μ΄λΌλŠ” ν•˜μœ„ 집합을 κ°–λŠ”λ‹€. λͺ…λ Ήν˜•μ€ λ‹€μ‹œ 객체지ν–₯, μ ˆμ°¨μ§€ν–₯으둜 λ‚˜λ‰œλ‹€. μ—¬κΈ°μ„œλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ μ†Œκ°œν•˜κ³  μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 별도 κ²Œμ‹œκΈ€λ‘œ μƒμ„Έν•˜κ²Œ μ •λ¦¬ν•˜λ €κ³  ν•œλ‹€.


μ„ μ–Έν˜•κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ€ '무엇을' ν’€μ–΄λ‚΄λŠ”κ°€μ— μ§‘μ€‘ν•˜λŠ” νŒ¨λŸ¬λ‹€μž„μ΄λ©°, "ν”„λ‘œκ·Έλž¨μ€ ν•¨μˆ˜λ‘œ 이루어진 것이닀." λΌλŠ” λͺ…μ œκ°€ 담겨 μžˆλŠ” νŒ¨λŸ¬λ‹€μž„μ΄κΈ°λ„ ν•˜λ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ„ μ–Έν˜• νŒ¨λŸ¬λ‹€μž„μ˜ 일쒅이닀.

 

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

int i = 9;
int j = 5;

System.out.println(Math.max(i, j));

μœ„μ™€ 같이 μ΅œλŒ“κ°’μ„ 좜λ ₯ν•˜λŠ” μ˜ˆμ œκ°€ μžˆλ‹€. μ—¬κΈ°μ„œ max()λŠ” 두 κ°’λ§Œ λ°›μ•„μ„œ 결과값을 λ°˜ν™˜ν•˜λŠ” 순수 ν•¨μˆ˜μ΄λ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 이와 같은 순수 ν•¨μˆ˜λ“€μ„ λΈ”λ‘μ²˜λŸΌ μŒ“μ•„ λ‘œμ§μ„ κ΅¬ν˜„ν•˜κ³  κ³ μ°¨ ν•¨μˆ˜λ₯Ό 톡해 μž¬μ‚¬μš©μ„±μ„ 높인 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 방식을 μ‚¬μš©ν•˜λŠ” λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€.

 

κ³ μ°¨ ν•¨μˆ˜

κ³ μ°¨ ν•¨μˆ˜λž€ ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό κ°’μ²˜λŸΌ λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ λ‘œμ§μ„ 생성할 수 μžˆλŠ” 것을 λ§ν•œλ‹€.

 

일급 객체

κ³ μ°¨ ν•¨μˆ˜λ₯Ό μ“°κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή μ–Έμ–΄κ°€ 일급 κ°μ²΄λΌλŠ” νŠΉμ§•μ„ κ°€μ Έμ•Ό ν•œλ‹€.

  • λ³€μˆ˜λ‚˜ λ©”μ„œλ“œμ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•  수 μžˆλ‹€.
  • ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 담을 수 μžˆλ‹€.
  • ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.

 

μžλ°”λŠ” λžŒλ‹€μ‹μ„ 톡해 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜λŠ”λ°, λžŒλ‹€μ‹μ΄ 일급 객체의 쑰건을 μΆ©μ‘±ν•˜λŠ”μ§€ μ•Œμ•„λ³΄λ €κ³  ν•œλ‹€.

1. λ³€μˆ˜λ‚˜ λ©”μ„œλ“œμ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•  수 μžˆλ‹€.

Consumer<String> consumer = (str) -> System.out.println(str);

consumer.accept("Hello World!");

μœ„μ˜ 예제λ₯Ό 보면 Consumer μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ„ 톡해 cλΌλŠ” λ³€μˆ˜μ— println ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•œ 것을 λ³Ό 수 μžˆλ‹€.

 

2. ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 담을 수 μžˆλ‹€.

public class LamdaTest {
	public static void main(String[] args) {
		printStr((str) -> System.out.println(str), "Hello World!");
	}

	public static void printStr(Consumer<String> consumer, String text) {
		consumer.accept(text);
	}
}

μœ„μ˜ 예제λ₯Ό 보면 printStr λ©”μ„œλ“œμ— λžŒλ‹€μ‹μ„ 톡해 ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 담은 것을 λ³Ό 수 μžˆλ‹€.

 

3. ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.

public class LamdaTest {
	public static void main(String[] args) {
		Consumer<String> consumer = helloWorld();
		consumer.accept("Hello World!");
	}

	public static Consumer<String> helloWorld() {
		return (str) -> System.out.println(str);
	}
}

μœ„μ˜ 예제λ₯Ό 보면 Consumer μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ„ λ°˜ν™˜ν•˜λŠ” helloWorld() λ©”μ„œλ“œμ—μ„œ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.


μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°

μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 둜직이 μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연속적인 계산 κ³Όμ •μœΌλ‘œ 이루어져 μžˆλ‹€. 일이 μ§„ν–‰λ˜λŠ” λ°©μ‹μœΌλ‘œ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ°λ§Œ ν•˜λ©΄ 되기 λ•Œλ¬Έμ— μ½”λ“œμ˜ 가독성이 μ’‹μœΌλ©° μ‹€ν–‰ 속도가 λΉ λ₯΄λ‹€. κ·Έλž˜μ„œ 계산이 λ§Žμ€ μž‘μ—… 등에 보톡 쓰인닀. λ‹¨μ μœΌλ‘œλŠ” λͺ¨λ“ˆν™”ν•˜κΈ°κ°€ μ–΄λ ΅κ³  μœ μ§€λ³΄μˆ˜μ„±μ΄ λ–¨μ–΄μ§„λ‹€λŠ” 점이 μžˆλ‹€. μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ λŒ€ν‘œμ μΈ μ˜ˆλ‘œλŠ” Cμ–Έμ–΄κ°€ μžˆλ‹€.

 

 

 

 

 

μ°Έκ³ 

면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ

λ°˜μ‘ν˜•