자바 8

자바 기초부터 모던 자바까지 - 스트림(stream)편

목표 : 람다를 기준으로 스트림 문법을 이해한다. 이전 포스팅으로, JAVA가 인터페이스를 통해 람다식을 어떻게 만들어 왔는지 히스토리를 보았다. 그리고, java에서는 앞서 배운 함수형 인터페이스의 주요 표현들인 Consumer, Function, Predicate, Supplier들이 어떻게 사용되어 지는지 Stream을 보면서 이해해보도록 하자. Stream(스트림) 부터 알아보자. 보통 Stream(스트림)이라는 단어는 어떤 데이터의 흐름을 뜻한다. 특히, java.io에서는 I/O 프로그래밍을 사용하는 클래스 명에 Stream이라는 단어를 사용하고 있다. 그러나, 지금 배우고자 하는 Stream은 주로 컬렉션 프레임워크나 이와 유사한 형태의 데이터를 처리할 때 도움을 줄 수 있는, 자바 8에서 ..

Programming/Java 2022.07.16

[java] Find Minimum in Rotated Sorted Array

[참고문제] : https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ Find Minimum in Rotated Sorted Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 이미 정렬되어 있지만, Rotate되어있는 배열에 대해 최소값을 찾는 문제다. 생각의 흐름 - 양쪽에서 바라보자. 이미 정렬이 되어 있으니, 최소값을 찾는 것에만 집중해야 한다. 그 중에서도 양쪽에서 ..

Algorithm 2022.07.14

자바 기초부터 모던 자바까지 - 람다편

목표 : 람다가 필요한 이유와 자바에서 적용된 내용을 알아본다. 이전 함수형 프로그래밍 포스트에 이어서, 람다에 대해 하나씩 알아가볼 예정이다. 자바에 람다와 함수형 프로그래밍이 왜 필요하지? 아래와 같이 정리해보고자 한다. 이름 없는 함수를 선언할 수 있다. 메서드는 반드시 특정 클래스나 인터페이스 안에 포함되어야 하고 메서드의 이름이 있어야 하지만, 람다 표현식은 이러한 제약에서 벗어난다. 즉, 유연성이 생긴다. 소스 코드의 분량이 획기적으로 줄어들 수 있다. 반복적인 작업이 필요한 기존소스의 비효율성을 낮출 수 있다. 코드를 파라미터로 전달할 수 있다. 외부에서 동작을 정의해서 메서드에 전달할 때 편리하게 사용할 수 있다. 기존의 자바에서 탈피하여 지금 우리가 람다를 공부하는 이유다. 람다 표현식을..

Programming/Java 2022.07.06

자바 기초부터 모던 자바까지 - 함수형 프로그래밍 편

목표 : 자바에서의 함수형 프로그래밍에 대해 알아본다. 왜 함수형 프로그래밍이 도입되기 시작했을까? 객체 지향 프로그래밍의 정수였던 java에서 왜 새로운 패러다임을 도전하게 된 것일까? 결국에는 애플리케이션의 요구 조건 변경에 대응하는 절차였다. 먼저 그 흐름을 따라가 보도록 하자 여행 정보를 조회하는 클래스가 있다. 국가명을 통해 조회하며, 그 결과를 리스트로 제공한다. SearchTravel 이라는 이 클래스에는 searchTravelInfo(String country) 라는 메소드로 이를 제공하고 있었다. 새로운 요구사항이 등장했다. 국가명도 제공해야하지만, 도시명으로도 제공해야했다. 그에 따라 2가지 변경 방안이 등장하게 된다. 도시 정보를 파라미터로 받아서 처리할 수 있는 메서드를 추가한다. ..

Programming/Java 2022.07.03

자바 기초부터 모던 자바까지 - 인터페이스 편

목표 : 자바의 인터페이스에 대해 알아본다. 인터페이스 인터페이스가 무엇인지 그에 대한 개념을 설명하지는 않겠다. 자바는 다중상속을 지원하지 않는다거나, 추상화에 대한 내용을 모른다면 잘 정리된 다른 포스팅을 찾아 보도록 하자. 자바8부터 람다와 함수형 프로그래밍을 적용하기 위해 인터페이스를 활용하기 시작한다. 그럼 기존의 인터페이스에는 무슨 문제점이 있었고, 어떻게 진화해 온 것인지 먼저 알아보려 한다. 인터페이스의 문제점 인터페이스는 주로 여러 개의 구현체를 통일화한 명세서로 정의하기 위해 사용한다. 그러면 인터페이스를 구현한 클래스들은 동일한 메소드 명으로 통일성을 확보하고, 구현 방법에 상관없이 자신이 원하는 메서드를 호출해 목적을 이룰 수 있다. 그러나, 가장 치명적인 단점은 명세서기 때문에 수..

Programming/Java 2022.07.03

자바 기초부터 모던 자바까지 - 내부&중첩 클래스편

목표 : 자바의 내부&중첩 클래스에 대해 알아본다. Inner Class 클래스에 전반적인 내용을 모두 적진 않을 것이다. 객체 지향의 거대한 3요소인 상속, 다형성, 캡슐화 등에 대해서는 너무나도 많은 자료가 있으니 별도로 알아보도록 하자. 지금 알아볼 것은 Class안의 Class의 동작에 대해 알아볼 에정이다. Inner Class(내부 클래스)는 중첩 클래스라고도 표현하는 사람도 많지만, 약간 다르게 설명하는 경우도 있다. 중첩 클래스는 클래스나 인터페이스 내부에 static으로 선언된 클래스다. 포스팅을 위해 참고한 자료에서도 중첩 클래스는 내부 클래스와 동일 시하여 표현하고 있어, 하기 내용이 조금 헤깔릴 수 있으나 명확하게 구분하는 사람도 있으니 참고하도록 하자. 클래스 내부에 선언한 클래스..

Programming/Java 2022.07.02

자바 기초부터 모던 자바까지 - 객체 편

목표 : 자바의 객체의 개론을 알아본다. Object 객체가 무엇인지를 정의하고자 한다기 보다, 내가 아는 내용을 정리하고자 한다. 세상 모든 것을 개체라고 할 수 있다. 개체 중에서 내가 관심을 가지는 영역을 객체로 바라보자. 그리고, 그 객체의 성격과 행동, 서로간의 소통들을 정의해나갈 수 있을 것이다. 결국 그 객체에 대해 내가 관심이 있고, 다루고자 하는 영역들을 성격과 행동이라는 용어로 정리하다 보면 특정해 나갈 수 있게 된다. 이를 클래스라는 용어로 불러본다. 사람이라는 객체가 있다. 철학적인 물음으로 사람이란 무엇인가?에 대해서 대답하고자 하는건 아니다. (나라는 것은 무엇인가? 라는 질문으로 넘어가면 철학과 과학의 오묘한 결합이 나오게 된다) 그렇지만 우리가 원하는 어떠한 결과물을 위해서는..

Programming/Java 2022.07.02

자바 기초부터 모던 자바까지 - 기초편

목표 : 자바의 가장 기초적인 내용부터 알아본다. java만큼 아직 대중적인 프로그래밍 언어는 없다. 점차 포스팅으로 모던 자바에 대해 정리하겠지만, 알았으면서도 오랜만에 보면 새로울 수 있는 포인트들이 있다. 변수가 무엇인지, 자료형이 무엇인지 이런 내용은 아니지만, 조금은 익숙해져야 할 내용으로 작성하려 한다. 상수와 리터럴이 뭐지? 상수(constant)는 알다 시피, 변하지 않는 수를 말하고 final이라는 키워드를 쓴다. final을 쓰면, 변수는 상수가 되고, 상수는 변할 수 없다. 리터럴(literal)은 프로그램에서 사용하는 모든 숫자, 값, 논리 값 (ex> 10, 3.14, 'A', true)을 의미 한다. 그 중에서 리터럴은 상수풀(constant pool) 영역에 저장되어 있다. 변..

Programming/Java 2022.07.01