본문 바로가기

Contact English

【Java】 3강. 캡슐화

 

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 서열 : privatedefaultprotectedpublic 

 

 

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