티스토리 뷰
자바 개발에서 보일러플레이트(boilerplate) 코드를 줄이고 생산성을 높이는 것은 항상 중요한 과제입니다. 특히 객체의 필드에 접근하고 값을 설정하는 getter와 setter 메서드는 거의 모든 클래스에서 반복적으로 작성되는 대표적인 코드입니다. 이때 Lombok은 개발자의 손과 시간을 크게 덜어주는 강력한 애너테이션 프로세서로 자리매김했습니다.
하지만 Lombok이 자동으로 생성해주는 getter/setter의 기본 명명 규칙이 특정 프로젝트의 코딩 컨벤션이나 특별한 요구 사항과 완벽하게 일치하지 않을 때가 있습니다. 예를 들어, mName이라는 필드가 있을 때 getMName() 대신 getName()처럼 더 간결하고 직관적인 메서드 이름을 원할 수 있습니다. boolean 타입의 bFlag 필드에 대해서도 isBFlag() 대신 getFlag() 또는 단순히 flag()를 선호할 수도 있죠.
이러한 필드명 접두사 제거에 대한 고민은 Lombok의 강력한 사용자 정의 기능인 @Accessors 애너테이션의 prefix 속성을 통해 깔끔하게 해결됩니다. 이 가이드는 @Accessors(prefix)를 활용하여 Lombok이 생성하는 getter/setter의 접두사를 여러분의 입맛에 맞게 커스터마이징하는 방법을 심도 있게 다룹니다. Lombok getter setter prefix 설정에 대한 해답과 Lombok @Accessors 예제를 통해 더욱 유연하고 깔끔한 코드를 작성하는 방법을 함께 탐구해볼 것입니다.

왜 Lombok @Accessors(prefix)가 필요할까요?
Lombok @Accessors(prefix)의 필요성을 이해하려면 먼저 Lombok이 왜 사용되며, 기본 getter/setter 규칙이 어떤 한계를 가질 수 있는지 알아보는 것이 중요합니다.
1. 반복되는 getter/setter 코드, Lombok으로 해결!
자바 개발자는 id, name, email과 같은 객체 필드를 정의할 때, 각 필드에 대해 getId(), setId(), getName(), setName() 등 수많은 getter와 setter 메서드를 작성해야 합니다. 이처럼 특별한 로직 없이 반복적으로 작성되는 코드를 우리는 보일러플레이트 코드라고 부릅니다.
보일러플레이트 코드의 문제점:
- 코드량 증가: 코드 가독성을 저해하고 핵심 비즈니스 로직 파악을 어렵게 합니다.
- 유지보수 부담: 필드 변경 시 수많은 메서드를 수정해야 하는 번거로움이 있습니다.
- 개발 생산성 저하: 반복적인 코드 작성에 귀중한 개발 시간을 소모하게 됩니다.
Lombok은 이러한 문제를 해결하기 위해 등장했습니다. 개발자는 @Getter, @Setter, @Data와 같은 간단한 애너테이션을 필드나 클래스에 붙이기만 하면 됩니다. Lombok은 컴파일 시점에 필요한 getter, setter 등의 메서드를 바이트코드에 자동으로 주입하여, 소스 코드에는 보일러플레이트를 작성하지 않아도 컴파일된 .class 파일에는 모든 메서드가 존재하게 합니다.
Lombok 사용의 이점:
- 코드량 극적 감소: 소스 코드의 양을 줄여 가독성을 높이고 핵심 로직에 집중할 수 있게 합니다.
- 유지보수 용이성: 필드 변경 시 관련 메서드를 수동으로 수정할 필요가 없습니다.
- 개발 속도 향상: 반복 작업 시간을 줄여 중요한 문제 해결에 몰두할 수 있게 합니다.
2. 표준 Getter/Setter 규칙, 항상 최적일까?
Lombok은 자바 빈(Java Bean) 규약을 충실히 따릅니다. 이 규약은 재사용 가능한 소프트웨어 컴포넌트의 표준으로, getter와 setter 메서드의 명명 규칙을 정의합니다.
자바 빈 규약의 기본 규칙:
- 일반 필드:
fieldName에 대해getFieldName()(getter),setFieldName(newValue)(setter) 생성. boolean타입 필드:isReady에 대해isReady()(getter),setReady(newValue)(setter) 생성. (단,Boolean래퍼 타입은 일반적으로get접두사 사용)
이러한 기본 규칙은 자바 생태계 전반에 걸쳐 널리 사용되지만, 때로는 특정 코딩 컨벤션이나 레거시 시스템과의 호환성 문제로 인해 이 규칙을 벗어난 getter/setter 이름이 필요할 수 있습니다.
3. 필드명 접두사 관행과 충돌하는 경우
일부 개발 환경에서는 필드명에 특정 접두사를 붙이는 관습이 있습니다. 이러한 관습이 Lombok의 기본 규칙과 만났을 때 Lombok 필드명 접두사 제거가 필요한 문제가 발생합니다.
- 멤버 변수 식별 (
m_,m): C++ 등의 영향으로m_name또는mName처럼 필드명에m접두사를 붙여 멤버 변수를 식별하는 경우가 있습니다. Lombok 기본 동작은getMName()을 생성하게 되는데, 이는 클라이언트 코드에서getName()과 같이 접두사 없는 이름을 선호할 때 어색할 수 있습니다. - 타입 식별 (
str,b):strName(String 타입 이름),bFlag(boolean 타입 플래그)처럼 타입을 나타내는 접두사를 붙이는 '헝가리안 표기법'을 사용할 때도 유사한 문제가 발생합니다. 특히boolean bFlag의 경우isBFlag()가 생성되는데, 이는getFlag()나flag()와 같이b접두사를 제거한 형태를 더 선호할 수 있습니다. 즉,Lombok boolean is 제거가 필요한 상황입니다. - 외부 라이브러리/프레임워크 호환성: 특정 프레임워크가 필드명에서 접두사를 제거한
getter/setter를 기대할 때, Lombok이 기본 규칙을 따르면 호환성 문제가 발생할 수 있습니다.
이러한 시나리오에서 Lombok의 prefix 속성은 내부적인 필드명 관습을 유지하면서도, 외부로 노출되는 getter/setter API를 깔끔하고 직관적으로 만들 수 있는 핵심적인 해결책이 됩니다.
Lombok @Accessors 애너테이션 핵심 이해
@Accessors 애너테이션은 Lombok이 getter와 setter를 생성하는 방식을 미세하게 제어할 수 있도록 해주는 강력한 도구입니다. 이 애너테이션의 핵심은 prefix 속성입니다.
1. @Accessors의 역할과 prefix 속성 원리
@Accessors는 주로 클래스 레벨이나 필드 레벨에 적용되어 getter와 setter의 동작 방식을 변경합니다. 일반적인 @Getter나 @Setter 애너테이션과 함께 사용될 때 그 진가를 발휘합니다.
prefix 속성의 작동 원리:prefix 속성은 하나 또는 여러 개의 접두사를 지정할 수 있는 문자열 배열(String[])을 인자로 받습니다. Lombok은 필드명을 스캔하여 prefix 배열에 지정된 접두사 중 하나로 필드명이 시작하는 경우, 해당 접두사를 필드명에서 제거한 후 getter/setter 이름을 생성합니다.
예를 들어, @Accessors(prefix = "m")라고 지정하고 mName 필드가 있다면, Lombok은 mName에서 m을 제거한 Name을 기반으로 getName() getter와 setName() setter를 생성합니다. 이때 대소문자를 구분하므로 prefix = "m"은 mName에는 적용되지만, MName에는 적용되지 않습니다. (둘 다 처리하려면 prefix = {"m", "M"}처럼 지정해야 합니다.)
2. prefix 속성 적용 범위: 클래스 vs. 필드 레벨
prefix 속성은 두 가지 레벨에서 적용할 수 있으며, 각각 다른 유효 범위를 가집니다.
2-1. 클래스 레벨 적용
클래스 레벨에 @Accessors(prefix = {"접두사1", "접두사2"})를 선언하면, 해당 클래스 내의 모든 필드에 대해 지정된 접두사 규칙이 적용됩니다.
장점: 클래스 전체에 일관된 규칙을 적용할 때 효율적이며, 코드 중복을 줄입니다.
단점: 특정 필드에만 다른 규칙을 적용해야 할 경우, 유연성이 떨어집니다. (이 경우 필드 레벨 prefix로 오버라이딩 가능)
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
@Accessors(prefix = "m") // 클래스 내 모든 필드에 'm' 접두사 규칙 적용
public class MyClass {
private String mName; // 예상: getName(), setName()
private int mAge; // 예상: getAge(), setAge()
private boolean mActive; // 예상: isActive(), setActive()
// 'm' 접두사가 없는 필드는 기본 규칙을 따름
private String address; // 예상: getAddress(), setAddress()
}
2-2. 필드 레벨 적용
필드 레벨에 @Accessors(prefix = "접두사")를 선언하면, 해당 필드에만 지정된 접두사 규칙이 적용됩니다.
장점: 특정 필드에만 예외적으로 다른 규칙을 적용하거나, 클래스 레벨 규칙을 재정의할 때 유용합니다.
단점: 많은 필드에 개별적으로 적용해야 한다면 코드가 번잡해질 수 있습니다.
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
public class AnotherClass {
@Accessors(prefix = "s_") // 이 필드에만 's_' 접두사 규칙 적용
private String s_id; // 예상: getId(), setId()
private String name; // 예상: getName(), setName() (기본 규칙)
}
참고: 만약 클래스 레벨과 필드 레벨에 동시에 @Accessors가 적용된다면, 필드 레벨의 설정이 클래스 레벨의 설정을 오버라이딩합니다. 더 구체적인 범위의 설정이 우선권을 가집니다.
@Accessors(prefix) 실전 활용 예제
이제 @Accessors(prefix)를 실제로 어떻게 활용할 수 있는지 다양한 Lombok @Accessors 예제를 통해 살펴보겠습니다.
1. 단일 접두사 제거: mName을 getName()으로
가장 흔한 시나리오로, 필드명에 m과 같은 단일 접두사가 붙어있을 때 이를 제거하고 싶을 경우입니다.
문제 상황: 클래스 멤버 변수에 m 접두사를 사용하지만, getter는 getName()과 같이 접두사 없이 깔끔하게 생성되기를 원합니다. (기본 Lombok 사용 시 getMName() 생성)
해결책: 클래스 레벨에 @Accessors(prefix = "m")를 추가하여 m 접두사를 제거합니다.
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
@Accessors(prefix = "m") // 'm'으로 시작하는 필드에서 'm'을 제거
public class UserProfile {
private String mUserName; // 결과: getUserName(), setUserName()
private int mUserAge; // 결과: getUserAge(), setUserAge()
private String email; // 'm'으로 시작하지 않으므로, 기본: getEmail(), setEmail()
}
설명: mUserName 필드에서 m이 제거된 UserName을 기반으로 getUserName(), setUserName()이 생성됩니다. 내부 필드명 컨벤션을 유지하면서도, 외부에 노출되는 API는 표준에 가깝게 만들 수 있습니다.
2. boolean 타입 is 접두사 커스터마이징: bFlag를 getFlag() 또는 flag()로
boolean 타입 필드에 b 접두사를 붙이는데, 기본 isBFlag() 대신 getFlag()나 flag()와 같이 b 접두사를 제거하고 싶을 때입니다. 이는 Lombok boolean is 제거 키워드에 대한 해결책입니다.
문제 상황: boolean 타입 필드에 b 접두사를 사용하지만, getter가 isBEnabled()가 아닌 getEnabled()나 enabled()로 생성되기를 원합니다.
해결책: @Accessors(prefix = "b")를 사용하여 b 접두사를 제거합니다. 필요에 따라 fluent = true를 추가하여 get/is 접두사까지 제거할 수 있습니다.
2-1. getEnabled() 형태로 만들기
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
@Accessors(prefix = "b") // 'b'로 시작하는 필드에서 'b'를 제거
public class FeatureToggle {
private boolean bEnabled; // 결과: getEnabled(), setEnabled()
private Boolean bActive; // 결과: getActive(), setActive()
}
설명: bEnabled에서 b가 제거된 Enabled를 기반으로 getEnabled(), setEnabled()가 생성됩니다. boolean 원시 타입이라도 prefix가 우선 적용되어 is 대신 get 접두사가 붙게 됩니다.
2-2. enabled() 형태로 만들기 (Fluent API 스타일)
get 접두사조차 생략하고, setter에서 this를 반환하여 메서드 체이닝을 가능하게 하고 싶다면 fluent = true 속성을 함께 사용합니다.
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
@Accessors(prefix = "b", fluent = true) // 'b' 제거, fluent 스타일 적용
public class Setting {
private boolean bDebugMode; // 결과: debugMode(), debugMode(boolean)
private boolean bVerboseLog; // 결과: verboseLog(), verboseLog(boolean)
}
활용 예시:
Setting setting = new Setting()
.debugMode(true)
.verboseLog(false);
fluent 스타일은 빌더 패턴과 유사한 간결한 API를 제공합니다.
3. 복수 접두사 제거: s_id, m_name을 getId(), getName()으로
클래스 내에서 여러 종류의 접두사를 사용하는 필드가 있을 때, 이들 모두를 한 번에 처리하고 싶을 경우입니다.
문제 상황: 데이터베이스 컬럼 매핑 필드에는 s_ (source)를, 내부 멤버 변수에는 m_ (member)를 사용하는데, getter에서는 이 모든 접두사를 제거하고 싶습니다.
해결책: prefix 속성에 문자열 배열을 전달하여 여러 개의 접두사를 지정합니다.
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
@Accessors(prefix = {"s_", "m_"}) // 's_' 또는 'm_'으로 시작하는 필드에서 해당 접두사 제거
public class DataRecord {
private String s_recordId; // 결과: getRecordId(), setRecordId()
private String m_internalName; // 결과: getInternalName(), setInternalName()
private int value; // 접두사 없으므로 기본: getValue(), setValue()
}
설명: s_recordId에서는 s_가, m_internalName에서는 m_가 각각 제거되어 getter/setter가 생성됩니다.
4. 클래스 레벨과 필드 레벨 prefix의 조합
대부분의 필드에 공통된 접두사 규칙을 적용하지만, 특정 필드에만 예외적으로 다른 규칙을 적용해야 할 때입니다.
문제 상황: 클래스 전체적으로 _ (언더스코어) 접두사를 제거하고 싶지만, 특정 _transactionId 필드만은 id 대신 transactionId를 기반으로 getTransactionId()를 만들고 싶습니다.
해결책: 클래스 레벨 prefix를 설정하고, 특정 필드에 다시 @Accessors(prefix = "다른접두사")를 지정하여 오버라이딩합니다.
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter
@Setter
@Accessors(prefix = "_") // 클래스 전체에 '_' 접두사 제거 규칙 적용
public class Order {
private String _orderNumber; // 결과: getOrderNumber(), setOrderNumber()
private double _amount; // 결과: getAmount(), setAmount()
@Accessors(prefix = "txn") // 이 필드는 클래스 레벨 규칙 무시, 'txn' 접두사 제거
private String txnId; // 결과: getId(), setId()
// 이 필드는 '_' 접두사가 없으므로 클래스 레벨 규칙 무시, 기본 규칙 적용
private String customerName; // 결과: getCustomerName(), setCustomerName()
}
설명: 클래스 레벨 _ 접두사 규칙은 _orderNumber와 _amount에 적용됩니다. 하지만 txnId 필드에 @Accessors(prefix = "txn")가 별도로 지정되어 클래스 레벨 규칙을 오버라이딩하고 txn 접두사를 제거합니다.
@Accessors의 확장 기능: Fluent API, Chain, Final 메서드
@Accessors 애너테이션은 prefix 외에도 getter/setter의 동작 방식을 세밀하게 제어할 수 있는 유용한 속성들을 제공합니다. 이러한 속성들을 함께 활용하면 더욱 유연하고 특정 디자인 패턴에 맞는 코드를 생성할 수 있습니다.
1. fluent = true: 유창한(Fluent) API 스타일로 간결하게
fluent 속성은 true로 설정했을 때, getter 메서드의 get/is 접두사를 제거하고 setter 메서드의 set 접두사를 제거함과 동시에 setter가 this (자기 자신) 객체를 반환하도록 합니다. 이는 메서드 체이닝(Method Chaining)을 가능하게 하여 코드를 더욱 간결하고 유창하게 만듭니다.
작동 방식:
getter:getFieldName()또는isFieldName()->fieldName()setter:setFieldName(value)->fieldName(value)(그리고this반환)
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter @Setter
@Accessors(fluent = true) // fluent 스타일 적용
public class Configuration {
private String serverUrl; // Getter: serverUrl(), Setter: serverUrl(String)
private int timeoutMillis; // Getter: timeoutMillis(), Setter: timeoutMillis(int)
private boolean cacheEnabled; // Getter: cacheEnabled(), Setter: cacheEnabled(boolean)
}
활용 예시:
Configuration config = new Configuration()
.serverUrl("http://api.example.com")
.timeoutMillis(5000)
.cacheEnabled(true);
fluent 스타일은 빌더 패턴을 직접 구현하지 않고도 유사한 간결성을 얻고 싶을 때 매우 유용합니다.
2. chain = true: Setter 메서드 체이닝으로 코드 효율 높이기
chain 속성은 true로 설정했을 때, 모든 setter 메서드가 void 대신 this (자기 자신) 객체를 반환하도록 합니다. 이는 fluent = true와 유사하게 메서드 체이닝을 가능하게 하지만, get/set 접두사는 유지됩니다. (fluent = true를 설정하면 chain = true가 자동으로 포함됩니다.)
작동 방식:
setter:void setFieldName(value)->클래스타입 setFieldName(value)(그리고this반환)
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter @Setter
@Accessors(chain = true) // setter 체이닝 활성화
public class UserBuilder {
private String firstName; // Setter: setFirstName(String) - this 반환
private String lastName; // Setter: setLastName(String) - this 반환
}
활용 예시:
UserBuilder user = new UserBuilder()
.setFirstName("John")
.setLastName("Doe");
3. makeFinal = true: 생성 메서드 안정성 확보
makeFinal 속성은 true로 설정했을 때, Lombok이 생성하는 모든 getter와 setter 메서드를 final 키워드로 선언합니다. final 메서드는 오버라이딩(overriding)될 수 없으므로, 해당 메서드의 동작이 서브클래스에서 변경되는 것을 방지하고자 할 때 사용합니다.
작동 방식:
getter/setter:public final String getFieldName() { ... }
import lombok.Getter;
import lombok.Setter;
import lombok.Accessors;
@Getter @Setter
@Accessors(makeFinal = true) // 생성된 메서드를 final로 선언
public class ImmutableData {
private String id; // Getter: public final String getId()
private String value; // Setter: public final void setValue(String)
}
이러한 속성들은 서로 조합하여 더욱 정교한 getter/setter 생성 규칙을 만들 수 있습니다.
@Accessors(prefix) 사용 시 주의사항 및 모범 사례
Lombok의 강력한 기능들은 생산성을 크게 높여주지만, 잘못 사용하면 오히려 코드 복잡성을 증가시키고 유지보수를 어렵게 만들 수 있습니다. Lombok getter setter prefix 설정을 효과적으로 사용하기 위한 주의사항과 모범 사례를 알아봅니다.
1. 과도한 사용 지양 및 가독성 유지
prefix 속성은 매우 유용하지만, 불필요하게 사용하거나 규칙이 일관되지 않으면 역효과를 낼 수 있습니다.
- 불필요한 커스터마이징 피하기: 대부분의 경우 기본 Lombok 규칙(Java Bean 규약)이 충분합니다.
prefix는 명확한 이점이 있을 때만 사용해야 합니다. - 코드 가독성 저해 방지:
prefix설정을 너무 복잡하게 만들면, 다른 개발자가 필드명만 보고 생성될getter/setter를 유추하기 어려워집니다. 이는 Lombok의 장점 중 하나인 "코드 스캔 용이성"을 해칠 수 있습니다.
2. 팀 코딩 컨벤션 확립과 문서화
Lombok의 유연성은 팀의 코딩 컨벤션과 밀접하게 연결됩니다.
- 컨벤션 합의:
@Accessors의prefix나fluent같은 속성을 어떤 규칙으로 사용할지 팀 전체가 합의해야 합니다. - 명확한 문서화: 합의된 규칙은 반드시 팀의 코딩 컨벤션 문서나 프로젝트 README 파일에 명확하게 문서화해야 합니다. 어떤 필드명 접두사가 어떤
getter/setter로 변환되는지 구체적인 예시와 함께 설명하는 것이 좋습니다. - 정기적인 코드 리뷰: 코드 리뷰를 통해
prefix규칙이 잘 지켜지고 있는지, 의도치 않은 오용은 없는지 점검해야 합니다.
3. IDE 지원 및 delombok 활용
Lombok은 소스 코드에 실제로 존재하지 않는 메서드를 컴파일 시점에 주입합니다.
- Lombok 플러그인 설치: IntelliJ IDEA, Eclipse 등 주요 IDE에 Lombok 플러그인을 설치해야 IDE가 Lombok이 생성하는 메서드를 올바르게 인식하여 코드 완성, 심볼 탐색, 오류 검사 등을 제공합니다.
delombok명령어 활용: Lombok에는delombok이라는 유틸리티가 포함되어 있습니다. 이 도구를 사용하면 Lombok 애너테이션이 적용된 자바 소스 코드를, Lombok이 모든 메서드를 자동으로 생성한 "순수한" 자바 소스 코드로 변환할 수 있습니다.delombok된 코드를 통해@Accessors(prefix)와 같은 복잡한 규칙이 의도한 대로 동작하는지 정확히 확인할 수 있습니다.# Maven 프로젝트의 경우 mvn clean compile delombok
4. 프레임워크 및 리플렉션과의 상호작용 고려
대부분의 현대 자바 프레임워크는 Lombok이 생성하는 getter/setter를 문제없이 인식합니다. 하지만 @Accessors(prefix)를 통해 기본 규약을 벗어나는 이름을 만들 경우, 리플렉션(Reflection)을 통해 메서드를 동적으로 찾는 일부 레거시 라이브러리나 커스텀 프레임워크에서는 문제가 발생할 수 있습니다.
- 호환성 테스트: 새로운
prefix규칙을 도입하기 전에, 사용하는 모든 프레임워크 및 라이브러리와의 호환성을 충분히 테스트해야 합니다. - 수동 메서드 작성: Lombok은 개발자가 명시적으로 작성한 메서드를 오버라이딩하지 않습니다. 특정 프레임워크가 표준 자바 빈
getter/setter만 인식한다면, 필요하다면 수동으로 해당 메서드를 작성하는 것도 고려할 수 있습니다.
결론: 유연하고 깔끔한 코드, Lombok으로 완성!
Lombok의 @Accessors(prefix)는 개발자가 getter/setter 명명 규칙을 섬세하게 제어할 수 있도록 해주는 매우 강력하고 유용한 기능입니다. Lombok getter setter prefix 설정을 통해 필드명 접두사를 제거하고, boolean 타입 필드의 is 접두사를 커스터마이징하며, 유창한 API 스타일을 도입하여 코드를 더욱 간결하게 만들 수 있습니다.
이 기능의 진정한 가치는 단순히 코드를 줄이는 것을 넘어, 팀의 코딩 컨벤션을 효과적으로 지원하고, 가독성을 높이며, 궁극적으로는 개발자가 핵심 비즈니스 로직에 더 집중할 수 있도록 돕는 데 있습니다. 따라서 신중하게 규칙을 정하고, 팀원들과 공유하며, 필요한 경우 delombok과 같은 도구를 활용하여 코드를 검증하는 현명한 접근 방식이 필수적입니다.
Lombok과 @Accessors를 올바르게 활용함으로써, 여러분은 더욱 깔끔하고 유지보수하기 쉬운 자바 코드를 작성하는 진정한 '전문가'로 거듭날 수 있을 것입니다. 이 가이드가 여러분의 자바 개발 여정에 큰 도움이 되기를 바랍니다!
'DEV' 카테고리의 다른 글
| 개발 핵심 개념: 배포, 릴리즈, 브런치, 실전 완벽 가이드 (0) | 2026.01.29 |
|---|---|
| Java BigDecimal: '=='와 equals() 대신 compareTo()로 정확한 숫자 비교 마스터하기 (부동소수점 오차 완벽 해결) (0) | 2026.01.29 |
| 자바 컬렉션 Null-Safe 정렬 마스터하기: NullPointerException 방지 완벽 가이드 (0) | 2026.01.29 |
| API 페이로드 개념 완벽 이해: 비전공자부터 개발자까지, 효율적인 데이터 통신의 핵심 가이드 (0) | 2026.01.29 |
| 자바 사용자 정의 어노테이션 완벽 가이드: 나만의 기능으로 코드 생산성 극대화 (개념부터 실무 활용까지) (0) | 2026.01.29 |
- Total
- Today
- Yesterday
- 프롬프트엔지니어링
- springai
- 개발자성장
- 프론트엔드개발
- 배민
- AI
- Java
- 미래ai
- 클라우드컴퓨팅
- 로드밸런싱
- 자바개발
- 클린코드
- 웹개발
- 업무자동화
- 웹보안
- 개발생산성
- restapi
- 인공지능
- 데이터베이스
- n8n
- 개발자가이드
- 성능최적화
- LLM
- 마이크로서비스
- SEO최적화
- 개발가이드
- AI반도체
- AI기술
- 백엔드개발
- 생성형AI
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
