Java

[Java] Getter와 Setter에 대해

K.Seungmin 2024. 10. 2. 21:08

오늘은 자바공부를 하면서 주의해야할 점 중에 Getter와 Setter에 관한 내용이 있어서 관련 사항들에 대해 알아보도록 하겠습니다.

 

Getter와 Setter란?

Getter와 Setter는 클래스의 멤버 변수에 대해 접근 및 수정 기능을 제공하는 메서드입니다. 자바에서 멤버 변수는 일반적으로 캡슐화의 원칙을 따르기 위해 private로 선언되며, 외부에서 직접 접근하지 못하게 보호됩니다. 그러나 클래스 내부에서 정의한 Getter와 Setter 메서드를 사용하면 멤버 변수에 접근하거나 값을 변경할 수 있습니다. 이를 통해 데이터의 무결성을 유지하거나 객체의 내부 상태를 제어할 수 있습니다.

 

Getter와 Setter 정의 방법

  • Getter 메서드: 멤버 변수의 값을 반환하는 역할을 합니다.
    • 일반적으로 get이라는 접두사 뒤에 변수명을 붙여서 정의합니다.
    • 반환 타입은 멤버 변수의 타입과 동일하며, 파라미터가 없습니다.
  • Setter 메서드: 멤버 변수의 값을 설정하는 역할을 합니다.
    • 일반적으로 set이라는 접두사 뒤에 변수명을 붙여서 정의합니다.
    • 반환 값이 없으며, 새로운 값을 전달하기 위한 매개변수를 가집니다.

예시 코드)

public class Member {
	private String name;
    
    // Getter 예시
    public String getName(){
    	return name;
    }
    
    // Setter 예시
    public void setName(String name){
    	this.name = name;
    }
}

 

Getter와 Setter의 장점

  1. 캡슐화 유지 : 멤버 변수를 private로 감추고 Getter와 Setter를 통해서만 접근 가능하게함으로 캡슐화를 유지합니다.
  2. 유효성 검사 : Setter에서 값을 설정하기 전 유효성 검사를 진행할 수 있습니다.
  3. 데이터 보호 : 외부에서 멤버 변수에 직접적인 접근을 막을 수 있스니다.
  4. 유연성 : 클래스 내부 구현이 바뀌어도 Getter와 Setter를 통해서 접근하기 때문에 코드변경이 용이합니다.

 

Getter와 Setter의 문제점

1.  캡슐화의 침해

객체지향 프로그래밍의 캡슐화 원칙은 객체의 내부 상태를 숨기고, 필요한 경우에만 안전한 방법으로 접근해 사용하는 것 입니다. 그러나 Getter와 Setter는 객체의 내부 상태를 직접적인 접근을 가능하게 함으로 캡슐화의 본래 의미를 약화 시킬 수 있습니다.

2.  설계상의 문제

무분별한 Getter와 Setter는 객체의 책임을 불명확하게 만들 수 있습니다. Getter와 Setter로 외부에서 상태를 직접 변경하게 되면 객체의 자기 완결성이 깨지게 됩니다. 그리고 Getter와 Setter는 데이터 중심의 설계를 유도하기 때문에 객체의 행위를 중심으로 하는 객체 지향적 설계를 방해할 수 있습니다.

3.  객체 간 결합도 증가

Getter와 Setter는 객체의 내부 상태를 외부에 직접 노출함으로써 객체들 간의 결합도를 높일 수 잇습니다. Getter를 통해 객체 내부 구조가 노출되면, 다른 객체들이 이 구조에 의존하게 되어 결합도가 높아질 수 있습니다. 결합도가 높아지면 시스템이 복잡해지고 유지보수가 어려워집니다. 

4.  불변성 훼손

객체를 불변 객체로 만들면 여러 장점이 있지만, Setter를 사용하면 객체의 내부 상태를 쉽게 변경할 수 있기 때문에 불변성을 유지하기 어렵습니다.

 

Getter와 Setter의 적절한 사용

1. 데이터 객체(POJO) : 데이터를 단순히 전달하기 위한 목적의 클래스, DTO(Data Transfer Object)나 POJO(Plain Old Java Object)에서는 Getter와 Setter가 필요할 수 있습니다. 예로 데이터 베이스와의 매핑 클래스에서 사용되는 객체는 데이터의 읽기와 쓰기를 위해 Getter와 Setter를 제공합니다.

2. 읽기 전용 속성 : 특정 속성의 값을 외부에서 조회할 필요가 있지만, 변경은 허용하고 싶지 않을 때 Getter만 제공하고 Setter는 제공하지 않음으로 데이터를 보호할 수 있습니다.

 

결론

오늘은 Getter와 Setter에 대해서 알아보았습니다. 단순히 데이터를 조회하고 수정하는 기능이 아니라 그 기능으로 인해 객체지향 프로그래밍에 영향이 미칠 수 있다는 점에 대해 생각해보게 되었습니다. 단순히 Getter와 Setter를 지양하라는 이야기만을 들었었는데 그 이유와 자세한 개념에 대해 알아보게 된 시간이었습니다.

'Java' 카테고리의 다른 글

[Java] Lombok 이란?  (0) 2024.10.16
[Java] Java의 어노테이션(Annotation)에 대해  (0) 2024.10.10
[Java] 다양한 입력 처리  (0) 2024.10.06
[Java] Gradle과 Maven 비교  (1) 2024.09.21
[Java] Spring과 Spring boot  (2) 2024.09.18