Koray PEKER
Menu
  • Anasayfa
  • Kütüphane
  • Kategoriler
    • Java
    • Spring
    • Tasarım Şablonları
    • Git
    • Maven
    • ORM Çatıları
    • VCS
    • SDLC
    • DevOps
    • Algoritma
    • Eğitim
    • Diğer
  • Hakkımda
Menu

Project : Lombok

10 Haziran 201821 Ekim 2018 tarihinde yayımlandı

Project Lombok Nedir ?

Java projelerinde standart olarak yazılması gereken kod parçacıkları vardır. ( getter, setter, constructor, toString, equal, hashcode vb.) Java dilinin en sık dile getirilen eleştirilerinden biri, çoğu projede bulunan bu tür kodların hacmidir. Kullandığımız IDE’ler sayesinde hızlıca getter-setterları, toString vs. metotlarını oluşturabiliyoruz. Peki ya okunabilirlik ?

Project Lombok, gereksiz satır sayısı fazlalığından kurtarmak, okunabilirliği arttırmak ve daha temiz kod vaatleriyle ortaya çıkmıştır. Pragmatik geliştirici için güçlü bir araçtır. Java sınıflarınızdaki bol miktarda standart kodu ortadan kaldırmak için bir dizi faydalı anotasyon sunar. En iyi durumlarda, yüzlerce satırlık kodun yerini sadece beş satır alabilir.

Project Lombok, Java sınıfları için genel olarak yazılan standart kodların miktarını azaltmak için kullanılabilecek küçük bir kütüphanedir.

Kurulumu

Projemizde Lombok kullanmak için pom.xml’e bağımlılığı tanımlamamız gerekmektedir.

Java
1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

En güncel sürümü buradan kontrol edebilirsiniz.

Ayrıca kullandığınız IDE’ye de Lombok plugin’i yüklemek gerekmektedir.

 

Lombok Anotasyonları

 

@Getter ve @Setter

Kapsülleme(Encapsulation) konumuzda da bahsetmiştik bir sınıfın kapsülledikten sonra dış dünyaya getter setterlar ile açarız. Lombok bunları aynı ismi taşıyan anotasyonlarla kendisi yapmaktadır. Bunun iki yolu vardır; ya sınıf seviyesinde tüm alanların ya da alan seviyesinde tek tek kendiniz erişim seviyesini belirtip getter setterları oluşturabilirsiniz.

Java
1
2
3
4
5
6
7
8
9
10
11
12
@Getter
@Setter
public class User {
 
    private String firstName;
 
    @Getter(AccessLevel.PACKAGE)
    private String lastName;
 
    private int age;
 
}

 

@NonNull

Alanlarımız üzerinde null kontrolü yapmaktadır ve eğer null setleniyor ise NullPointerException fırlatılmasını sağlıyor.

Java
1
2
3
4
5
6
@NonNull
private String firstName;
 
Exception in thread "main" java.lang.NullPointerException: firstName
at com.koraypeker.User.setFirstName(User.java:9)
at Test.main(Test.java:8)

 

@ToString

ToString anotasyonu, sınıf seviyesinde toString metodunu oluşturmaktadır. Hangi alanları içermesi gerektiği, hangi alanların kullanmayacağını parametre olarak geçebiliyorsunuz.

Java
1
@ToString(exclude = {"age"})

 

@EqualsAndHashCode

Bu anotasyon, sınıf seviyesinde hem equals() hem de hashCode() metotlarını oluşturmaktadır. ToString anotasyonunda olduğu gibi parametrelerle sınıf alanlarını dahil veya hariç yapabilirsiniz.

Java
1
@EqualsAndHashCode(exclude = {"age"})

 

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

Bu anotasyonlar, yapılandırıcıları(Constructor) oluşturmadır. NoArgs ile parametresiz, requiredArgs ile @NonNull anotasyonu ile işaretlediğiniz alanlara göre, AllArgs ise tüm alanlar ile constructor oluşturur.

@Data

Bu anotasyonumuz ise Lombok içerisinde en çok kullanılan anotasyondur. @ToString, @EqualsAndHashCode, @Getter ve @Setter işlevlerini birleştirir. POJO sınıflarının bolca kullandığı anotasyondur.

Öncesi

Java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class User {
 
    private String firstName;
    private String lastName;
    private int age;
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
 
        User user = (User) o;
 
        if (age != user.age) return false;
        if (firstName != null ? !firstName.equals(user.firstName) : user.firstName != null) return false;
        return lastName != null ? lastName.equals(user.lastName) : user.lastName == null;
    }
 
    @Override
    public int hashCode() {
        int result = firstName != null ? firstName.hashCode() : 0;
        result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
        result = 31 * result + age;
        return result;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", age=" + age +
                '}';
    }

Sonrası

Java
1
2
3
4
5
6
7
8
@Data
public class User {
 
    private String firstName;
    private String lastName;
    private int age;
 
}

 

@Builder

Eğer Builder tasarım şablonunu kullanmak istiyorsanız sadece bu anotasyonu sınıf seviyesinde koymanız yeterlidir. Builder tasarım şablonunu daha iyi anlamak için buradan yazımı okuyabilirsiniz.

Java
1
2
@Builder
public class User {

Java
1
2
3
4
5
6
public class Test {
 
    public static void main(String[] args) {
        User user = User.builder().age(30).firstName("Koray").lastName("Peker").build();
    }
}

 

@Slf4j @Log @CommonsLog @Log4j @Log4j2 @XSlf4j

Projenizde kullandığınız loglama mekanızmasına göre ilgili anotasyon ile sınıflarınızı işaretleyebilirsiniz. Bu sayede her sınıf içerisinde logger nesnesi oluşturmaya gerek olmayacaktır.

Java
1
2
3
4
5
6
7
8
@Log4j
public class Test {
 
    public static void main(String[] args) {
        log.info("Selam");
    }
 
}

Bunun gibi daha bir çok anotasyon bulunmaktadır. https://projectlombok.org/features/ adresinden anotasyonları inceleyebilirsiniz.

Lombok’u uygulamalarınızdan birine eklemeyi deneyin ve  kod satırlarının ne kadar azaldığını görün.

Kaynaklar

  • http://jnb.ociweb.com/jnb/jnbJan2010.html

3 yorum yapıldı “Project : Lombok”

  1. Geri bildirim: NullPointerException'dan Kaçış | Koray PEKER
  2. Elif dedi ki:
    3 Aralık 2018, 18:15

    Çok faydalı bir yazı olmuş, teşekkürler.

    Yanıtla
    1. admin dedi ki:
      3 Aralık 2018, 18:55

      Faydalı olmasına çok sevindim elif

      Yanıtla

Bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

POPÜLER YAZILAR

  • Çalışma Masam
  • Bir Yazılımcının Sırt Çantası
  • Modern Veri Tabanları
  • CI (Continuous integration) ve CD (Continuous Delivery/Deployment)
  • NullPointerException’dan Kaçış
  • Java Branching Statements (Dallanma İfadeleri)
  • İlk işime veda :(
  • Yük Testi ve SoapUI
  • Project : Lombok
  • Enumeration nedir ?

Ara

Son Yazılar

  • Çalışma Masam
  • Apache Kafka
  • Postman API’ları Görselleştirme
  • MongoDB Cheat Sheet
  • Splunk 101 – Giriş
  • Yük Testi ve SoapUI
  • Modern Veri Tabanları
  • Senior Stajyer ?!
  • API Dokümantasyon Önemi ve Swagger
  • Kod Tekrarı(Code Duplication) ve DRY

TAKİP ET

©2025 Koray PEKER