Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 메서드
- aop
- 99클럽
- 코딩테스트 준비
- Java
- 개발자 취업
- Spring
- CS
- 코딩
- wil
- 면접(java
- 코딩공부
- 코딩문제
- 배열
- 프로그래머스
- cs 공부)준비
- 회고
- css
- 항해99
- 이진 탐색(binary search)
- 자료구조
- github
- Entity
- GIT
- HTML
- 자바
- ArrayList
- Til
- 정렬 알고리즘(sort algorithm)
- Grafana
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240702 접근 제어자(2) 본문
공부한 내용
캡슐화
- 캡슐화(Encapsulation)는 객체 지향 프로그래밍의 중요한 개념 중 하나다.
- 캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다.
- 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.
- 캡슐화는 쉽게 이야기해서 속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것이다.
⇒ 캡슐화를 안전하게 완성할 수 있게 해주는 장치가 바로 접근 제어자이다.
캡슐화 - 접근 제어자의 사용 목적
- 캡슐화는 접근 제어자를 사용하여 ‘클래스의 멤버’에 대한 접근을 제한함으로써 구현할 수 있다.
- 이를 통해 클래스의 내부 구현 세부사항을 숨기고 있어 외부에서 직접 접근하지 못하도록함으로써 안정성과 유지 보수성을 높일 수 있다.
캡슐화 사용 예시
- Car라는 클래스에서 멤버 변수로 brand를 선언
- 해당 brand 변수는 클래스 내에만 유효한 ‘private’ 접근 제어자로 지정
- 그렇기에 외부에서 해당 변수를 접근할 수 있는 방법은 없지만 getter/setter를 통해 직접적인 변수 접근 및 변경이 아닌 메서드를 통한 접근이 가능하도록 구성을 하여 캡슐화를 구성
public class Car {
private String brand; // private 접근 제어자를 사용하여 brand 변수에 접근을 제한
public String getBrand() { // public 메소드를 통해 brand 변수에 접근
return brand;
}
public void setBrand(String brand) { // public 메소드를 통해 brand 변수를 수정
this.brand = brand;
}
}
데이터 보호
- 접근 제어자를 사용하여 ‘멤버 변수에 대한 접근을 제한’함으로써 데이터의 무결성과 안정성을 보호할 수 있다.
- 외부에서 무작위로 데이터를 수정하는 것을 방지하고, 유효한 메서드를 통해만 데이터에 접근할 수 있도록 한다.
데이터 보호 사용 예시
- BankAccount라는 클래스에서 멤버 변수로 balance를 선언
- 해당 balance 변수는 클래스 내에만 유효한 ‘private’ 접근 제어자로 지정
- 그렇기에 외부에서 해당 변수에 대해 직접적인 접근이 불가능하지만 deposit(), withdraw() 메서드를 통해서 변수를 조작하여 반환하여 데이터 값을 반환하도록 구성
public class BankAccount {
private double balance; // private 접근 제어자를 사용하여 balance 변수에 접근을 제한
public double getBalance() { // public 메소드를 통해 balance 변수에 접근
return balance;
}
public void deposit(double amount) { // public 메소드를 통해 balance 변수를 수정
balance += amount;
}
public void withdraw(double amount) { // public 메소드를 통해 balance 변수를 수정
if (amount <= balance) {
balance -= amount;
} else {
System.out.println("Insufficient funds");
}
}
}
코드 재사용
- 접근 제어자를 사용하여 상속 관계에서 부모 클래스의 메서드와 변수를 하위 클래스에서 재사용할 수 있다.
- 이를 통해 코드의 중복을 피하고, 효율적인 개발을 할 수 있다.
코드 재사용 사용 예시
- Animal이라는 클래스와 Dog라는 클래스가 있으며 Dog 클래스는 Animal로부터 상속을 받은 관계
- Animal 클래스에서는 protected 접근 제어자를 두고 멤버 변수를 선언하였기에, Dog 클래스에서는 Animal 클래스의 멤버 변수에 대한 접근이 가능
- 또한 상속관계이기에 Dog 클래스의 인스턴스를 생성 후 eat() 메서드 접근 역시 가능
public class Animal {
protected String name; // protected 접근 제어자를 사용하여 name 변수에 접근
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println(name + " is barking");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Buddy");
dog.eat(); // 상위 클래스인 Animal의 eat 메소드 재사용
dog.bark(); // 하위 클래스인 Dog의 bark 메소드 사용
}
}
회고
- 코드를 짤때 무심코 사용하는 접근 제어자에 대해 대충은 알고 있었지만, 제대로 알지 못했다.
- 접근 제어자의 용도와 종류 등에 대해 공부하여 정리해보는 시간이었다.
참고 자료
'기술 > java' 카테고리의 다른 글
[TIL]240705 static (0) | 2024.07.05 |
---|---|
[TIL]240704 자바 메모리 구조 (0) | 2024.07.04 |
[TIL]240701 접근 제어자(1) (0) | 2024.07.01 |
[TIL]240630 패키지(package)(2) (0) | 2024.06.30 |
[TIL]240629 패키지(package)(1) (0) | 2024.06.29 |