[Java] Tại sao cần getter và setter ?

Cập nhật ngày: 29/03/2024 - Đã có 1669 lượt xem bài viết này!
[Java] Tại sao cần getter và setter ?
Khi mới trở thành một lập trình viên Java, tác giả luôn trăn trở về setter và getter với câu hỏi duy nhất: "Tại sao cần viết getter và setter?". Anh ta xem nó như một quy tắc "thừa"...

[Java] Tại sao cần getter và setter ?


Khi mới trở thành một lập trình viên Java, tác giả luôn trăn trở về setter và getter với câu hỏi duy nhất: "Tại sao cần viết getter và setter?". Anh ta xem nó như một quy tắc "thừa".

Ai cũng biết java có 3 từ khóa phục vụ access modifier là public, protected và private. Mỗi từ khóa sẽ khoanh vùng các phạm vị truy cập cho các field được đính kèm với nó. Cụ thể như bảng sau:

Nếu ta để modifier cho các field là private rồi viết public setter và getter thì các component nằm ở ngoài package chứa class đó vẫn có thể lấy hoặc thay đổi giá trị của field.
 

public String name = "TechmasterVN";

// caller:

String name = X.name;   //(X is a object instance);

X.name = "TechmasterUS";
private String name = "Techmaster";

public String getName() {

    return name;

}

public void setName(String name) {

    this.name = name;

}

// caller:

String name = X.getname();


Ta thấy một đoạn code thì để field dưới dạng public, các component bên ngoài có thể tự do truy cập và thay đổi gía trị. Đoạn code còn lại sử dụng modifier là private và các component bên ngoài truy cập tới field thông qua getter, setter.

Sự khác biệt lớn nhất của 2 cách này chỉ xoay quanh kiểm soát quyền truy cập tới field của class.

Nếu ta cho field đó là public thì đối tượng gọi hoặc sử dụng field đó (gọi tắt là caller) sẽ có quyền tiến hành các thao tác trực tiếp với field này (kể cả gán cho nó giá trị null!!!!). Có lập trình viên nào muốn điều này xảy ra không? Chắc chắn là không rồi.

Nếu ta sử dụng getter và setter, caller sẽ không thể toàn quyền tác động lên field thuộc class. Lúc này, nếu muốn truy cập field thuộc class, ta chỉ có 1 lối vào duy nhất là setter và 1 lối ra duy nhất là getter. Nhờ đó, lập trình viên dễ dàng viết validation check trước khi set giá trị cho field hoặc return lại bản clone của field.

Khi mạch điện bị quá tải, atomat sẽ tự ngắt, đảm bảo an toàn cho đường dây và các thiết bị trong mạch. Ta có thể liên tưởng vai trò của atomat trong mạch điện khá giống với getter - setter trong lập trình hướng đối tượng.

 

Đôi khi trong getter và setter chúng ta không code thêm gì cả, chỉ có 1 dòng return hoặc set giá trị field. Như vậy chả khác gì để public field và làm code dài thêm?

Chắc chắc là có khác, khi viết getter và setter, chúng ta đã chuẩn bị một nền tảng cơ bản phục vụ việc bảo trì code sau này (thêm các validation, return clone của field,....). Khi đánh giá một class có được code "tốt" hay không, số lượng các dòng code chỉ là yếu tố đóng vai trò rất nhỏ. Rõ ràng khi phải lựa chọn giữa 2 việc: code làm sao cho dễ bảo trì và code làm sao để tốn ít dòng nhất. Tôi sẽ chọn cái đầu tiên.

 

Bạn đang muốn tìm kiếm 1 công việc với mức thu nhập cao.
✅ Hoặc là bạn đang muốn chuyển đổi công việc mà chưa biết theo học ngành nghề gì cho tốt.
✅ Giới thiệu với bạn Chương trình đào tạo nhân sự dài hạn trong 12 tháng với những điều đặc biệt mà chỉ có tại IMIC và đây cũng chính là sự lựa chọn phù hợp nhất dành cho bạn:
👉 Thứ nhất: Học viên được đào tạo bài bản kỹ năng, kiến thức chuyên môn lý thuyết, thực hành, thực chiến nhiều dự án và chia sẻ những kinh nghiệm thực tế từ Chuyên gia có nhiều năm kinh nghiệm dự án cũng như tâm huyết truyền nghề.
👉 Thứ hai: Được ký hợp đồng cam kết chất lượng đào tạo cũng như mức lương sau tốt nghiệp và đi làm tại các đối tác tuyển dụng của IMIC. Trả lại học phí nếu không đúng những gì đã ký kết.
👉 Thứ ba: Cam kết hỗ trợ giới thiệu công việc sang đối tác tuyển dụng trong vòng 10 năm liên tục.
👉 Thứ tư: Được hỗ trợ tài chính với mức lãi suất 0 đồng qua ngân hàng VIB Bank.
👉  Có 4 Chương trình đào tạo nhân sự dài hạn dành cho bạn lựa chọn theo học. Gồm có:
1)  Data Scientist full-stack
2)  Embedded System & IoT development full-stack
3)  Game development full-stack
4)  Web development full-stack 
✅ Cảm ơn bạn đã dành thời gian lắng nghe những chia sẻ của mình. Và tuyệt vời hơn nữa nếu IMIC được góp phần vào sự thành công của bạn. 
✅ Hãy liên hệ ngay với Phòng tư vấn tuyển sinh để được hỗ trợ về thủ tục nhập học.
✅ Chúc bạn luôn có nhiều sức khỏe và thành công!
 

Tham khảo các khóa đào tạo nhân sự qua danh mục