일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 최단경로
- 음수가 포함된 최단경로
- 코딩테스트
- 기술면접
- 거쳐가는 정점
- disjoint set
- 동적계획법
- scikit-learn
- 벨만 포드 알고리즘
- BufferedReader
- 다익스트라
- onclick
- Python
- 우선순위큐
- bottom-up
- Android Studio
- spring boot
- 플로이드 와샬
- 엔테크서비스
- top-down
- kmeans
- Django
- Controller
- clean code
- Java
- union-find
- 유니온 파인드
- 직무면접
- dto
- compiler
- Today
- Total
목록Developer's_til/그외 개발 공부 (20)
춤추는 개발자
✅ Stream의 중첩 구조 제거하기 [ FlatMap이란? ] 간혹, 이중 배열 또는 이중 리스트로 되어 있는 데이터를 1차원으로 처리해야 하는 경우가 발생합니다. 이럴 때 중첩 구조를 한 단계 제거하기 위한 중간 연산으로 flatMap을 사용합니다. flatMap은 Function 함수형 인터페이스를 매개 변수로 받고 있는데, 이 매개 변수는 Stream을 extends하여 구현한 객체여야 합니다. 예를 들어, 아래와 같이 요소가 문자열 배열(String[])인 Stream이 있다고 가정하겠습니다. Stream strArrstream = Stream.of( new String[] {"abc", "def", "ghi"}, new String[] {"ABC", "DEF", "GHI"} ); 각 요소의 문..
✅ Stream 생성하기 앞선 포스팅에서 설명한대로 Stream API를 사용하려면 먼저, Stream 객체를 생성해야 합니다. 사용하려는 객체마다 Stream 객체를 생성하는 방법이 다른데, 여기서는 Collection과 Array에 대해서 알아보도록 하겠습니다. // List로부터 Stream 생성 List stones = Arrays.asList("mind", "soul", "power", "time", "space", "reality"); Stream listStream = stones.stream(); // array로 부터 Stream 생성 String[] stones = {"mind", "soul", "power", "time", "space", "reality"}; Stream arrStr..
람다식은 Java를 객체지향 언어인 동시에 함수형 프로그래밍이 가능하게 만들었습니다. 지난 포스팅에서 Stream API를 통해 함수형 프로그래밍의 장점들을 살펴보았습니다. 이번 포스팅에서는 Stream 연산들에 매개변수로 활용되는 람다식과 함수형 인터페이스에 대해 알아보겠습니다. ✅ 람다식(Lambda Expression)이란? 간단히 말하자면 메서드를 하나의 식(Expression)으로 표현한 것입니다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다. 람다식은 함수형 인터페이스를 반환하기 때문에 Streamp API를 정확히 이해하기 위해서는 람다식과 함수형 인터페이스에 대해 알고 있어야 합니다. 메서드를 람다식으로 표현하기 때문에 메서드의 이름과 반환값이 없어지므로, 익명 함수..
✅ Stream API란? Java는 객체지향 언어로 함수형 프로그래밍이 불가능했습니다. 하지만, JDK8부터 Stream API와 람다식, 함수형 인터페이스가 등장하면서 Java를 활용한 함수형 프로그래밍이 가능해졌습니다. 그 중 Stream API는 데이터를 추상화하여 처리하는데 자주 사용되는 함수들을 정의해두었습니다. (여기서 데이터 추상화란, 데이터의 종류와 상관없이 똑같은 방식으로 데이터를 처리할 수 있다는 것을 의미. 그만큼 재사용성을 높일 수 있음을 뜻함) 두 가지 예를 통해, Stream API를 사용하지 않은 경우와 사용한 경우를 비교해보겠습니다. 먼저, 배열이나 리스트의 데이터를 정렬하여 출력하고자 할 때, 아래와 같은 코드를 작성하게 됩니다. String[] stoneArr = {"m..
SOLID 원칙이란? 소프트웨어를 설계함에 있어 이해하기 쉽고, 유연하고, 유지보수가 편하도록 도와주는 5가지 원칙을 의미합니다. 시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조를 만들면서 장기적으로 운영하기 위한 원칙이라고 볼 수 있습니다. 한마디로 좋은 설계를 위한 원칙 1️⃣ 단일 책임 원칙(SRP) 2️⃣ 개방-폐쇄의 원칙(OCP) 3️⃣ 리스코프 치환 원칙(LSP) 4️⃣ 인터페이스 분리 원칙(ISP) 5️⃣ 의존 역전 원칙(DIP) 1. SRP (Single Responsibility Principle) - 모든 클래스(Class)는 한 가지의 책임을 부여받아서 추후, 수정할 이유가 단 한가지여야함을 의미합니다. 즉, 클래스에 속해있는 멤버들과 메소드는 모두 공..
크롤링이란? 간단히 말하자면, 인터넷에 있는 정보들을 자동으로 수집하는 행위를 말합니다. 지난 9월에 데이터 수집 업무를 맡았었습니다. 예전 같았으면 인터넷에서 하나씩 검색해서 엑셀에 저장했을텐데 나름 개발자라고 크롤링하면서 편하게 업무 처리했네요. 그래서 실제로 제가 어떻게 크롤링을 업무에 활용했는지 소개해드리고자 합니다. 가장 먼저 Python과 IDE설치 및 pip를 설치해서 개발 환경을 구축했습니다. 이 부분은 직접 구글링하시는 걸 추천드립니다. 1. ChromeDriver와 Selenium 크롤링에 사용할 프레임워크는 Selenium의 webDriver입니다. webDriver를 활용하면 Python으로 가상 브라우저(Chrome)를 실행해 자유롭게 검색할 수 있는 환경이 만들어집니다. But ..
다양한 프로그래밍 관습들 중 변수나 클래스 이름을 정의할 때, 두개 이상의 단어를 조합하는 경우가 있다. 프로그래머들은 해당 객체가 이름만으로 어떤 역할을 하는지 알기 쉽게하기 위해 여러 방식들을 사용한다. 1) 카멜식(Camel Casing) 낙타의 모양에서 따온 방법으로 첫 단어는 소문자로 시작, 두번째 단어부터 대문자로 시작한다. ex) sumOfArray 2) 파스칼식(Pascal Casing) 카멜식과 비슷하나 차이점은 첫 단어도 대문자로 시작한다는 점이다. 하지만 특정 언어의 경우 관습적으로 클래스명만 대문자로 시작하는 규칙이 있기 때문에 유의하자. ex) SumOfArray 3) 스네이크식(Snake Casing) 각 단어를 Under bar를 활용해 이어붙인다. "_" ex) sum_array