학습 키워드
- 캡슐화
- 패키지의 개념
- import문
- 접근제어자
- getter/setter 메서드
캡슐화
>의미
: 객체의 데이터(멤버)를 외부로부터 보호하는 것
>목적
- 데이터 보호
- 불필요한 외부 노출 방지
> 특징 및 장점
: 정보 은닉 및 정보 보호
: 오류 최소화
패키지
>의미
: 특정한 목적을 공유하는 클래스와 인터페이스의 묶음
: 물리적으로는 하나의 디렉토리를 의미
: 해당 디렉토리에 클래스 파일과 인테페이스 파일이 속해있음
//인터페이스는 추상화 부분 참고
>특징 및 장점
: 소스파일에 패키지를 선언하지 않으면 자동으로 unnamed package가 생긴다.
: 패키지를 지정하지 않은 모든 클래스는 같은 패키지(unnamed)에 속한다.
: unnamed package는 다른 패키지에서 import할 수 없다.
: 디렉토리의 계층 구조(경로)는 점( . )으로 구분한다.
: 클래스의 충돌을 방지한다. (다른 패키지면 같은 클래스 명이어도 충돌하지 않음)
>선언
: 한 소스 파일에 단 한 번 가능
: 맨 첫 문장에 패키지 선언을 한다.
>import문
: 다른 패키지를 사용할 때 편의를 주는 구문
: 해당 경로의 패키지의 클래스를 사용할 때, 클래스 명 앞에 패키지 경로를 자동으로 붙여줌.
: 실행 시간에는 영향이 없고, 컴파일 시간에 영향을 줌.
>코드 예시1; import 미사용
package exampack1;
//예시1. import를 사용하지 않았을 경우, 완전 불편
public class Main_Ex1 {
public void pack1T(){
System.out.println("테스트1");
}
}
package exampack2;
//패키지 경로를 포함한 클래스 참조형과 생성자를 매번 작성해야함.
public class Main_Ex2 {
public static void main(String[] args) {
exampack1.Main printTest1 = new exampack1.Main();
printTest1.pack1T();
/*
테스트1
*/
}
}
>코드 예시2; import 사용
package exampack1;
//예시2. 예시1의 exampack1 과 변한게 없음.
public class Main_Ex1 {
public void pack1T(){
System.out.println("테스트1");
}
}
package exampack2;
import exampack1.Main_Ex1;
//import를 통해 모든 경로를 쓰지 않음.
//import exampack1.*; 도 가능함.
//*을 사용할 경우, 해당 패키지의 모든 클래스를 사용할 수 있음.
public class Main_Ex2 {
public static void main(String[] args) {
Main_Ex1 printTest1 = new Main_Ex1();
printTest1.pack1T();
/*
테스트1
*/
}
}
접근 제어자
>의미
: 제어자 중 접근성에 관련된 정보를 제공하는 제어자
>제어자
: 부가적인 의미를 부여하는 키워드
>제어자 구분
- 접근 제어자
: 접근 제어자는 딱 하나만 사용 가능
: public, protected, default, private
//default는 아무 제어자가 없는 경우를 의미
- 기타 제어자
: 여러 기타 제어자를 동시에 사용 가능
: static, final, abstract
>접근 제어자의 제한 범위
- public : 접근 제한 없음
- protected : 동일 패키지와 상속 관계의 하위 클래스에서 접근 가능하다.
- default : 동일 패키지 내에서만 가능
- private : 같은 클래스 내에서만 가능
getter와 setter 메서드
>의미
: 정해진 메서드가 아닌 개발자가 캡슐화를 위해 설정하는 메서드
>사용
: 클래스 내부 필드가 private으로 설정되어 있는 경우에 사용
: getter 메서드와 setter 메서드의 접근 제어자는 해당 메서드를 사용할 수 있는 접근 제어자로 설정해야한다.
>setter 메서드
: setter 메서드로 private으로 설정된 인스턴스 변수의 값을 수정할 수 있음.
//생성자와 비슷하지만, 생성자는 매번 새로운 인스턴스를 만들어야함.
>getter 메서드
: getter 메서드로 private으로 설정된 인스턴스 변수의 값을 반환할 수 있음.
>메서드명 관례
- get+필드명
- set+필드명
>코드 예시
public class Main {
public static void main(String[] args) {
Bread br1 = new Bread("붕어빵", "슈크림");
Bread br2 = new Bread("피자빵", "소세지");
/*
빵 생성
빵 생성
*/
System.out.print(br1.getStuff());
System.out.println(br1.getType());
System.out.print(br2.getStuff());
System.out.println(br2.getType());
/*
슈크림붕어빵
소세지피자빵
*/
br1.setStuff("팥");
br2.setStuff("치즈");
System.out.print(br1.getStuff());
System.out.println(br1.getType());
System.out.print(br2.getStuff());
System.out.println(br2.getType());
/*
팥붕어빵
치즈피자빵
*/
}
}
class Bread{
private String type; // 빵 종류 저장 변수
private String stuff; // 재료 종류 저장 변수
//빵 생성자(빵 종류, 재료 종류 초기화
Bread(String type, String stuff){
this.type = type;
this.stuff = stuff;
System.out.println("빵 생성");
}
//빵 종류 setter
public void setType(String type){
this.type = type;
}
//재료 종류 setter
public void setStuff(String stuff){
this.stuff = stuff;
}
//빵 종류 getter
public String getType(){
return type;
}
//재료 종류 getter
public String getStuff(){
return stuff;
}
}
'코드스테이츠_국비교육 > [Section1]' 카테고리의 다른 글
14_객체지향 프로그래밍 심화(추상화)_22.09.07 (0) | 2022.09.07 |
---|---|
14_객체지향 프로그래밍 심화(다형성)_22.09.07 (2) | 2022.09.06 |
13_객체지향 프로그래밍 심화(상속)_22.09.06 (2) | 2022.09.06 |
12_객체지향 프로그래밍 기초2(이너 클래스)_22.09.05 (0) | 2022.09.05 |
12_객체지향 프로그래밍 기초2(생성자)_22.09.05 (0) | 2022.09.04 |