본문 바로가기
반응형

분류 전체보기313

[Java] 람다(Lambda) & 스트림(Stream)(2) 이번에는 스트림(Stream)에 대해서 배워보자(JDK 8에 새롭게 추가된 것이기 때문에 I/O Stream 과는 다른 개념이다). ​스트림은 흐르는 시냇물을 뜻한다. 이처럼 자바에서 스트림은 컬렉션, 배열 등에 저장된 데이터들을 처리할 때 매번 따로 처리하지 않고 물 흘러가듯이 함수형 인터페이스(람다식)를 활용하여 연속적으로 처리해 주는 기능을 뜻한다. 이게 무슨 말인지 이해가 안 갈 수도 있으니 간단한 예제를 통해 이해해 보자. ​ 양의 정수를 가지는 리스트가 존재한다고 하자. 리스트에 10보다 큰 정수가 몇 개 존재하는지를 알기 위해서는 어떻게 해야 할까? 일반적으로는 for 문을 이용하여 리스트를 순차적으로 탐색하며 개수를 카운트할 것이다. List numbers = Arrays.asList(1,.. 2021. 7. 12.
[Java] 람다(Lambda) & 스트림(Stream)(1) 이번에 배워볼 내용은 JDK 8의 가장 큰 특징인 람다(Lambda)와 스트림(Stream)이다. 프로그래머스에서 다른 사람들의 풀이를 보면 가끔씩 보지 못한 이상한 문법들로 문제를 풀어낸 것을 볼 수 있다. 매번 저런 것도 있구나 하고 넘어갔었지만 이번 기회에 간단하게 한번 짚고 넘어가 보려 한다. ​람다 표현식(Lambda Expression)은 익명 클래스에서 발전된 개념으로 익명 클래스에 대해서 먼저 알아보자. ​ 익명 클래스는 단 하나의 객체만을 생성할 수 있는 클래스를 뜻한다. 자바에서 인터페이스를 구현하기 위해서는 인터페이스를 구현하는 클래스를 구현해 줘야 한다. 만약 인터페이스의 객체를 한 번만 사용할 것인데 이를 위해 클래스를 구현해야 한다면 비효율적일 것이다. 이를 개선하기 위해 굳이 .. 2021. 7. 12.
백준 3151 : 합이 0 https://www.acmicpc.net/problem/3151 3151번: 합이 0 Elly는 예상치 못하게 프로그래밍 대회를 준비하는 학생들을 가르칠 위기에 처했다. 대회는 정확히 3명으로 구성된 팀만 참가가 가능하다. 그러나 그녀가 가르칠 학생들에게는 큰 문제가 있었다. www.acmicpc.net [ 문제풀이 ] 예전에 풀어봤던 두용액문제랑 비슷한 유형인 것 같다. 3명의 코딩 실력 합이 0이 되어야 하기 때문에 2명의 코딩 실력을 선택하고 이들의 합을 0으로 만들 수 있는 코딩 실력을 가진 사람을 남은 범위에서 이분 탐색을 통해 찾아낸다. 다만, 정답이 될 수 있는 사람이 1명 이상일 수 있기 때문에 중복값의 범위를 탐색하기 위해 이분 탐색이 아닌 LowerBound와 UpperBound를 활.. 2021. 7. 12.
[Java] 가비지 컬렉터(Garbage Collector) C, C++은 개발자가 메모리를 직접 관리해야 하지만 Java에서는 개발자가 별도로 관리할 필요가 없이 JVM의 Garbage Collector에서 알아서 메모리를 관리해 준다. 가비지 컬렉터는 이름 그대로 쓰레기를 수집해 주는 뜻이다. 가비지 컬렉터를 이해하기 전에 쓰레기가 무엇을 뜻하는지 한번 알아보자. ​ Java에서 쓰레기는 Heap 메모리 영역에 생성된 객체들 중에 더 이상 참조되지 않는 객체들을 의미한다. 이게 무슨 뜻일까? 간단하게 다음과 같이 String 객체를 하나 선언했다고 하자. 이전 JVM 구조에서 메모리 영역을 공부할 때 스택 영역에는 지역 변수, 파라미터 등 임시 값, 힙 영역에는 new로 생성된 객체가 저장된다고 하였다. 1. String str = new String("Bef.. 2021. 7. 11.
[Java] JVM(Java Virtual Machine) 자바의 가장 큰 특징은 "Write Once, Run Everywhere!", 동일한 프로그램이 다양한 컴퓨터에서 실행이 가능하다는 점이다. 이를 가능하게 해주는 게 바로 JVM이다. ​보통의 프로그래밍 언어의 경우 소스 코드가 컴파일러에 의하여 기계어로 변환되어 컴퓨터에서 실행되도록 한다. 하지만 자바 컴파일러는 특정한 컴퓨터를 위한 코드를 생성하는 대신 가상적인 기계를 위한 코드를 생성한다. 이 코드는 바이트 코드(Byte Code), 중간 코드라고 불리며 자바 가상 기계(JVM)에 의해 해석되어서 실행된다. ​JVM이 바이트 코드를 해석한다는 것은 알겠다. 그렇다면 JVM의 구조는 어떤 식으로 이루어져 있으며 바이트 코드를 어떻게 해석하여 실행되도록 하는지 한 번 알아보자. JVM의 구성은 크게 4.. 2021. 7. 11.
트랜잭션 고립화 레벨(Transaction Isolation Level) 트랜잭션 고립화 레벨(Transaction Isolation Level)은 정규화, 인덱스, 트랜잭션 특징(ACID) 등 Database 면접 질문으로 자주 등장한다는 소리를 들었다. 따라서 이번 기회에 한번 공부 및 정리해보려고 한다. ​우선 Isolaion Level이 무엇인지 알아보기 전에 Isolation Level이 왜 필요한지부터 알아보자. ​ Database에서 가장 중요한 것 중 하나는 데이터의 무결성을 보장해줘야 한다는 것이다. 만약, A가 DB에서 데이터를 사용하고 있다고 하자. 이때 B가 A가 사용하고 있는 데이터를 변경한다면 어떻게 될까? 데이터가 변경된다면 A는 원하는 데이터를 제대로 사용할 수 없다. ​즉, 이런 상황을 방지하기 위해 데이터의 무결성을 보장해줘야 하는 것이다. ​.. 2021. 7. 11.
백준 1781 : 컵라면 https://www.acmicpc.net/problem/1781 1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라 www.acmicpc.net [ 문제풀이 ] 처음에는 데드라인이 현재 날짜 기준 이하인 문제들 중 가장 컵라면 개수가 많은 문제를 풀도록 하였다. 하지만 다음과 같은 반례가 존재하게 된다. 7 1 9 1 8 2 200 2 99 3 100 5 999 5 150 내가 생각한 방법은 1-9, 2-200, 3-100, 5-999, 5-150을 선택하게 되지만 정답은 2-200, 2-99, 3-100, 5-999, 5-150을 선택하는 것이다.. 2021. 7. 11.
개인키(대칭키) vs 공개키(비대칭키) 특정 웹사이트나 게임 같은 곳에 로그인하기 위해서는 ID와 Password를 입력할 것이다. 예를 들어 다음과 같이 로그인 정보를 입력하다고 하자. 만약 로그인을 할 때 ID는 그렇다 치고 Password를 현재 상태 그대로 해당 서버의 DB에 저장한다면 어떻게 될까? 이는 외부로 노출될 경우 쉽게 나의 비밀번호를 알 수 있기 때문에 보안상 굉장히 위험하다. ​이를 해결하기 위해 Password를 평문 상태로 저장하지 말고 특정한 알고리즘을 적용하여 암호화된 Password를 서버의 DB에 저장한다. 이러한 과정을 암호화라고 한다. ​또한, 반대로 암호화된 Password를 다시 평문으로 복구시키는 과정을 복호화라고 한다. ​물론 암호화 과정을 통해 100%로 노출을 막을 수 있는 것은 아니지만 암호화하.. 2021. 7. 10.
NoSQL 최근에 NoSQL이라는 데이터 저장기술이 많이 활용된다고 들었다. 내가 주로 사용하는 데이터 저장기술은 MySQL이지만 아무래도 최근 떠오르는 기술이기 때문에 면접에서도 자주 언급이 된다고 하길래 간단하게 한 번 정리해보려고 한다. ​ NoSQL은 Not Only SQL의 약자로써 기존 관계형 데이터베이스(RDBMS)보다 더 융통성 있는 데이터 모델을 사용하고 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공하는 데이터 저장기술을 의미한다. ​이를 통해 NoSQL 데이터베이스는 단순 검색 및 추가 작업에 있어서 매우 최적화된 키값 저장 기법을 사용하여 응답속도나 처리 효율 등에 있어서 매우 뛰어난 성능을 나타낸다. ​ NoSQL의 특징은 다음과 같다. 1. 관계형 모델을 사용하지 않으며 테이블 간 연.. 2021. 7. 10.
반응형