java 11

[Java]함수형 프로그래밍: 익명 클래스보다는 람다를, 람다보다는 메소드 참조를 사용해라?(Feat. Open source contribute

TL;DR회사에서 쓰는 오픈소스 공부하다 리팩토링 욕구가 샘솟았다.리팩토링해서 PR 올렸는데 머지됐다.오늘부터 오픈소스 컨트리뷰터 ㅋBackground2주 전을 기점으로 Payment 파트에서 Loan 파트로 팀이 옮겨졌다. 지난 6개월 동안은 유저에게 비즈니스 가치를 전달하는 피쳐 위주 개발을 경험했다. 잘 이끌어주신 덕분에 좋은 성과 역시 낼 수 있었다. 그래서 이번에는 비즈니스의 코어 쪽으로 더 파고들 수 있는 Loan platform 팀으로 가보는 게 어떻겠냐는 제안을 받았다. 나 역시 예전부터 코어 쪽을 들여다보고 싶은 마음이 컸던 지라 기쁜 마음으로 흔쾌히 수락했다. 현재 우리 회사의 전체 아키텍쳐를 개략적으로 살펴보면 유저들이 사용하는 앱을 관장하는 Balance-API 서버와 그 뒷단에서 ..

Java 2023.07.28

[Java]SimpleDateFormat을 쓰면 안된다고? (feat.Thread-Safe)

Introduction 현재 사내 툴에 들어갈 간단한 기능을 개발하는 작업을 받아 진행하는 중이다( 그 간단한 걸 3주나 하고 있다고… ). 클라이언트가 어떤 문서를 제출했을 때, 제출한 날짜를 어드민에서 수정할 수 있도록 하는 기능이다. 간단해보이지만 이걸 스프링에서 짜려니 레이어별로 책임을 분리하고 DTO를 만들고 등등 이것저것 할 게 많았다. 어찌어찌 개발을 끝내고 PR을 올렸더니.. 코멘트 61개 달린 거 실환가..그 와중에 이렇게 라인 바이 라인으로 디테일하게 피드백 받을 수 있어 엄청 행복했다. (코드리뷰에 진심인 우리 회사 오세요 여러분) 피드백 중에 SimpleDateFormat을 쓰지 말라는 코멘트를 받았다. 기존 코드에서는 서비스 레이어에서 받아온 String을 SimpleDateFor..

Java 2022.08.29

[LeetCode][Java/Python]53. Maximum Subarray

Java Solution class Solution { public int maxSubArray(int[] nums) { //Solution 1: my solution /** Runtime: 9 ms, faster than 5.84% of Java online submissions for Maximum Subarray. Memory Usage: 74.1 MB, less than 41.86% of Java online submissions for Maximum Subarray. 시간복잡도: O(n) - 아래 나올 Solution 2와 동일한 시간복잡도이나 매번 dp 값을 갱신하기 위해 참조해야 하는 점에서 중간에 품이 들어가는 듯. 공간복잡도: O(n) - dp array를 n개 원소만큼 생성해야 함 */..

[Spring]Web - Service Layer 간 상호 의존 문제(Circular Dependency)

Introduction 지난주에 첫 PR을 올렸다! 책을 참고해 작성한 POST 로직 관련 기능이었다. 기대 반 걱정 반으로 PR을 올렸는데 아니나 다를까 피드백이 줄줄이 달리기 시작했다. 그 중에서 꽤나 인상적인 리뷰가 있었다. nit: How about thinking this? 🙇‍♂️ but, You don't need to fix it now (N)ot (I)mportant, (T)hough Controller(package-web) has a dependency on Service(business logic/package-service) Service(business logic/package-service) has a dependency on DTO(package-web) what is the..

Spring 2022.07.16

[Java]String pool: String에서도 캐싱 기능을 제공한다고?

Intro: String에서 객체 비교 예제를 하나 만들어보자. //case 1 String name1 = new String("BHK"); String name2 = new String("BHK); boolean result1 = name1.equals(name2) boolean result2 = name1 == name2 // 위에서 공부한 내용과 같이 결과는 다음과 같다. true // .equals() name1, name2 값만 비교 false // == name1, name2의 객체 주소를 비교 아래 예제는 어떨까? //case 2 String name1 = "BHK"; String name2 = "BHK"; System.out.println(name1 == name2); 결과는 참이다. tr..

Java 2022.06.22

[Java] == 연산자와 .equals()의 차이는?

==과 .equals()의 차이는? 저번 글에서 썼던 예제를 살짝 바꿔보자. public static void main(String[] args) { Integer a = 128; Integer b = 128; System.out.println(a == b); System.out.println(a.equals(b)); } 결과는 어떻게 나올까? false // == true // .equals() == 연산자야 둘을 비교하는 연산자인 건 워낙 많이 봤고, .equals() 메소드도 보면 두 객체를 비교하는 메소드인 것 같은데 무엇이 다르길래 하나는 false이고 하나는 true일까? 바로 무엇을 비교하느냐의 차이다. == 연산자는 객체 자체를 비교한다. 정확히는 비교하려는 두 객체 각각의 메모리 내 주소..

Java 2022.06.17

[Java] Varargs란 무엇인가

vararg란 무엇인가 What is varargs in Java? 자바 메소드를 하나 만든다고 가정하자. 하지만, 우리는 이 메소드가 받아들이고자 하는 인자가 얼마나 많을지 장담할 수 없다. 이를 해결하기 위해, Java 1.5 버전에서 varargs를 도입했다. Varargs는 variable arguments의 준말이다. 자바에서, 메소드의 인자는 임의의 value 개수를 받을 수 있다. 이렇게 value의 변수 개수를 받는 인자를 varargs라고 한다. accessModifier methodName(datatype... arg) { // method body }varargs를 정의하기 위해, … (점 세 개)가 메소드의 파라미터로 사용된다. 인자의 변수 개수를 받는 메소드를 variable-ar..

Java 2022.05.26

[Java] 왜 main()에 들어가는 인자는 오직 String 배열 뿐일까?

자바에서 프로그램을 코딩하기 위해 가장 먼저 입력하는 코드가 있다. public class Example { public static void main(String[] args) { ... } } 바로 이놈인데, 왜 String[] args를 쓰는지 알 길이 없었다. 처음에는 그냥 받아들였는데, 곰곰이 생각해보니 대체 이놈의 정체가 무엇인가! main()이 필요한 이유는 → 자바 클래스에서 main()이 엔트리 포인트기 때문이다. (항상 main()부터 실행된다). 근데 왜 String[] args가 필요하지?! Java 클래스로 프로그램을 실행할 때, JVM은 길이가 0인 String 배열을 먼저 생성한 다음 main() 메소드를 호출할 때 매개값으로 이 배열을 전달한다. String[] args = ..

Java 2022.05.24

[Java]While문 & Switch문 함께 쓸 때 주의점

switch 문에서의 break 원래 while문에서 break를 사용하면 while문을 종료시키고 빠져나올 수 있다. 그런데 만약 while문 안에 switch문을 쓴 뒤, switch문에서 바깥을 감싸고 있는 while문까지 종료시켜야 할 경우라면 어떨까? 그냥 생각해보면 switch문의 특정 case에서 break넣으면 되는 거 아냐?라고 생각할 수 있는데, 이렇게 하면 문제가 발생한다. switch 문에서의 break는 case를 빠져나가는 용도로만 쓰이지 while을 종료시키지 않기 때문. 그렇다고 break를 두 번 쓰려니 이미 위의 break에서 switch문을 빠져나왔으니 아래 break로 가지 않는다. 어떻게 해야 할까? 결론부터 말하면, while문을 종료시키려면 while문에서의 조건..

Java 2022.05.23

[Java]참조 타입(이것이 자바다 Ch.5)(작성 중)

5.1 데이터 타입 분류 데이터 타입 원시 타입(Primitive type) 정수 타입 byte(1byte) char(2byte) short(2byte) int(4byte) long(8byte) 실수 타입 float double 논리 타입 boolean 참조 타입(Reference type) 배열 타입(array) 열거 타입(enum) 클래스(class) 인터페이스(Interface) 💡 참조 타입: 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말함. 변수: 스택에 생성 int, double → 직접 값을 저장 객체: 힙에 생성 클래스 변수 → 힙 영역의 객체 주소 값을 갖는다. 주소를 통해 객체를 참조한다는 뜻에서 클래스 변수를 참조 타입(Reference type) 변수라..

Java 2022.05.20