전체 글 261

[Java] IntegerCache: Integer 객체에서 캐싱을 제공한다고?

Introduction 회사 슬랙 채널에 재밌는 글이 올라왔다. 에서 배우기로, 기본적으로 서로 다른 두 객체는 갖는 값에 상관없이 힙 영역 내 서로 다른 주소 번지에 위치하게 된다. 그렇다면 위의 예시에서 같은 값을 서로 다른 두 Integer 객체 a, b에 대해 비교하면 둘다 false가 나와야 정상일 것이다. 그런데 위의 코드를 실행하면 아래와 같은 결과가 나온다. public static void main(String[] args) { // case 1 Integer a = 127; Integer b = 127; System.out.println(a == b); // true // case 2 Integer a = 128; Integer b = 128; System.out.println(a ==..

Java 2022.06.16

6월 2주차 회고(6/6~6/10)

이번주 점수는? ⭐⭐⭐⭐⭐ 😍 좋았던 것(Liked) 팟캐스트 출연 친한 스타트업 대표 형의 초대로 스타트업을 주제로 다루는 팟캐스트에 게스트로 출연했다. 주제는 이었다. 평상시 루틴, 리추얼에 대한 소개부터 이전에 창업하면서 있었던 에피소드 등 다양한 이야기를 나눌 수 있어 좋은 시간이었다. 매일 유지하는 루틴은 아래와 같다. 아침에 일어나자마자 이불 개기 모닝 찬물 샤워(처음부터 찬물로 조지는 건 아니고, 따뜻한 물로 하다가 마무리 1분을 찬물로! 하고 나면 정신이 번쩍 들면서 엄청 개운함) 데일리 회고 패널 분들께서 내 루틴 얘기를 듣는데 표정이 질색이시더라(…)ㅋㅋㅋㅋㅋㅋ 왜 그렇게까지 해야 되냐, 그걸 매일 유지하는 게 가능하냐 등 말씀하셨다. 그래서 이렇게 대답했다. “열심히는 누구나 다 한다..

Spring의 설계 철학(Design philosophy)은?

프레임워크에 대해 배울 때, 이것이 무엇인지를 아는 것뿐만 아니라 어떤 원리를 따르는지를 아는 것 역시 중요하다. 아래는 스프링 프레임워크를 이끄는 원리이다. 모든 레벨에서 선택권을 제공한다. Spring은 설계 의사결정을 최대한 늦게 하도록 연기할 수 있게 한다. 예를 들어, 코드를 변경하지 않고 configuration을 통해 지속성 제공자를 바꿀 수 있다. 이는 다른 많은 인프라 문제와 타사 API와의 통합에 대해서도 마찬가지다. 다양한 관점을 수용한다. Spring은 유연성을 포용하며 일을 처리하는 방법에 대한 의견을 제시하지 않는다. 또한, Spring은 서로 다른 관점을 갖는 넓은 범위의 애플리케이션 요구 사항을 제공한다. 이전 버전과의 강력한 호환성을 유지한다. Spring의 진화는 버전 간..

Spring 2022.06.08

6월 1주차 회고(5/30~6/6)

이번주 점수는? ⭐⭐⭐ 😍 좋았던 것(Liked) 끝냄! 아예 끝까지 본 건 아니지만 인터페이스 단원까지 보는 것으로 마무리했다. 이 다음부터는 필요할 때마다 그때그때 책을 꺼내서 해당 파트를 공부하는 게 더 효율적일 것이라 판단했기 때문. 시작! 조금 더 속도를 내고 싶다고 건의해 실무 과제를 미리 전달받았다. 어떤 문제가 있고 무엇을 고쳐야 될지 사수 분과 함께 문제를 divide and conquer해 작은 것부터 풀어보기로 했다. 📚 배운 것(Learned) 1. 공부 클래스, 상속, 인터페이스 2단원, 3단원 디자인 패턴 - 빌더 패턴 JPA & ORM 2. 회고의 진정한 의미는 무엇인가? 방법론을 차용하는 것 자체는 애자일이 아니다. 주간 회고를 한다고 애자일을 하는 게 아님. 회고글 끼적인다..

[디자인 패턴]빌더(Builder) 패턴이란?

빌더 패턴이란? 디자인 패턴 중 생성 패턴에 해당. 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴이다. 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해준다. 생성 패턴에는 중요한 이슈가 두 가지가 있는데 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화한다. 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 완전히 가려준다. 즉, 생성 패턴을 이용하면 무엇이 생성되고, 누가 이것을 생성하며, 이것이 어떻게 생성되는지, 언제 생성할 것인지 결정하는데 유연성을 확보할 수 있게 된다. 빌더 패턴은 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여 동일한 절차에서도 서로 다른..

Spring 2022.06.04

JPA & ORM이란? (Feat. NoSQL에서 ORM?)

JPA란? 자바 표준 ORM(Object Relational Mapping). ORM(Object Relational Mapping)이란? 객체(Object)와 관계형 데이터베이스(Relational DB)를 연결(mapping)해주는 놈! Why JPA? 현대 웹 애플리케이션에서 관계형 데이터베이스는 빠질 수 없는 요소. 그러다 보니 객체를 관계형 데이터베이스에서 관리하는 게 무엇보다 중요해졌다. 문제는 RDB가 웹서비스 중심이 되면서 모든 코드가 SQL 중심이 되어버렸다는 것. 현업 프로젝트 대부분이 애플리케이션 코드보다 SQL로 가득해져버린 것이다. 이는 RDB가 SQL만 인식할 수 있기 때문인데, SQL만 가능하니 각 테이블마다 기본적인 CRUD 관련 쿼리를 매번 생성해야 한다. 예를 들어 Use..

Java 2022.06.02

5월 4주차 회고(5/23~5/27)

이번주 점수는? ⭐⭐⭐⭐⭐ 😍 좋았던 것(Liked) 1. 코드 리뷰 사내 팀원 분께서 블로그를 보고 코드를 리뷰해주셨다. 더불어 공부할 자료(Early pattern, 까지 전해주셔서 기분 좋게 공부할 수 있었다. (감사해요 닐!) 2. 주관의 해상도가 선명해짐 요즘 주관이 점차 선명해지고 있음을 느낀다. 자세한 건 전에 쓴 글 참고. 안정감이 느껴지는 게 좋다. 물론 공부는 더 열심히 해야한다.. 3. 회사 채용 프로세스에 기여(부트캠프 협력사 설명회 참여 & 채용 추천) 이번주 했던 일 중 가장 뿌듯했던 시간이었다. 내가 수료한 부트캠프인 정글사관학교의 협력사 중 하나가 우리 회사다. 지난 주 회고에도 썼듯, 회사가 바깥에서 보는 것보다 훨씬 좋은데 이게 내가 있던 기수에서는 잘 드러나지 못했다. ..

주관이 선명해진 이유

요즘 삶이 재밌다고 느끼는데, 그 이유 중 하나가 주관의 해상도가 선명해지는 게 느껴져서다. 예전에는 남들이 멋있다고 하는 거, 세상이 멋있다고 하는 걸 좇았다. 창업이 하고 싶은 게 아니라 해야만 한다고 생각했던 이유도 그래서였고. 그런데 하나하나 경험치를 쌓을수록 나와 맞고 맞지 않는 게 무엇인지 명확해졌다. 남들 다 가려는 대기업은 인턴을 해보니 핏이 맞지 않는다는 걸 느꼈다. 죄를 지어야 간다는 대학원 덕분에 오히려 앞으로 인생에 선택지를 넓히는 자유를 가졌다. 창업은 하고 보니 대표직 맡는 것보다 공감이 가는 큰 문제를 뛰어난 팀과 함께하는 게 더 중요하다는 걸 알게 됐다. 남들 다 아깝다고 하는 신소재 석사 학위보다 IT 산업에 재밌는 게 더 많아서 소프트웨어 개발자로 전직했다. 하지만 주관은..

인사이트 일기 2022.05.28

[패턴]Early return pattern이란?

Our server coding convention: Prefer early return style!우리 회사의 Coding convention 중 하나로 Code Readability가 있다. 그 중 하나가 “Prefer early return style”이다.boolean someMethod() { if (!someCondition) { return false; } if (!someOtherCondition) { return false; } ...do more work... return true;} 이것만 보면 “그렇구나”라고 말텐데, 실제로 리뷰를 받아보면 느낌이 확 다르다.이전에 올렸던 글에서 예제로 풀었던 코드를 닐이 직접 리뷰봐주셨다(어..

Spring 2022.05.26