Bir Java kodunda, sınıflarınız için getter-setter, toString(), equals() ve hashCode() yöntemleri yazmak; nesne eşitliğini sağlamak, koleksiyonlardaki nesneleri karşılaştırmak ve nesneleri maplerde key olarak kullanmak için gereklidir. Ancak bunları yazmak, kod tekrarına, tutarsızlığa, bazen de hatalara yol açabilir. Lombok bu konuda oldukça yarar sağlayan bir kütüphane.
Lombok Nedir ?
Sınıflarınız için BoilerPlate kod oluşturmak için Anotasyon sağlayan bir Java kitaplığıdır. Lombok’u kullanarak getter-setter methodları, constructor, toString(), equals(), hashCode() ve diğer yaygın yöntemleri yazmaktan kaçınabilirsiniz. Lombok, sınıfınızdaki alanlara ve anotasyonlara göre derleme zamanında bunları sizin için üretecektir. Örneğin, sınıfınız için eşittir ve hashCode yöntemlerini oluşturmak için @EqualsAndHashCode anotasyonunu kullanabilirsiniz.
Lombok Nasıl Çalışır ?
Derleme sırasında kaynak kodunuzun Abstract Syntax Tree (AST) değiştirmek için bir Java Annotation Processor kullanarak çalışır. Java Annotation Processor, sınıfınızdaki anotasyonları okur ve karşılık gelen yöntemleri AST’ye ekler. Derleyici daha sonra, sınıfa bayt kodunu üretmek için değiştirilmiş AST’yi kullanır. Bu, Lombok’un sınıfınızın çalışma zamanı performansını veya davranışını etkilemediği anlamına gelir. Ayrıca, IDE’nizi yapılandırmanız ve Lombok anotasyonlarını tanımak ve desteklemek için araçlar oluşturmanız gerekir. iyi tasarlanmamış bir equals() ve hashCode() yöntemlerini oluşturmak kesinlikle sınıfın davranışını değiştirir.
Lombok’ un Avantajları Nelerdir ?
Yazmanız ve korumanız gereken kod miktarını azaltabilir ve sınıfınızın mantığına ve işlevselliğine odaklanılabilir. Field eklerken veya değiştirirken bunları güncellemeyi unutmak, object equality contract ihlal etmek veya bellek sızıntılarına veya performans sorunlarına neden olur; equals() ve hashCode() yöntemlerini yazmaktan kaynaklanabilecek yaygın tuzaklardan ve hatalardan da kaçınılabilir. Lombok, sınıflarınız ve projeleriniz genelinde nesne eşitliği için tutarlılığı ve best practices uygulamanıza da yardımcı olabilir.
Lombok’ un Dezavantajları Nelerdir ?
Lombok kullanmanın dezavantajlarından biri, projenize bir bağımlılık ve karmaşıklık katmasıdır. IDE’nin, oluşturma araçlarının, kod analiz araçlarının ve test araçlarının Lombok ve anotasyonlarıyla uyumlu olduğundan emin olunmalıdır. Ayrıca Lombok sürümünü ve güncellemelerini takip etmeli ve bunların kod ile herhangi bir kırılma veya uyumsuzluk getirmediğinden emin olunmalıdır.
Bir başka dezavantajı, kodu gizleyebilmesi ve anlamayı zorlaştırabilmesidir. Lombok, kodu derleme zamanında oluşturduğundan, onu kaynak kodunuzda veya IDE’de görülemez. Hangi yöntemlerin üretildiğini ve nasıl davrandıklarını bilmek için belgelere ve anotasyon parametrelerine güvenmek gerekir. Sınıf yapısına ve meta verilere dayanan reflection, serialization veya diğer mekanizmaları kullanırken de dikkatli olunmalıdır.
Diğer bir başka dezavantajı, hata ayıklamayı zorlaştırmasıdır. Herhangi bir kod oluşturma ve işleme aracında olduğu gibi, her zaman mükemmel sonucu üretmez. Lombok Anotasyonlarıyla yazılmış bir kodda hata ayıklama yapmak istiyorsanız önce koda delomboking uygulanması gerekir ve sonrasında breakpoint setleyebilirsiniz.
Belki de en büyük dezavantajı, oluşturulan kodun javadoc’larda görünmemesidir. Bu, oluşturulan javadoc’larda bu genel getterları ve setterları bulunamayacağı anlamına gelir.
Ancak, her sorunun bir çözümü (veya geçici çözümü) vardır. Oluşturulan Lombok kodunu javadoc’larınıza dahil etmek isteniliyorsa, önce delomboking uygulamak ve ardından oluşturulan kaynağı javadoc eklentisi için girdi olarak kullanılması gerekir.
Lombok’ u Nasıl Efektif Kullanabiliriz ?
Lombok’u kullanmak, Java kodunuzu basitleştirmenin ve nesne eşitliği uygulamanızı geliştirmenin bir yolu olabilir. Lombok kullanırken, sadece equals() ve hashCode() metotlarında karmaşık mantık veya davranış içermeyen basit sınıflar için kullanılmalıdır. Ek olarak, Lombok yalnızca value objeleri veya data transfer objeleri olması amaçlanan sınıflar için kullanılmalı, identity veya state olan sınıflar için kullanılmamalıdır. Sınıfları diğer taraflarla paylaşırken veya yayınlarken, uyumluluk sorunlarına neden olabileceğinden bu anotasyonları kullanmaktan kaçınmalısınız. Ayrıca, bu anotasyonları sınıflarda tutarlı ve açık bir şekilde kullanmalıyız. Her zaman kullanılan Lombok anotasyonlarının belgelerini ve parametrelerini okuyun ve oluşturulan yöntemlerin davranışını ve performansını test edin ve doğrulayın.
Lombok Kullanmak için Best Caseler
- Projenizde çok sayıda POJO ve DTO varsa, bu kütüphaneyi deneyebilir ve ortaya çıkabilecek sorunları geçici olarak çözülebilir.
- Constructor ve getter ve setter oluşturma gibi temel özelliklerine bağlı kalır ve @Cleanup anotasyonu gibi süslü şeylerden uzak durulmalıdır. Bu, gelecekte ihtiyacınız olursa Lombok’tan uzaklaşmanızı kolaylaştırır.
- Geniş ölçekte kullanmadan önce her işlevi test edin ve nasıl çalıştığını bildiğinizden emin olun. Örneğin, Enums’a @ToString Anotasyonunu eklemeyi planlıyorsanız, projenizdeki diğer tüm enumlara eklemeden önce nasıl davrandığını görmek için önce küçük ölçekte test edilmelidir. Bu, işleri daha anlaşılır ve hata ayıklamayı daha kolay hale getirir.
- Okunabilirliğe odaklanılmalır. Büyük miktarlarda yinelenen koddan kaçınmak için burada burada birkaç anotasyonu kullanılması halinde, sınıfın özelliklerini özetlediği için okunabilirliğe yardımcı olur. Bununla birlikte, her şeyi nihai, senkronize, özel, statik ve diğer şeyler yapmak için beş veya daha fazla anotasyonu istiflemeye başlanması halinde, geliştirmenin amacını bozar; Basit tutulmalıdır.