API를 설계하다 보면 서버에서 요청 값으로 설계한 Request DTO의 네이밍과 클라이언트 쪽에서 요청하는 Json 네이밍이 간혹 다른 경우가 발생합니다. 이런 경우에 Json 데이터를 DTO 객체에 매핑하는 과정에서 key값이 일치하지 않아 매핑되지 않는 문제가 발생하게 되는데요. 이때 @JsonProperty, @JsonNaming 어노테이션을 사용하면 문제를 해결할 수 있습니다. @JsonProperty 아래는 서버에서는 카멜케이스를 사용하지만 클라이언트 쪽에서는 언더바를 이용하여 요청을 한 코드이다. //Json 요청 예시 { "post_name": "nori", "post_content": "zzang", "category": "FREE" } @Data public class WriteRe..
자바의 인터페이스에 대해 알아보겠습니다. 1. 인터페이스 인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메소드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 일반 메서드 또는 멤버 변수를 가질 수 없다. 오직 추상메소드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다. 추상클래스가 미완성 설계도라면, 인터페이스는 밑그림만 그려져 있는 기본 설계도라 할 수 있다. 인터페이스도 추상클래스처럼 완성되지 않은 불완전한 것이기 때문에 그 자체만으로 사용되기보다는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다. 💡 기존에는 인터페이스에 일반 메소드를 구현할 수 없었지만, 자바 8 버전부터 default 예약어를 통해 일반 메서드 구현이 가능하..
Java의 static 키워드는 필드, 메서드, 클래스에 적용할 수 있습니다. static 키워드를 사용하여 선언하였을 때 각각 어떤 차이점이 있는지 알아보겠습니다. 1. static field(변수, 상수) 클래스 안에서 변수를 선언하면 멤버 변수로 선언이 되며, 멤버변수에 접근하려면 car1.name 처럼 객체를 통해서 접근해야 한다. Car car1 = new Car(); System.out.println(car1.name) 만약 static 키워드를 사용하여 변수를 선언하면 멤버 변수와 다른 특성을 갖게되는데, 아래와 같이 객체 car1을 통해서 접근할 수 있지만, 클래스 Car를 통해서도 접근할 수 있다. System.out.println(Car.sNumberOfCars); Car car1 = ..
자바의 패키지에 대해 알아보겠습니다. 1. 패키지 키워드 패키지(package)란, 관련 된 클래스(인터페이스 포함)들의 묶음이다. 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. (접근 보호와 네임 스페이스 관리) 같은 이름의 클래스일 지라도 서로 다른 패키지에 존재하는 것이 가능해서, 다른 개발자가 개발한 클래스 라이브러리의 클래스 이름과 충돌하는 것을 피할 수 있다. 클래스가 물리적으로 하나의 클래스파일(*.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다. 예를 들어, java.lang.String 클래스는 디렉토리 java의 서브 디렉토리인 lang에 속한 String.class 파일이다. 1. 하나의 소스파일에는 첫 번째 문장으로 단 한..
자바의 오버라이딩에 대해 알아보겠습니다. 오버라이딩(Overriding) 오버라이딩이란? 오버라이딩(overriding)이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것이라고 할 수 있다. 자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메서드를 상속받는다. 이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있다. 즉, 메소드 오버라이딩이란 상속받은 부모 클래스의 메서드를 재정의하여 사용하는 것을 의미한다. 오버라이딩의 조건 1. 오버라이딩이란 메서드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다. 하지만 메소드의 반환 타입은 부..
자바는 왜 다중상속을 지원하지 않는지 알아보겠습니다. 1. 자바는 왜 다중상속을 지원하지 않을까? 다이아몬드 문제 다중 상속을 지원하게 되면 하나의 클래스가 여러 상위 클래스를 상속받을 수 있다. 이런 특징 때문에 발생하게 되는 문제가 '다이아몬드 문제'이다. 위의 클래스 다이어그램과 같은 상속 구조에서 발생되는 문제가 다이아몬드 문제이다. 예를 들어 GrandFather이라는 클래스가 myMethod()라는 이름의 메서드를 가지고 있다고 가정해 보자. 그리고 FatherA와 FatherB가 각각 오버라이딩하여 구현하였다면, FatherA와 FatherB를 모두 상속받은 Son 클래스 입장에서는 어떤 부모의 myMethod()를 사용해야 할까? 이런 문제로 인하여 충돌이 발생하게 된다. 코드로 나타내면 ..
자바의 상속에 대해 알아보겠습니다. 1. 자바 상속의 특징 상속이란 상속이란 상위 클래스에서 정의한 필드와 메서드를 하위 클래스에서도 동일하게 사용할 수 있게 물려받는 것이다. 상속을 사용하는 이유 코드를 재사용하기 편하고 클래스 간 계층구조를 분류하고 관리하기 쉬워진다. 자바 상속의 특징 서브클래스는 슈퍼클래스의 모든 멤버(필드, 메서드, 중첩 클래스)를 상속한다. 생성자는 멤버가 아니므로, 상속되지 않는다. 그러나 슈퍼클래스의 생성자는 서브클래스에서 실행될 수 있다. ex) super() 자손의 변경은 조상에 영향을 미치지 않는다. 자바는 단일상속만을 허용한다. (c++은 다중상속 허용) 명시적으로 슈퍼클래스를 지정해주지 않는다면, 모든 클래스의 암시적인 슈퍼클래스는 Object 클래스(모든 클래스의..
트랜잭션과 ACID 특성에 대해 알아보겠습니다. 1. 트랜잭션(transaciton) 트랜잭션이란 DBMS에서 데이터를 다루는 논리적 단위를 말한다. 트랜잭션은 완전히 완료되기도 하고 전혀 완료되지 않을 수도 있으며, 데이터베이스 상태를 한결같은 상태로 둔다. 트랜잭션의 전형적인 예는 은행 계좌에서 현금을 인출할 때 일어나는 과정이다. 현금이 계좌에서 인출되거나, 인출되지 않거나 둘 중의 하나일 뿐 외의 결과는 존재하지 않는다. 만약 중간에 실행이 중단되었을 경우, 처음부터 다시 실행하는 rollback을 수행하고, 오류 없이 실행을 마치면 commit을 하는 실행 단위를 의미한다. 즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업 수행의 논리적 단위이다. 예를 들어, 친구에게..