3강. 캡슐화(encapsulation)
추천글 : 【Java】 Java 목차
1. 캡슐화
2. package
3. modifier
4. class와 캡슐화
a. GitHub
1. 캡슐화(encapsulation)
⑴ 기능 1. abstraction : 사용자들이 세세한 디테일까지 이해할 필요 없이 쉽게 사용할 수 있음
⑵ 기능 2. defensive programming : unautorized access로부터 세부적인 디테일을 숨긺
2. package
⑴ 개요
① 캡슐화의 한 예시
② 공동 프로젝트를 할 때 생기는 다음과 같은 문제점을 해결하기 위해 존재
○ name collision
○ big gap between public and private
○ maintenance cost
③ 둘 이상의 패키지의 결합을 java collection framework이라고 함
⑵ 문법
① package Package;
② import package.classname;
③ 한 package의 이름과 그 package에 없는 class의 이름이 같아도 무방함
④ 한 package의 이름과 그 package 내에 있는 class의 이름이 같으면 구분이 불가능해서 불가능
⑤ 임의의 class는 별도의 package 명시가 없으면 default package 안에 놓이게 됨
⑶ 예시
① java
② java.lang : String, System, Math classes (and interfaces) (imported automatically)
③ java.util : Arrays, Calendar, Date, Random, StringTokenizer classes (and interfaces)
④ java.io : classes for I/O to I/O device and other objects
⑤ java.awt : AWT packages for GUI programming
⑥ java.swing : Swing packages for GUI programming
⑦ java.javax, java.net, java.sql, etc.
3. modifier
⑴ private : class 내에서만 접근 가능함
① 만약 다른 class에서 attribute 및 method를 호출 시 "## is not visible"이라는 에러 메시지가 뜸
② subclass에서도 접근할 수 없음 : 만약 가능하다면 해킹의 소지가 많을 듯
⑵ default
① 같은 package에서만 접근 가능함
② modifier를 특정하지 않는 경우 default가 됨
③ (참고) superclass와 subclass의 package가 다른 경우 그 variable 및 method는 상속되지 않음
⑶ protected
① 당연히 그 클래스 자체에서 접근 가능함
② 같은 패키지 내에서 접근 가능함
③ 다른 패키지여도 inherited child class에서라면 접근 가능함
○ 이유 : protected member 또한 상속되기 때문
○ 그러나 다른 package 내 parent class의 instance로부터 protected member에 접근하는 것은 불가능
⑷ public : 다른 패키지의 class에서도 접근 가능함
① java는 반드시 파일명과 같은 class를 오직 하나씩 가짐
② 그리고 그 class만 public 접근 제어자가 수식할 수 있음
⑸ modifier 서열 : private < default < protected < public
4. class와 캡슐화
⑴ public class
① .java 파일 내에 public class는 기껏해야 1개가 있을 수 있음
② public class의 이름은 반드시 파일명과 같아야 함
③ 다른 package에서도 access할 수 있음
⑵ default class
① public이 없는 class로 한 class 내에서 여러 개를 만들 수 있음
② 같은 package에서만 접근할 수 있음
③ 오직 public class를 위해서만 존재하는 class들로 다른 package에게 invisible해야 함
⑶ inner class
① 한 class 내부에 정의된 다른 class
② 오직 private의 modifier만 가질 수 있음 : C++에서는 다양할 수 있음
③ 문법
class OuterClass { // An external class
private class InnerClass {
// An inner class
}
}
입력: 2020.09.23 17:21
'▶ 자연과학 > ▷ Java' 카테고리의 다른 글
【Java】 5강. 다형성(polymorphism) (0) | 2020.09.23 |
---|---|
【java】 4강. 상속(inheritance) (0) | 2020.09.23 |
【Java】 2강. 클래스 (0) | 2020.09.23 |
【Java】 1강. 자바 시작하기 (0) | 2020.09.23 |
【Java】 자바로 이진트리와 수식 계산 (0) | 2016.06.27 |
최근댓글