● 오늘의 ISSUE
Java 접근 제어자와 오버라이드 개념을 이해해보자.
1. 접근 제어자
정의
접근 제어자는 클래스, 변수, 메서드 선언부에 사용되며, 외부에서 해당 요소에 접근할 수 있는 범위를 제한하는 역할을 합니다.
종류
- 클래스 접근 제어자 :
public
,default
- 메서드 및 멤버 변수 :
public
,protected
,default
,private
Getter와 Setter
변수의 값을 직접적으로 조회하거나 변경하는 것을 방지하기 위해, 보통 Getter와 Setter 메서드를 사용합니다. 이를 통해 내부적인 값에 대한 제어는 가능하면서도 외부에서 직접적인 수정은 제한됩니다.
각 접근 제어자별 특징
1. private
- 해당 클래스 내부에서만 접근 가능
- 주로 클래스의 내부적인 동작이나 논리(Logical flow)를 감추기 위해 사용 (캡슐화)
public class Sample {
private String secret;
private String getSecret() {
return this.secret;
}
}
2. default
- 접근 제어자를 설정하지 않았을 때 자동으로 적용되며, 동일한 패키지 내에서만 접근 가능
package test;
public class TestSin {
String lastname = "sin"; // default 접근 제어자
}
3. protected
- 동일 패키지 내의 클래스 또는 해당 클래스를 상속받은 클래스에서만 접근 가능
package test2;
public class TestSin {
protected String lastname = "nem";
}
4. public
- 어떤 클래스에서든 접근 가능하며, 범위가 가장 넓은 접근 제어자
package test;
public class TestKim {
protected String lastname = "Kim";
public String info = "this is public message.";
}
알게된 점
접근 제어자는 객체지향 프로그래밍의 중요한 요소 중 하나이며 특히 캡슐화를 통해 데이터를 보호하고, 외부에서 클래스 내부의 동작을 제어하지 못하게 하는 것은 유지보수성과 안정성을 높이는 데 큰 역할을 합니다. 실제로 private
로 설정해두지 않으면 의도치 않게 데이터가 수정되어 예기치 못한 결과를 초래할 수 있다고 생각하고, 처음에는 모든 것을 public
으로 열어두는 것이 편하게 느껴졌지만, 이후의 수정이나 확장에서는 접근 제어자가 중요하다고 생각했습니다.
2. 오버라이드 (@Override)
정의
오버라이드는 부모 클래스나 인터페이스에서 정의된 메서드를 하위 클래스에서 재정의하여 사용하는 것을 의미합니다. extends(상속)나 implements(인터페이스 구현)를 통해 상속받은 메서드를 하위 클래스의 특성에 맞게 변형할 수 있습니다.
특징
- 부모 클래스의 메서드가 자식 클래스에서 더 구체적으로 재정의될 수 있음
- super 키워드를 통해 부모 클래스의 메서드를 호출 가능
class SuperClass {
int a;
public void test() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
@Override
public void test() {
System.out.println("SubClass");
}
}
알게된 점
오버라이드 개념을 처음 접했을 때는 부모 클래스의 메서드를 굳이 재정의해야 할 필요가 있을까 싶었지만, 다양한 상황에서 이 개념이 얼마나 강력한지 깨달음. 예를 들어 상위 클래스의 기본 동작을 유지하면서도 하위 클래스에서 특화된 기능을 추가할 수 있어 매우 유연한 설계를 가능하게 하고. 또한, 인터페이스에서 구현해야 하는 메서드를 재정의하는 과정은 객체 지향 설계의 큰 기초라는 점.
3. TIP & 생각 정리
TIP
- 오버라이드를 통해 부모 클래스의 동작을 수정하거나 확장할 수 있으며, 자식 클래스에서 새로운 기능을 추가하는 데 매우 유용합니다.
- 접근 제어자의 허용 범위는
private
<default
<protected
<public
순으로 넓어지며, 이를 잘 활용하면 코드의 안전성과 가독성을 높일 수 있습니다. - 접근 제어자를 적절히 사용하면 프로그래머의 실수를 방지하고, 불필요한 위험을 줄일 수 있습니다.
정리
접근 제어자와 오버라이드는 서로 연관되어 객체 지향 프로그래밍에서 중요한 역할을 합니다. 잘못된 접근 제어자를 사용하면 의도치 않은 값 변경이나 보안 취약점이 발생할 수 있기 때문에, 처음부터 잘 설계하는 것이 중요하다고 생각합니다. 또한, 오버라이드 역시 상속관계를 고려한 설계가 필수로 보이고, 디자인 패턴이나 객체 지향 원칙을 따르면서도 유연하게 코드를 확장할 수 있는 역량이 중요하다고 생각합니다.
'JAVA' 카테고리의 다른 글
(JAVA) 다중상속과 인터페이스 알아보기 (0) | 2024.09.20 |
---|---|
(JAVA) 추상클래스의 개념 + instanceof 이해하기 (0) | 2024.09.20 |
(JAVA) 기본형 & 참조형 매개변수, 인스턴스 멤버와 클래스 멤버 (0) | 2024.09.20 |
(JAVA) 예외처리 자세히 알아보기 2 (0) | 2024.09.19 |
(JAVA) 객체지향 이해하기 (0) | 2024.09.19 |