🙋♀️ 객체 지향 프로그래밍 장단점
1. 장점
• 코드 재사용 용이
- 상속을 통해 코드의 재사용을 높일 수 있음
• 유지보수 쉬움
- 캡슐화를 통해 유지보수가 쉬움
- 절차지향프로그래밍에서는 코드를 수정할 때 일일이 찾아 수정해야 함
- 반면, 객체지향프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 있기 때문에
해당 부분만 수정하면 됨
• 대형 프로젝트에 적합
- 클래스 단위로 모듈화 개발로 업무 분담이 쉬움
2. 단점
• 처리속도가 상대적으로 느림
• 객체가 많으면 용량이 커질 수 있음
• 설계시 많은 시간과 노력 필요
1. 접근 제어 지시자
• private
- 같은 클래스 내부에서만 접근 가능
- 외부 클래스, 상속관계의 클래스에서도 접근 불가
• protected
- 같은 패키지나 상속관계의 클래스에서 접근 가능
- 그 외 외부에서는 접근 불가
• public
- 클래스의 외부 어디서나 접근 가능
• 아무것도 없음 (default)
- 같은 패키지 내부에서만 접근 가능
- 상속관계라도 패키지가 다르면 접근 불가
2. 접근 제어 지시자 private
🙋♀️ 캡슐화란?
데이터와 코드의 형태를 외부로부터 알 수 없게 하고,
데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법 (정보 은닉)
객체지향프로그래밍에서 캡슐화를 통해 유지보수가 용이하다는 장점이 있다.
여기서, 바로 private 접근 제어자를 이용한다.
(클래스를 정의하는데 이 클래스의 멤버 변수를 외부에서 접근하지 못하게 하기 위해 사용)
🙋♀️ 캡슐화 방법
1. 멤버 변수 앞에 접근 제어자 private을 사용한다.
2. 멤버 변수 앞에 값을 넣고 꺼내올 수 있는 메서드를 만든다. (get, set 메서드 이용)
- 접근 제어자 private 사용 예시
• private 사용 시 외부 클래스에서 접근할 때 발생하는 오류
public class Access {
private int num;
}
public class AccessTest {
public static void main(String[] args) {
Access A = new Access();
A.num = 20;
System.out.println(A.num); // error 발생
}
}
❌ 'num' has private access in 'study.Access’
• private은 같은 클래스 내부에서만 접근이 가능하기 때문에,
외부 클래스에서 멤버 변수를 접근할 때 당연히 위와 같은 오류 발생
• 따라서, 외부 클래스에서 접근을 막은 값을 제어해야 되거나 그 값을 봐야 하는 경우에는 get() / set() 메서드를 이용해야 한다.
3. GET/SET 메서드를 사용해야 하는 이유
get, set 메서드를 사용하는 이유는 외부로부터 변수 값에 직접적으로 접근하는 것을 막기 위해서 사용한다.
• 외부에서 변수 값을 직접 접근하게 되면 값이 변하게 되는데 그렇게 되면, 무결성이 깨질 수 있다.
자바에서는 함수를 통해 값을 전달 받고, 전달하는 방식을 권장하고 있다.
또한, 클래스 내에 멤버 변수는 private (캡슐화, 정보은닉)으로 선언해 외부에서 바라볼 수 없도록 해야 한다.
4. GET/SET 메서드의 차이점은?
• get
- 사용자가 메서드를 호출 시 삽입된 데이터 값을 return 반환해 주는 역할 담당
- read-only
- 변수값을 반환하는 목적이기 때문에 return 필요
• set
- 사용자가 메서드를 호출 시 데이터를 삽입해 주는 역할 담당
- 변수값을 할당하는 목적의 함수이기 때문에 인자를 받아야 함