패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
객체지향 프로그래밍.
최윤정 Java 프로그래밍 클래스 상속 최윤정
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
Java Seminar Chapter3.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
직렬화와 역직렬화에 대하여 직렬화 가능 클래스의 선언 방법
명품 JAVA Programming.
3. 자바에서 지원하는 패키지 자바에서 기본적으로 제공하는 패키지.
10장 객체-지향 프로그래밍 II.
어서와 Java는 처음이지! 제7장 상속.
제 5 장 상속과 다형성.
명품 JAVA Essential.
어서와 Java는 처음이지! 제6장 클래스, 메소드 심층연구.
자바 5.0 프로그래밍.
Chapter 4. 클래스와 객체 PS Lab. 이지연.
Lesson 5. 레퍼런스 데이터형.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Essential.
Lesson 9. 예외처리.
Lesson 6. 형변환.
명품 Java Programming.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
12 ███████████ 12.
어서와 Java는 처음이지! 제7장 상속.
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
상속과 인터페이스 클래스의 상속에 대하여 인터페이스에 대하여.
자바 5.0 프로그래밍.
Choi, Namseok Java 기초 (객체와 클래스) Choi, Namseok
[INA470] Java Programming Youn-Hee Han
[INA470] Java Programming Youn-Hee Han
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
내부 클래스와 내부 인터페이스에 대하여 내부 클래스의 선언 방법과 이용 방법 내부 인터페이스의 선언 방법과 이용 방법
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
JA A V W. 06.
[ 단원 06 ] 상속과 다형성.
12. 상속 : 고급.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
6장 클래스(상속).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
7 생성자 함수.
3장 자바의 기본문법(2).
Presentation transcript:

패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여

패키지와 접근 제어 01. 패키지 패키지란? • 패키지(package) : 클래스와 인터페이스를 묶는 단위

패키지와 접근 제어 01. 패키지 패키지 이름 정하기 • 자바 식별자를 가지고 만들어야 함 [올바른 예] [잘못된 예]

01. 패키지 패키지와 접근 제어 패키지 이름을 정하는 방법 • 계층적인 패키지 이름 [예] • 인터넷 도메인 이름을 활용한 계층적인 패키지 이름

01. 패키지 패키지와 접근 제어 패키지 선언문 • 패키지를 만드는 방법 • 패키지 선언문의 문법 - 패키지는 프로그래머가 직접 만드는 것이 아니라; - 클래스나 인터페이스에 패키지 선언문을 쓰면 자바 컴파일러가 만들어 줌 • 패키지 선언문의 문법 - package라는 키워드를 가지고 선언할 수 있음

01. 패키지 패키지와 접근 제어 패키지 선언문 [예제 8-1] 패키지 선언문을 포함하는 클래스 1 2 3 4 5 6 7 8 9 10 package geometry; class Circle { int radius; Circle(int radius) { this.radius = radius; } double getArea() { return radius * radius * 3.14; 패키지 선언문 컴파일이 끝나면 패키지 이름과 똑같은 이름의 디렉토리가 생기고 그 디렉토리에 컴파일의 결과가 생깁니다.

패키지와 접근 제어 01. 패키지 패키지 선언문 • 인터페이스에 패키지를 선언하는 방법 - 클래스의 경우와 동일

01. 패키지 패키지와 접근 제어 계층적인 이름을 갖는 패키지 [예제 8-2] 계층적인 이름의 패키지 선언문을 포함하는 클래스 3 4 5 6 7 8 9 10 11 package geometry.polygon; class Rectangle { int width, height; Rectangle(int width, int height) { this.width = width; this.height = height; } int getArea() { return width * height; 패키지 선언문 컴파일이 끝나면 패키지 이름과 똑같은 계층 구조의 디렉토리가 생기고 계층 구조의 제일 아래쪽 디렉토리에 컴파일의 결과가 생깁니다.

01. 패키지 패키지와 접근 제어 같은 패키지에 속하는 클래스의 사용 [예제 8-3] 같은 패키지의 클래스를 사용하는 프로그램 2 3 4 5 6 7 8 package geometry; class PackageExample1 { public static void main(String args[]) { Circle obj = new Circle(5); System.out.println("반지름 = " + obj.radius); System.out.println("면적 = " + obj.getArea()); } 패키지가 있는 디렉토리에서 프로그램을 실행해야 합니다. 패키지 이름 클래스 이름

01. 패키지 패키지와 접근 제어 다른 패키지에 속하는 클래스의 사용 [예제 8-4] 다른 패키지의 클래스를 사용하는 프로그램 – 잘못된 예 1 2 3 4 5 6 7 8 9 package math; class PackageExample2 { public static void main(String args[]) { Rectangle obj = new Rectangle(2, 3); System.out.println("넓이 = " + obj.width); System.out.println("높이 = " + obj.height); System.out.println("면적 = " + obj.getArea()); }

패키지와 접근 제어 01. 패키지 다른 패키지에 속하는 클래스의 사용 • 다른 패키지에서 사용할 클래스의 선언 방법

01. 패키지 패키지와 접근 제어 다른 패키지에 속하는 클래스의 사용 [예제 8-5] 다른 패키지에서 사용할 수 있도록 공개된 Rectangle 클래스 1 2 3 4 5 6 7 8 9 10 11 package geometry.polygon; public class Rectangle { public int width, height; public Rectangle(int width, int height) { this.width = width; this.height = height; } public int getArea() { return width * height;

01. 패키지 패키지와 접근 제어 다른 패키지에 속하는 클래스의 사용 [예제 8-6] 다른 패키지의 클래스를 사용하는 프로그램 – 올바른 예 1 2 3 4 5 6 7 8 9 package math; class PackageExample3 { public static void main(String args[]) { geometry.polygon.Rectangle obj = new geometry.polygon.Rectangle(2, 3); System.out.println("넓이 = " + obj.width); System.out.println("높이 = " + obj.height); System.out.println("면적 = " + obj.getArea()); }

01. 패키지 패키지와 접근 제어 import 선언문 • import 선언문 • import 선언문의 작성 방법 다른 패키지에 속하는 클래스나 인터페이스를 패키지 이름 없이 사용할 수 있도록 만드는 명령문 • import 선언문의 작성 방법

01. 패키지 패키지와 접근 제어 import 선언문 [예제 8-7] import 선언문의 사용 예 1 2 3 4 5 6 7 9 10 package math; import geometry.polygon.Rectangle; // import 선언문 class PackageExample4 { public static void main(String args[]) { Rectangle obj = new Rectangle(2, 3); System.out.println("넓이 = " + obj.width); System.out.println("높이 = " + obj.height); System.out.println("면적 = " + obj.getArea()); } 패키지 이름 없이 클래스 이름만 가지고 사용합니다. [예제 8-5]

01. 패키지 패키지와 접근 제어 import 선언문 [예제 8-8] 여러 개의 import 선언문을 포함하는 클래스의 예 원 클래스 원 클래스와 직사각형 클래스를 사용하는 프로그램 package geometry; public class Circle { public int radius; public Circle(int radius) { this.radius = radius; } public double getArea() { return radius * radius * 3.14; package math; import geometry.Circle; import geometry.polygon.Rectangle; class PackageExample5 { public static void main(String args[]) { Circle obj1 = new Circle(5); Rectangle obj2 = new Rectangle(8, 9); if (obj1.getArea() > obj2.getArea()) System.out.println("원의 면적이 더 넓습니다."); else System.out.println("원의 면적은 직사각형의 면적보다 작거나 같습니다."); } 두 개의 import 선언문 직사각형 클래스 package geometry.polygon; public class Rectangle { public int width, height; public Rectangle(int width, int height) { this.width = width; this.height = height; } public int getArea() { return width * height;

패키지와 접근 제어 01. 패키지 import 선언문 • 특수문자 *를 사용한 import 선언문

01. 패키지 패키지와 접근 제어 import 선언문 [예제 8-9] 특수문자 *를 이용한 import 선언문의 예 정사각형 클래스 정사각형 클래스와 직사각형 클래스를 사용하는 프로그램 package geometry.polygon; public class Square { public int sideLength; public Square(int sideLength) { this. sideLength = sideLength; } public double getArea() { return sideLength * sideLength; package math; import geometry.polygon.*; class PackageExample6 { public static void main(String args[]) { Square obj1 = new Square(7); Rectangle obj2 = new Rectangle(5, 10); if (obj1.getArea() > obj2.getArea()) System.out.println(“정사각형의 면적이 더 넓습니다."); else System.out.println( "정사각형의 면적은 직사각형의 면적보다 작거나 같습니다."); } geometry.polygon 패키지의 모든 클래스와 인터페이스를 import 직사각형 클래스 package geometry.polygon; public class Rectangle { public int width, height; public Rectangle(int width, int height) { this.width = width; this.height = height; } public int getArea() { return width * height;

02. 접근 제어 패키지와 접근 제어 접근 제어 수식어란? • 접근 제어 수식어(access control modifier) - 클래스, 인터페이스와 구성요소들의 접근 방근을 제어하는 자바 키워드 - public, protected, private이 있음 • 접근 제어 수식어에 의해 정해지는 클래스 구성 요소의 접근 가능 범위 클래스의 구성요소에만 사용 가능

02. 접근 제어 패키지와 접근 제어 private 키워드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Fraction { private int numerator; // 분자 private int denominator; // 분모 Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } private double getDouble() { return (double) numerator / denominator; int getInt() { return (int) getDouble();

02. 접근 제어 패키지와 접근 제어 private 키워드 1 2 3 4 5 6 class AccessControlExample1 { public static void main(String args[]) { Fraction obj = new Fraction(100, 3); System.out.println("100/3 = " + obj.getDouble()); } 잘못된 호출

02. 접근 제어 패키지와 접근 제어 private 키워드 [예제 8-12] private 생성자를 포함하는 클래스의 예 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class PersonalInfo { String name; int age; char gender; // 남, 여 String bloodType; // A, B, AB, O private PersonalInfo(String name, int age) { this.name = name; this.age = age; } PersonalInfo(String name, int age, char gender) { this(name, age); this.gender = gender; PersonalInfo(String name, int age, char gender, String bloodType) { this.bloodType = bloodType; 호출 호출

02. 접근 제어 패키지와 접근 제어 protected 키워드 1 2 3 4 5 6 7 8 9 10 11 12 13 package geometry.common; public class Polygon { protected int x[]; // 꼭지점의 X 좌표 protected int y[]; // 꼭지점의 Y 좌표 protected Polygon(int vertexNum) { x = new int[vertexNum]; y = new int[vertexNum]; } protected void setPoint(int index, int x, int y) { this.x[index] = x; this.y[index] = y;

02. 접근 제어 패키지와 접근 제어 protected 키워드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package geometry.shape; public class Square extends geometry.common.Polygon { public Square(int x, int y, int sideLength) { super(4); setPoint(0, x, y); setPoint(1, x + sideLength, y); setPoint(2, x + sideLength, y + sideLength); setPoint(3, x, y + sideLength); } public int getX(int index) { return x[index]; public int getY(int index) { return y[index]; 슈퍼클래스의 protected 생성자 호출 슈퍼클래스의 protected 메소드 호출 슈퍼클래스의 protected 필드 사용

02. 접근 제어 패키지와 접근 제어 메소드 오버라이딩과 접근 제어 ≥ 서브클래스 메소드의 접근 허용 범위 슈퍼클래스 메소드의 • 오버라이드하는 메소드와 오버라이드되는 메소드의 접근 제어 관련 규칙 “오버라이드하는 메소드는 상속받은 메소드의 접근 허용 범위보다 같거나 더 넓은 범위의 접근을 허용해야 한다” 서브클래스 메소드의 접근 허용 범위 슈퍼클래스 메소드의 ≥

02. 접근 제어 패키지와 접근 제어 메소드 오버라이딩과 접근 제어 [예제 8-15] protected 메소드를 갖는 Point 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } protected int getX() { return x; protected int getY() { return y;

02. 접근 제어 패키지와 접근 제어 protected 키워드 [예제 8-16] protected 메소드를 잘못 오버라이드하는 Point3D 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Point3D extends Point { int z; Point3D(int x, int y, int z) { super(x, y); this.z = z; } int getX() { // 잘못된 메소드 return x; int getY() { // 잘못된 메소드 return y; int getZ() {

02. 접근 제어 패키지와 접근 제어 인터페이스의 메소드와 접근 제어 [예제 8-17] Movable 인터페이스 1 2 3 interface Movable { void moveTo(int x, int y); } 이 메소드에는 컴파일할 때 자동으로 public 키워드가 붙습니다

02. 접근 제어 패키지와 접근 제어 인터페이스의 메소드와 접근 제어 [예제 8-18] Movable 인터페이스를 구현하는 클래스 – 잘못된 예 1 2 3 4 5 6 7 8 9 10 11 12 13 class PlaneLabel implements Movable { int x, y; String str; PlaneLabel(int x, int y, String str) { this.x = x; this.y = y; this.str = str; } void moveTo(int x, int y) { // 잘못된 메소드