[JAVA] 자바 부모클래스 및 인터페이스 심화: 오버라이딩과 메서드 동작
·
BackEnd/JAVA
1. 자바 부모 클래스와 인터페이스 메서드를 오버라이딩 하지 않게 하는 방법자바에서 인터페이스나 부모 클래스의 메서드를 오버라이딩하지 않게 하려면 final 키워드를 활용하는 것이 핵심입니다. 하지만, 각각의 경우에서 어떻게 적용되는지 좀 더 자세히 설명드리겠습니다.1.1 부모 클래스 메서드를 오버라이딩 하지 않게 하려면부모 클래스에서 자식 클래스가 특정 메서드를 오버라이딩하지 못하게 하려면, 해당 메서드를 final로 선언해야 합니다. final로 선언된 메서드는 자식 클래스에서 오버라이딩할 수 없습니다.class Parent { public final void someMethod() { // 이 메서드는 오버라이딩 불가 }}class Child extends Parent { ..
[트러블 슈팅] RESTful API 설계: GET 메서드에서 Request Body를 사용해도 될까?
·
트러블 슈팅
1. 시작하며회사에서 진행 중인 프로젝트에서 프론트엔드와 백엔드 간 통신에서 예상치 못한 문제가 발생했습니다. API 설계 시 Spring Boot에서 GET 메서드에 @RequestBody를 사용해 데이터 요청을 처리하도록 구성했는데, Postman을 이용한 테스트에서는 정상적으로 동작했지만, Axios를 사용하는 프론트엔드 클라이언트에서는 요청이 실패했습니다.당시 Parameter 값이 많아 DTO를 record로 정의한 뒤 @RequestBody로 데이터를 전달받도록 설계했지만, 클라이언트와의 통신에서는 400 Bad Request 에러가 발생하며 정상적으로 동작하지 않았습니다. 이 글에서는 해당 문제를 해결하며 알게 된 GET 메서드와 Request Body의 관계, 그리고 RESTful API ..
[JAVA] 인터페이스 정리
·
BackEnd/JAVA
1. 인터페이스란?자바에서 인터페이스는 클래스가 구현해야 하는 메서드의 규격(계약)을 정의하는 역할을 합니다. 즉, 행동의 청사진(스펙)을 제공하며, 인터페이스에 선언된 메서드들을 해당 인터페이스를 구현하는 클래스가 반드시 구현해야 합니다.인터페이스는 자바의 다형성(Polymorphism)을 지원하는 중요한 개념 중 하나로, 이를 통해 서로 다른 클래스들이 동일한 방식으로 호출될 수 있도록 보장합니다.2. 인터페이스의 특징2.1 메서드 선언만 존재 (자동으로 public abstract 적용)인터페이스 내의 메서드는 구현부가 없는 추상적인 메서드입니다. 별도로 public 또는 abstract를 명시하지 않아도, 모든 인터페이스 메서드는 자동으로 public과 abstract가 적용됩니다. 즉, 인터페이..
[JAVA] 추상 클래스 (Abstract Class) 정리
·
BackEnd/JAVA
1. 추상 클래스 (Abstract Class)란?추상 클래스란 클래스의 설계도를 제공하지만 완전하지 않은 클래스입니다. 즉, 일부 메서드는 구현되어 있지만, 구체적인 내용을 정의하지 않은 추상 메서드를 포함할 수 있습니다. 추상 클래스는 직접 객체를 생성할 수 없으며, 상속을 통해 자식 클래스에서 구체적으로 구현해야 합니다.1.1 추상 클래스 정의추상 클래스는 abstract 키워드를 사용하여 선언합니다.추상 메서드도 abstract 키워드를 사용하며, 해당 메서드는 내용 없이 메서드 선언만 있습니다.자식 클래스에서 추상 메서드를 반드시 구현해야 합니다.2. 추상 클래스의 특징2.1 추상 클래스는 객체를 생성할 수 없다.추상 클래스는 불완전한 클래스이므로 직접적으로 객체를 생성할 수 없습니다. 추상 메..
[JAVA] 접근 지정자 (Access Modifiers) 정리
·
BackEnd/JAVA
1. 접근 지정자란?자바에서 접근 지정자(access modifier)는 클래스, 메서드, 변수 등에 대한 접근 범위를 설정하는 키워드입니다. 접근 지정자는 클래스 외부에서 해당 멤버에 대해 어디까지 접근할 수 있는지를 제어합니다. 접근 범위를 설정함으로써 캡슐화(encapsulation)를 강화하고, 코드의 보안성과 유지보수성을 높일 수 있습니다.접근 지정자는 총 네 가지가 있으며, 각각은 해당 멤버에 대해 접근할 수 있는 범위(동일 패키지, 자식 클래스, 외부 클래스 등)를 제한하거나 허용하는 역할을 합니다. 클래스 설계 시 접근 지정자를 적절히 사용함으로써 데이터 보호, 코드의 모듈화, API의 안정성 등을 보장할 수 있습니다.2. 접근 지정자의 종류2.1 public 접근 지정자정의: public..
[JAVA] 자바에서 main 메서드가 static인 이유
·
BackEnd/JAVA
자바를 처음 배우면 가장 먼저 접하는 메서드가 바로 main 메서드입니다. 하지만 "왜 main 메서드는 항상 static으로 선언되어야 하는가?"라는 질문에 대해 깊이 생각해 본 적 있으신가요? 이번 포스팅에서는 자바의 main 메서드와 static 키워드의 관계를 쉽게 이해할 수 있도록 정리해 보겠습니다.1. main 메서드란?main 메서드는 자바 애플리케이션의 진입점(entry point)입니다. JVM(Java Virtual Machine)은 프로그램 실행 시 가장 먼저 main 메서드를 호출하여 프로그램을 시작합니다.public static void main(String[] args) { // 실행될 코드}구성 요소public: JVM이 외부에서 접근할 수 있도록 선언static: 객체 ..
[성능 개선] 여러 개의 업데이트를 하나의 트랜잭션으로 처리하기 (Feat. Mybatis, Bulk Update)
·
성능 개선
1. 시작하며최근 회사에서 Quartz 스케줄링을 통해 서버 디렉토리에 저장된 파일 상태와 데이터베이스의 기존 데이터를 비교하여 주기적으로 업데이트하는 작업을 개발했습니다.하지만 초기 구현 방식은 트랜잭션이 여러 번 발생하면서 성능 저하가 심각하게 발생했습니다. 이에 Bulk Update를 도입하여 성능을 대폭 개선한 사례를 공유하고자 합니다.회사 해당 프로젝트 코드는 반입이 금지되어 있으니 이 글에서는 여러 게시글 데이터를 한 번에 업데이트하는 방법과 함께 성능 최적화 및 Null 처리 시 주의사항을 설명합니다.2. 기존 방식의 문제점기존 코드는 애플리케이션단 코드에서 개별 데이터를 업데이트하는 쿼리를 반복적으로 실행하면서 트랜잭션이 여러 번 발생하는 문제가 있었습니다.2.1 기존 코드1) 기존 Myb..
[JAVA] 레코드 (record) 정리
·
BackEnd
1. 레코드 (record)란?자바에서 record는 자바 16부터 정식 기능으로 도입되어, 자바 17에서 계속해서 사용되고 있는 기능입니다. record는 불변의 데이터 운반 객체를 간단하게 생성할 수 있는 방법을 제공합니다. 이는 주로 데이터를 담기 위한 클래스에 매우 유용하며, 클래스를 정의할 때 필요한 상용구 코드(boilerplate code)의 양을 대폭 줄여줍니다.2. record의 주요 특징들2.1 불변성 (Immutability)레코드는 불변 객체입니다. 레코드의 모든 필드는 final로 선언되며, 객체가 생성된 후에는 필드 값을 변경할 수 없습니다. 즉, 레코드는 객체의 상태가 절대 바뀌지 않도록 보장합니다.public record Person(String name, int age) {..