Backend/JAVA 9

Java 불변 객체(immutable object)

불변 객체?객체의 상태가 변경되지 않는 객체. 변경이 불가능한 객체를 말한다.Java에서는 final 키워드를 사용하여 불변 객체를 만들 수 있다. 불변 객체의 사용 이유객체가 변경되어도 항상 새로운 객체를 반환하기 때문에 여러 쓰레드가 동시에 한 객체에 접근해도 안전하다.디버깅이나 예측 가능성이 높아지고 메서드 실행시 사이드 이펙트를 예방할 수 있다.변경되지 말아야할 필드값이 존재할 경우 사용가능(JPA)함수형 프로그래밍으로 사용 될 수 있다. 코드로 알아보는 불변 객체 Person.classpublic class Person { public String name; public Age age; public Person(String name, Age age) { this.na..

Backend/JAVA 2024.05.16

Java 8에 추가된 것들 2

람다(Lambda) 표현식 / 함수형 인터페이스(Functional Interface) 람다 표현식과 함수형 인터페이스는 밀접한 관계가 있어서 함께 정리했다. 메소드가 하나인 인터페이스를 익명클래스로 구현할 수 있는데 익명 클래스를 사용하면 가독성도 떨어지고 코드가 길어지는 단점이 있다. 이러한 단점을 보완하기 위해서 람다 표현식이 만들어졌고 익명 클래스로 구현된 인터페이스를 좀더 간단하게 표현하기위해서 사용되어진다. 람다표현식은 인터페이스에 메소드가 하나인 것들에만 적용이 가능하다. 아래는 익명 클래스를 람다표현식으로 바꾼 예제이다. interface TestInterface{ int calculate(int a, int b); } //익명 클래스 TestInterface calculateAdd = n..

Backend/JAVA 2021.09.17

Java 8에 추가된 것들 1

내가 쓰는 언어의 버전에서 어떤걸 사용할 수 있는지 알아보고자 정리하였다. 먼저 자바 8에서 추가된 주요 기능들을 나열하면 아래와 같다. 1. Optional 2. 인터페이스의 기본 메소드(Default method) 3. 날짜와 시간 관련 클래스들 추가 4. 병렬 배열 정렬 5. StringJoiner 추가 6. 람다(Lambda) 표현식 7. 함수형 인터페이스(Functional Interface) 8. 스트림(Stream) Optional(옵셔널) 선택적으로 뭔가를 처리 할 때 사용하는 것으로 객체를 편리하게 처리하기 위해서 만든 클래스다. Optional클래스는 null 처리를 보다 편리하게 하기 위해서 만들어졌다. NullPointerException이 발생할 수 있는 상황에서 문제를 보다 간편..

Backend/JAVA 2021.09.09

객체지향 5원칙 (SOLID)

객체지향 5원칙 개발을 진행하면서 좋은 소프트웨어를 만들기 위해 지켜야할 5가지 원칙을 말하며 각 원칙의 앞 글자를 축약하여 SOLID라고 말한다. 5가지 원칙은 아래와 같다. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open/Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존관계 역전 원칙 1. SRP(Single Responsibility Principle) : 단일 책임 원칙 모든 클래스는 각각 하나의..

Backend/JAVA 2021.07.28

객체지향 프로그래밍(OOP)

객체지향 프로그래밍이란? 객체지향 프로그래밍(OOP : Object Oriented Programming)은 프로그래밍에서 필요한 데이터를 추상화 시켜 역할과 책임을 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 기법이다. 객체지향의 사실과 오해라는 책에서는 객체지향에 대해 아래와같이 설명한다. 객체 지향 설계를 객체들간의 역할, 책임, 협력으로 이루어 진다 하나의 객체가 한가지 역할을 수행하고 그 역할을 수행 할 책임이 있으며 메시지를 통해 다른 객체와 협력하여 기능을 구현한다. 객체 지향 설계는 현실을 모방하는 것이 아니다. 현실을 닮아야 한다는 어떤 제약이나 구속도 없다. 창조한 객체의 특성을 상기시킬 수 있다면 현실 속의 객체의 이름을 이용해 객체를 묘사하..

Backend/JAVA 2021.07.27

JAVA JWT payload 가져오는 방법 / 만료시간 체크

java에서 jwt payload를 가져오는 방법에대해 정리하보고자 한다. JWT 개념 JWT(Json Web Token)란 Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 이다. JWT는 토큰 자체를 정보로 사용하는 Self-Contained 방식 으로 정보를 안전하게 전달한다. 주로 회원 인증이나 정보 전달에 사용된다 intelliJ maven java 8 지금까지 JWT안에 payload를 가져올려면 public key나 private key가 있어야하는줄 알았는데 아래 사이트에서 바로 내용을 확인 할 수 있는것을 보고 key가 필요없다는걸 알게 되었다.... JWT.IO JSON Web Tokens are an open, industry standard ..

Backend/JAVA 2021.06.09

[Tibero/Geometry 에러 처리] Data is too long for the column 에러/ tbClob/tbBlob 처리 방법(feat. GIS)

GIS 데이터를 처리하다 보면 polygon 데이터가 기하학적으로 늘어나는 경우가 있다 ​ tibero에 있는 내장함수 TO_CHAR로 String 형태로 가져오면 60000byte?까지밖에 가지고 못한다. ​ 나 같은 경우에는 아래와 같은 sql 문으로 geometry 정보를 가져오는 부분에서 에러가 나왔다. SELECT ID,TO_CHAR(ST_ASTEXT(GEOM)) FROM GEOMETRYTABLE 여기서 ST_ASTEXT는 geometry 정보를 tbClob으로 가져오는 함수이다. 자바에서 ST_ASTEXT로만 가져오면 com.tmax.tibero.jdbc.TbClob 형태로 가져오게 된다. ​ 그걸 TO_CHAR로 감싸게 되면 WKT 형태로 geometry 값을 받아올 수 있다. ​ clob과..

Backend/JAVA 2021.05.13

[JAVA] Null/NaN/공백/문자열 처리

다른 외부업체와 프로젝트를 하다 보면 외부업체로부터 받아오는 데이터가 null값인지 아닌지 알 수 없을 때가 있다. 물론 조율을 통해 해당 데이터는 값이 필수로 들어있다거나 null값이면 0이나 다른 문자로 대체해서 받아 올 수도 있지만 예상치 못하는 상황이 발생해서 에러가 발생할 수도 있기 때문에 항상 개발자는 null처리를 생각하고 개발을 해야 한다. ​ null은 공백도 아니고 0도 아닌 정의되지 않은 값이라고 할 수 있다. ​ 1. null 및 공백 처리 먼저 매개변수로 들어오는 String 데이터가 null인지 비어있는 변수인지를 확인할 때에는 org.apache.commons.lang3.StringUtils 클래스를 사용한다. ​ StringUtils에는 대부분의 문자열 처리를 수행할 수 있는..

Backend/JAVA 2021.05.06

JAVA / JVM / JDK / JRE에 대해서

JDK, JRE, JVM 구조 JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트코드(.class 파일)를 os에 특화된 코드로 변환(인터프리터와 JIT컴파일러)하여 실행한다. 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체다.(특정 밴더가 구현한 JVM) JVM 밴더: 오라클, 아마존, Azul... etc.. 어느 환경에서든 자바 코드를 실행 할 수 있다. 메모리 관리, Garbage Collection(GC)등 많은 고급 기술을 사용하여 Java 애플리케이션에 최적의 성능을 제공 자바프로그램 실행과정 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받음, JVM은 이 할당받은 메모리를 용도에 따라 여러 영역으로 나누어 관리한다...

Backend/JAVA 2021.05.04