
프로젝트를 진행하다 겪은 문제다. 람다식을 사용할 때, 특히 stream을 해 map으로 구조 변경 시 자기 자신을 인자로 넘겨주는 경우가 있는데, 이때 i -> i로 나는 그대로 넘겼다. 하지만 리펙토링을 하면서 Function.identity()와 i -> i 를 사용하는것의 차이가 무엇인지 궁금했다. @Override public Page findAllEventPages(Long userId, Pageable pageable) { Page eventPages = eventUserRepository.findAllByUserId(userId, pageable); List eventIds = eventPages.stream() .map(Event::getId) .toList(); Map eventUse..

https://festa.io/events/4588 게으른개발자컨퍼런스 | Festa! Festa에서 당신이 찾는 이벤트를 만나보세요. festa.io 지지난주 정도 슬랙에 에프 멘토님의 글이 하나 올라왔다. 주니어 백엔드 개발자 대상이라고 해 신청을 해 보라고 했다. 사실 취준을 하는 입장에서 크게 도움이 될까 해 신청 할까 말까 고민을 했는데, 주변 데브코스 지인들이 다들 신청했다고 해서 어차피 추첨이고 해서 일단 신청했었다. 그런데 추첨 결과가 나왔는데 주변 지인 한 분 빼고는 모두 참가자로 선정이 안되어 감사한 마음을 가지고 일단 가보자 라는 생각을 했다. 다녀온 후기를 먼저 말 하자면, 얻을게 있을까? 생각했는데, 생각 보다 얻은게 많았다. 시간 표는 아래와 같았고, 나는 물경력에 빠진 당신에게..

1. 헥사고날 아키텍처(Hexagonal Architecture) 포트와 어댑터 아키텍처(Ports and Adapters Architecture)라고도 하며, 앨리스터 코오번 (Alistair Cockburn)이 개발했다 infrastructure(외부세계)로 부터 도메인 모델(비즈니스 로직)을 분리하기 위한 패턴이다. 그럼 domain과 infrastructure이 각각 뭘까? 도메인(domain)은 어플리케이션이 존재하는 이유이다. app의 본질이고, 차별성을 만드는 부분이다. 이 domain은 비즈니스 로직을 포함하고 있으며 데이터베이스나 web API나 프레임워크와 같은 기술로 부터 분리되어져야 한다. 인프라(infrastructure)는 기술을 나타낸다. 비즈니스 도메인이 아닌 나머지 모든 것..

이때까지 귀찮아서 Scanner만 항상 사용했는데, 이제야 정리를 해보고, 오늘 부로 절대 Scanner를 사용하는 과거로 돌아가지 않을 것이다. 1. Scanner Scanner는 띄어쓰기와 개행문자를 경계로 값을 인식하기 때문에 따로 가공할 필요가 없어 편리하다. 하지만 BufferedReader는 입력 받은 데이터가 String으로 고정되기 때문에 데이터를 원하는 타입으로 가공하는 작업이 필요하다. 알다시피 Scanner는 지원하는 메서드가 많다. 하지만 버퍼 사이즈가 1024 char이기 때문에 많은 입력을 필요로 할 경우에는 성능 상 좋지 못한 결과를 야기한다. (Scanner도 buffer 사용한다) 2. BufferedReader BufferedReader는 개행문자만 경계로 인식하고 입력받..

1. 스트랭글러(교살자) 패턴 - 마틴 파울러 마틴 파울러가 호주 여행을 하면서 상위 나무 가지에서 자라기 시작해서 땅에 뿌리를 내릴때 까지 아래로 자라는 위 나무를 보고 중요한 시스템를 다시 작성하는 방법에 대한 비유를 든다. 중요한 시스템을 다시 작성하는 것은, '새로운 것을 다시 만들면 되는것 아닌가?' 하고 쉽게 생각 할 수 있지만, 생각보다 훨씬 복잡하고 위험성이 있다. 마감일은 다가오고, 압력은 더 심해진다. 하지만 새로운 기능은 추가되는 것들이 있고, 기존 기능은 정상적으로 동작되어야한다. 이전 버그 또한 다시 작성된 시스템에 추가되기도 한다. 새로 작성하는 대신, 대안의 방법은 점진적으로 새로운 시스템을 기존의 가장자리로 부터 생성해 나가는 것이다. 기존 시스템이 교살될 때까지 (죽을때 까..

1. 점근적 분석(Asymtotic Analysis) 이란 임의의 함수가 N -> ∞ 일때, 어떤 함수 형태에 근접해지는지 분석하는 방법이다. 예를들어 f(n) = n2 + 3n 일때, n이 매우 커진다면, 3n은 n2에 비해서 중요도가 떨어진다. n이 매우 커진다면, "f(n) is asymptotic to n2" 라고 할 수 있다. 이 접근적 분석때문에 시간 복잡도 계산시 최고차항을 제외한 모든 항과 최고차항의 계수를 무시하는 것이다. 2. 점근 표기법(Asymtotic Notation) 점근 표기법에는 세 가지 표기법이 있다. (1) Big- omega (Ω): lower bound. 점근적 하한 (2) Big-O (O): upper bound. 점근적 상한 (3) Big-theta (Θ): tig..
1. DDL (Data Definition Language) - 데이터 정의어 : 데이터를 수정 / 삭제 등 데이터 전체 골격을 결정하는 역할의 언어를 말한다. - Conceptual Schema - CREATE, ALTER, DROP, TRUNCATE 2. DML (Data Manipulation Langage) - 데이터 조작어 : Table의 행과 열을 조작하는 언어. - SELECT, INSERT, UPDATE, DELETE 3. DCL (Data Control Language) - 데이터 제어어 : 데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어 - GRANT, REVOKE, COMMIT, ROLLBACK
JDK 1.7 버전 부터 추가된 try-with-resources. 이런게 있다 정도만 알았고, 언제 사용하는지 정확히 몰랐다. 1. try-with-resources가 생겨난 배경 public static void main(String[] args) { DataInputStream dataInputStream = null; FileInputStream fileInputStream; try { fileInputStream = new FileInputStream("score.dat"); dataInputStream = new DataInputStream(fileInputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } finally {..
- Total
- Today
- Yesterday