Do it! 알고리즘 입문: 자바 편 (19)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

Do it! 알고리즘 입문: 자바 편 (19)[책리뷰 & Book review]

by Life & study 2024. 2. 3.
반응형

 

 

 

  면접에 대해서.. Do it! 알고리즘 입문: 자바 편 (19)[책리뷰 & Book review]

IT 면접에서 똑똑하게 답변하는 방법은 다음과 같습니다:

-철저한 준비: 면접 전에 회사에 대한 정보와 해당 직무에 대한 충분한 지식을 갖추는 것이 중요합니다. 이는 면접관이 물어볼 수 있는 질문에 대한 답변을 미리 준비하는데 도움이 됩니다.

 

 

 

-명확하고 간결하게 답변하기: 면접관의 질문에 대해 명확하고 간결하게 답변하는 것이 중요합니다. 너무 장황하게 답변하면 중요한 포인트가 묻힐 수 있습니다.

 

: "당신이 이 직무에 가장 적합한 이유는 무엇인가요?"라는 질문에
"데이터 분석에 대한 깊은 이해와 다년간의 경험을 바탕으로 효과적인 인사이트를 제공할 수 있습니다
."라고 답변할 수 있습니다.

 

-구체적인 예제 제공: 가능하다면, 답변에 구체적인 경험 또는 예제를 포함시키는 것이 좋습니다. 이는 당신이 직무를 수행할 수 있는 능력을 실제로 보여주는 좋은 방법입니다.

 

"지난 프로젝트에서 데이터가 부족해 분석에 어려움을 겪었습니다. 그래서 팀원들과 함께 추가 데이터를 수집하는 방법을 모색했고, 결국 프로젝트를 성공적으로 완료할 수 있었습니다."라고 답변할 수 있습니다

 

-질문에 대한 이해: 면접관이 무엇을 묻는지 제대로 이해하는 것이 중요합니다. 필요하다면 질문을 다시 한번 확인하세요.

 

-긍정적인 태도 유지: 면접 도중에는 항상 긍정적인 태도를 유지하는 것이 중요합니다. 이는 면접관에게 좋은 인상을 남기는 데 도움이 됩니다.

 

-자신감 있는 태도: 자신의 능력에 대한 확신을 보여주는 것이 중요합니다. 이는 면접관에게 당신이 직무를 수행할 수 있는 능력을 갖추고 있다는 것을 보여줍니다.

 

-적절한 질문 준비: 면접이 끝날 때 면접관에게 질문할 기회가 주어질 수 있습니다. 이때 직무나 회사에 대한 관심을 보여주는 적절한 질문을 준비하는 것이 좋습니다.


for문의 방향성 

 

Spring 프로젝트에서는 대부분의 경우 컬렉션을 다루게 됩니다. 

따라서 향상된 for문과 스트림을 잘 이해하고 사용하는 것이 중요합니다.

향상된 for문: 컬렉션의 모든 요소에 순차적으로 접근할 때 사용하며, 코드가 간결해지고 가독성이 좋습니다. 

인덱스를 통한 접근이 필요하지 않은 경우에 주로 사용됩니다.


스트림(Stream API): Java 8 이후에 도입된 Stream API는 컬렉션의 요소를 람다식으로 처리할 수 있게 해 주며, 병렬 처리를 지원합니다. 따라서 대량의 데이터 처리에 효과적입니다. 

또한, map, filter, reduce 등의 연산을 통해 복잡한 데이터 처리를 간결하게 할 수 있습니다.

 


Java 8에서는 스트림과 람다를 전부 활용할 수 있습니다.

 Java 8이 이전 버전에 비해 주목받는 이유 중 하나가 바로 이 스트림과 람다의 도입 때문입니다.

스트림(Stream) 활용 범위:
스트림은 데이터를 추상화하여 다양한 연산을 수행할 수 있게 합니다.

 배열이나 컬렉션의 요소를 효과적으로 처리할 수 있으며, 

병렬 처리를 지원하여 대량의 데이터를 빠르게 처리할 수 있습니다.

스트림의 주요 메소드로는 map, filter, reduce 등이 있으며, 이를 통해 데이터의 변환, 필터링, 집계 등의 작업을 수행할 수 있습니다.

람다(Lambda) 활용 범위:
람다는 익명 함수를 생성하는 방법을 제공합니다. 이를 통해 간결하고 가독성 높은 코드를 작성할 수 있습니다.

람다는 주로 함수형 인터페이스(Functional Interface)의 인스턴스를 생성할 때 사용됩니다. 예를 들어, 스레드 생성, 이벤트 처리, 스트림 API의 메서드 등에 활용됩니다.

또한, 람다를 이용하면 클로저와 같은 고차 함수를 표현할 수 있습니다. 이는 함수를 다른 함수의 인자로 전달하거나, 함수에서 새로운 함수를 만들어 반환하는 등의 작업을 가능하게 합니다.


스트림(Stream)과 람다(Lambda)의 차이점

스트림과 람다는 서로 다른 개념입니다.

스트림(Stream)은 데이터의 흐름을 의미하며,

 Java 8에서 추가된 기능으로, 배열이나 컬렉션 등의 데이터를 효율적으로 처리할 수 있게 합니다.

람다(Lambda)는 익명 함수를 의미하며, 함수형 프로그래밍을 가능하게 합니다. 

람다는 메서드를 하나의 식(expression)으로 표현하며, 메서드를 람다 표현식으로 전달할 수 있습니다.



스트림 장단점


장점:

데이터를 더 빠르게 처리할 수 있습니다. 특히 병렬 스트림을 사용하면 멀티 코어 CPU의 성능을 활용할 수 있습니다.
가독성이 좋은 코드를 작성할 수 있습니다. 함수형 프로그래밍을 지원하므로 더 간결하고 직관적인 코드를 작성할 수 있습니다.


단점:

스트림 연산은 한 번만 수행할 수 있습니다. 한 번 사용한 스트림은 재사용할 수 없으므로, 다시 스트림을 생성해야 합니다.
스트림의 병렬 처리는 항상 빠르지 않습니다. 데이터량이 적거나, 연산이 복잡하지 않은 경우에는 오히려 성능이 저하될 수 있습니다.



람다 장단점


장점:

코드의 간결성을 증가시킵니다. 람다를 사용하면 익명 클래스를 생성하지 않고도 인터페이스의 메서드를 바로 구현할 수 있습니다.
함수형 프로그래밍을 가능하게 합니다. 이를 통해 더 효율적이고 간결한 프로그래밍이 가능합니다.
단점:

람다를 사용하면 코드가 복잡해질 수 있습니다. 특히 람다가 길어지거나 중첩되는 경우, 코드의 가독성을 해칠 수 있습니다.
디버깅이 어렵습니다. 람다는 익명 클래스를 사용하므로, 스택 트레이스에서는 익명 클래스의 정보만 표시됩니다.

 



향상된 for문과 람다 & 스트림의 차이점과 장단점
향상된 for문은 단순히 컬렉션의 각 요소에 순차적으로 접근하는 반면, 

람다와 스트림은 함수형 프로그래밍을 통해 데이터를 처리하는 데 있어 더 많은 유연성을 제공합니다.

향상된 for문의 주된 장점은 간결성과 직관성입니다. 각 요소에 대해 명확하게 반복 작업을 수행하므로 코드를 이해하기 쉽습니다. 하지만, 복잡한 데이터 처리나 병렬 처리를 위해서는 람다와 스트림이 더 효율적입니다.

람다와 스트림의 주된 장점은 표현력과 유연성입니다.

복잡한 데이터 처리를 간결하게 표현할 수 있으며, 병렬 처리를 통해 성능을 향상시킬 수 있습니다.

하지만, 코드가 복잡해지거나 이해하기 어려울 수 있습니다.

 

 

 

스트림 메서드에 대해서 

 

java의 Stream API에서 인기도와 활용도에 따라 중복을 제거하고 재조정해본 메서드 순위는 다음과 같습니다:

stream() / Stream.of() / Arrays.stream(): 컬렉션이나 배열에서 스트림 객체를 생성합니다.
filter(): 스트림의 요소 중 특정 조건을 만족하는 요소만 선택합니다.
map(): 스트림의 각 요소에 함수를 적용하고 결과를 새로운 스트림으로 반환합니다.
forEach(): 스트림의 각 요소에 대해 특정 작업을 수행합니다.
reduce(): 스트림의 요소를 하나의 값으로 축약합니다.
collect(): 스트림의 결과를 새로운 컬렉션에 모읍니다.
anyMatch(), allMatch(), noneMatch(): 스트림의 요소 중 조건을 만족하는 요소가 있는지, 모든 요소가 조건을 만족하는지, 조건을 만족하는 요소가 없는지를 검사합니다.
min(), max(), count(), sum(): 스트림의 요소에 대한 최소값, 최댓값, 개수, 합계 등을 계산합니다.
sorted(): 스트림의 요소를 정렬합니다.
limit(): 스트림의 요소 수를 제한합니다.
distinct(): 스트림의 중복 요소를 제거합니다.

 

 

 

 

 

 

 

 

jsp 에서 자바와 js 란

 


JSP(JavaServer Pages)는 서버에서 동적인 웹 페이지를 생성하는 기술로, Java 언어를 기반으로 합니다.

JSP/Java의 장단점

장점:

강력한 서버 사이드 처리: JSP/Java는 데이터베이스 접근, 네트워킹, 스레드 관리 등 복잡한 서버 사이드 로직을 처리하는 데 강력합니다.
객체 지향 프로그래밍: Java는 완전한 객체 지향 언어로, 코드의 재사용성과 유지 보수성을 높이는 데 도움이 됩니다.
플랫폼 독립성: Java는 JVM(Java Virtual Machine) 위에서 실행되므로, 다양한 플랫폼에서 동일한 코드를 실행할 수 있습니다.
[Java]

+ 강력한 서버 사이드 처리
+ 객체 지향 프로그래밍
+ 플랫폼 독립성

 



단점:

클라이언트 사이드 제한: Java는 클라이언트 사이드에서 동적인 웹 페이지를 만드는 데 제한적입니다. 이러한 작업은 주로 JavaScript를 통해 처리됩니다.
비교적 느린 실행 속도: Java는 인터프리트 언어이므로, 컴파일 언어에 비해 실행 속도가 느릴 수 있습니다.
[Java]

- 클라이언트 사이드 제한
- 비교적 느린 실행 속도
JavaScript의 장단점

 

 




[JavaScript]
장점:

동적 웹 페이지 생성: JavaScript는 클라이언트 사이드에서 동적인 웹 페이지를 만드는 데 탁월합니다.

 사용자와 상호작용하거나 페이지의 내용을 동적으로 변경하는 등의 작업을 처리할 수 있습니다.
비동기 처리: JavaScript는 비동기 처리를 지원하여 사용자 경험을 향상하는 데 유용합니다.


[JavaScript]

+ 동적 웹 페이지 생성
+ 비동기 처리


단점:

보안 문제: JavaScript 코드는 클라이언트 사이드에서 실행되므로, 

악의적인 사용자에게 의도치 않게 코드가 노출될 수 있습니다.
브라우저 호환성: 다양한 웹 브라우저에서 동일한 JavaScript 코드가 동일하게 작동하지 않을 수 있습니다.


[JavaScript]

- 보안 문제
- 브라우저 호환성


따라서, JSP/Java와 JavaScript는 각각 서버 사이드와 클라이언트 사이드에서 강점을 가지고 있으며, 

이 두 기술을 적절히 조합하여 사용하는 것이 일반적입니다.



 

 

 

 

 

향상된 for문은 배열이나 컬렉션의 모든 요소를 순회하는데 사용됩니다.

 

 

향상된 for문은 배열이나 컬렉션의 모든 요소를 순회하는데 사용됩니다. 

아래는 향상된 for문이 작동하는 과정을 시간 순서대로 설명한 것입니다.

double maxScore = 0;: 최대 점수를 찾기 위한 변수를 0으로 초기화합니다.

maxScore = 0


for(double score : scores) { ... }: 배열 scores의 첫 번째 요소부터 마지막 요소까지 순회합니다. 

이때 순회하는 각 요소는 score라는 변수에 저장됩니다. 

 

이 과정을 일련의 순서에 따라 설명하면 다음과 같습니다.


첫 번째 순회 (i = 0일 때)

score = scores[0] (사용자가 첫 번째로 입력한 점수)
if(score > maxScore) {
    maxScore = score;
}


이 경우, maxScore는 첫 번째 점수로 업데이트됩니다.
두 번째 순회 (i = 1일 때)

score = scores[1] (사자가 두 번째로 입력한 점수)
if(score > maxScore) {
    maxScore = score;
}


이 경우, maxScore는 첫 번째 점수와 두 번째 점수 중 더 큰 값으로 업데이트됩니다.
세 번째 순회 (i = 2일 때)

score = scores[2] (사용자가 세 번째로 입력한 점수)
if(score > maxScore) {
    maxScore = score;
}


이 경우, maxScore는 첫 번째, 두 번째, 세 번째 점수 중 가장 큰 값으로 업데이트됩니다.
위의 과정을 모든 요소를 순회할 때까지 반복합니다. 

이렇게 되면 maxScore는 배열 scores의 모든 요소 중 가장 큰 값이 됩니다.

 

 

 

반응형

댓글