We will find a way, we always have.

-interstellar

자바 20

[VM] 그랄VM (GraalVM)

최근 읽고 있는 도서 JVM 밑바닥까지 파헤치기에서 자바의 신기술 중 그랄VM이 무엇인지 잠깐 엿보았었다. 그런데 바로 다음날 if 카카오에서도 GraalVM 도입으로 JVM 백엔드 애플리케이션의 구동 초기 성능 문제 해결하기 라는 제목으로 발표영상이 올라와 이건 운명이다 생각하여 그랄VM이 뭔지 정리해보려고 한다. 그랄VM (GraalVM)2018년 4월 오라클 연구소는 그랄VM이라는 새로운 기술을 발표했다. "Run programs faster anywhere" 라는 구호로 등장했다.   사진 출처: https://blogs.oracle.com/java/post/for-building-programs-that-run-faster-anywhere-oracle-graalvm-enterprise-editi..

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 2

4. SOLID객체지향에서 좋은 설계와아키텍처를 이야기하면 빠지지 않고 나오는 것이 SOLID 원칙이다.  단일 책임 원칙(SRP: Single Responsibility Principle)개방 폐쇄 원칙(OCP: Open-Closed Principle)리스코프 치환 원칙(LSP: Liskov Substitution Principle)인터페이스 분리 원칙(ISP: Interface Segregation Principle)의존성 역전 원칙(DIP: Dependency Inversion Principle) 로버트 C.마틴이 2000년대 초반에 고안했으며 각 원칙은 객체지향 언어에서 좋은 설계를 얻기 위해 개발자가 지켜야 할 규범과 같은 것을 이야기한다. 그리고 각 원칙의 목표는 소프트웨어의 유지보수성과 확장..

카테고리 없음 2024.10.21

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 1

1부 객체지향1. 절차지향과 비교하기객체지향 이야기가 나올 때 친구처럼 나오는 녀석이 바로 절차지향이다. 절차지향(procedure oriented) 이전에 순차지향(sequential oriented)이라는 패러다임도 있었다.  순차, 절차 이렇게 놓고 보면 둘이 차이가 있는지 헷갈린다. 하지만 영문을 잘 해석해보면 살짝 다르다는 것을 알 수 있다. 순차지향은 진짜 말그대로 순차적으로(sequential) 라는 뜻으로, 코드를 위에서 아래로 읽겠다는 의미이고, 절차지향의 procedure는 직역하면 절차가 맞지만 컴퓨터 공학에서 말하는 Procedure는 사실 함수이다. 때문에 절차지향 프로그래밍은 사실상 함수 지향 프로그래밍으로 함수 위주로 생각하고 프로그램을 만드는 패러다임이다.  이후 "객체지향의..

카테고리 없음 2024.10.14

[자바] JVM 남이 주는거 아무거나 받아먹지 말자

서론문제 상황은 이렇다. 이 글을 쓰기 위해 JDK 8을 설치하고 열심히 디버깅하면서 글에 첨부할 자료들을 캡쳐했다. 그리고 인텔리제이를 종료하고 시간지나 다시 켜니 라이센스 재인증 하라는 알림창이 떴다.  재인증을 하려니 Problem with connection: SSL error probably caused by disabled SNI 와 Received fatal alert: handshake_failure 에러가 발생하였다.  인텔리제이에서 연결을 요청하는데 proxy 문제인지 뭐 암튼 인터넷 연결이 되지 않아 라이센스를 인증하라는데 인증할 수가 없는 그런 상황이었다.  사실 이런 문제 발생 예고는 이전부터 있었다. 언제부터인가 인텔리제이에서 db 커넥션 오류가 계속 발생하고 플러그인을 설치하려..

[자바] 공백 처리 탐험기 (isEmpty(), isBlank(), strip(), trim())

서론Tomcat 구현하기 미션 중 요청을 처리하는 과정에서 공백 제거를 하지않아 예외가 발생했다.   자바에서는 양 사이드 공백 제거를 위해 trim()과 strip() 두가지 메서드를 제공한다. 이 둘은 어떤 차이를 가지고 있고 어떻게 구현되어있는지 알아보자.  공백 확인공백 제거로 들어가기 전 공백 확인 메서드를 살펴보자. 문자가 빈문자열인지 확인할 때 isEmpty() 혹은 isBlank() 메서드를 사용하곤 했다.    isEmpty()를 사용하면 문자열이 딱 "" 요녀석인지만 확인해주고 isBlank()를 사용하면 "" 이외의 공백, 탭, 줄바꿈과 같은 녀석들도 판별할 수 있다.     어떻게 확인하는가? 위 메서드들은 어떻게 문자가 비었는지 알까소스코드를 까보자.  isEmpty() Strin..

[리뷰] 함수형 프로그래밍 with 자바

"한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다."   함수형 프로그래밍을 사용한다면 코드를 간결하고 효율적으로 표현할 수 있다. 또한 복잡한 로직을 읽기 쉽게 리팩토링할 수 있으며 재사용 가능한 코드로 만들어준다.  이전까진 '모던 자바 인 액션'을 통해 함수형 프로그래밍을 배웠다면 이제는 '함수형 프로그래밍 with 자바'로 함수형 프로그래밍을 배워도 좋을 거 같다고 생각한다. 모던 자바 인 액션도 람다와 함수형 프로그래밍을 다루지만 자바 8로 다루기 때문에 살짝 올드한 면이 있다.  함수형 프로그래밍 with 자바에선 자바 17를 사용하고 있어 record나 새로운 스트림 문법들을 사용하여 좀 더 young하다고 생각한다.  자바와 관련한 좋은 레퍼런스 북이 생겨 뿌듯하다:)

Blah blah 2024.04.28

[자바] final에 美친놈

서론 우테코 레벨1 때 첫번째 미션이었던 자동차 경주 미션과 마지막 미션인 체스 미션의 main 메서드를 살펴보면 눈에 띄게 달라진 게 있다. 바로 final main의 파라미터인 args에도 final, 로컬 변수에도 final, try catch 문에서 잡은 예외에도 final이 붙어 있다. 제일 처음 꼬신건 :네오:였다. 문자열 덧셈 계산기 피드백 강의를 보는데 코드 여기저기서 final을 볼 수 있었다. 그때부터 이녀석에게 관심을 갖기 시작했다. 그럼 이제 final이 뭐길래 얘는 필사적으로 final을 붙이려고 하는지 알아보자. 본론 final 키워드를 추가할 수 있는 곳은 여럿 있는데 각각 의미가 다르다. 클래스 상속 제한 메서드 오버라이딩 제한 변수 재할당 제한 여기서 나는 변수에 초점을 두..

[자바] 내가 커스텀 예외를 사용하게된 이유 (IllegalArgumentException, IllegalStateException)

서론지금까지 도메인 요구 사항에 맞지 않는 입력이 들어온다면 주로 IllegalArgumentException를 사용하였고 파라미터로 어떤 예외인지 메시지를 담아 의미를 전달하였다. 이녀석이 뭐 특별한 기능을 제공하느냐? 라고 물어본다면 네니오라고 답할 수 있다. IllegalArgumentException이 제공하는 기능은 의미를 전달하는 것이다. 다시말해 유효하지 않은 인자가 왔다는 의미를 전달하는데 요게 바로 특별한 기능이다. 나는 이 IllegalArgumentException 안에 메시지를 넣어 예외를 다르게 표현하는 방식을 사용해왔다. 프리코스 때 뿐만 아니라 우테코 들어와 자동차 미션, 사다리 타기 미션 때까지만하여도. 이때까진 커스텀 예외를 사용하는 크루를 보고 아 너무 오버 엔지니어링 아..

[자바] ENUM에서 equals() vs ==, NPE(NullPointerException)의 고찰

서론 자바는 상수를 우아하게 관리하기 위해 enum을 제공한다. 이때 enum 값들은 전부 상수로 관리되는데 이 값들을 비교할 때 equals 메서드를 사용하느냐 아니면 == 으로 비교하느냐에 대해 토론의 장이 열렸다. 스택 오버플로우에도 쏼라쏼라 말이 많은 주제인 듯 하다. 본론으로 가기전 짚어야 할 점은 enum의 equals 메서드는 final로 정의되어 있어 재정의가 불가하며, 안에서 ==을 사용하여 비교를 한다. 본론 첫번째로 enum의 값을 비교할 때 ==를 사용할 것인가 equals를 사용할 것인가에 대한 토론을 하였다. ==을 사용했을 때 얻을 수 있는 장점은 컴파일 타임에 체크가 가능하다는 것이고, 또한 NPE(NullPointerException)을 피할 수 있다는 것이었다. 그렇게 자..

[자바] VO와 Record

우테코 메타인지 말하기 스터디때 준비한 글 VO (Value Objects) VO는 Value Objects의 약자로 값 객체를 나타낸다. 자바에서 VO를 사용하는 이유는 명확한 의미전달 및 책임 캡슐화이다. 단순히 원시값을 사용할 때와는 달리 이 객체가 어떤 역할을 담당하고 있는지를 이름을 통해 전달할 수 있다. 그리고 요구사항이 주어졌을 때 해당 객체 내에서 요구사항을 구현하여 캡슐화를 지킬수 있다. VO 사용시 유의사항 equals() && hashcode() VO를 만들었다면 필수로 equals() && hashcode() 메서드를 구현해줘야 한다. equals() && hashcode()가 구현되지 않았다면 객체의 값을 비교하는 것이 아니라 객체의 주소를 비교하기 때문에 원하는 대로 동작하지 않..