PowerPoint 프레젠테이션

Similar documents
JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

gnu-lee-oop-kor-lec06-3-chap7

(Microsoft PowerPoint - java1-lecture4.ppt [\310\243\310\257 \270\360\265\345])

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - java1-lecture4.ppt [호환 모드]

Microsoft PowerPoint - 2강

JAVA PROGRAMMING 실습 05. 객체의 활용

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 07. 상속

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

JVM 메모리구조

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint Presentation

C++ Programming

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

설계란 무엇인가?

Microsoft PowerPoint - 4장

Design Issues

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint 장강의노트.ppt

C++ Programming

쉽게 풀어쓴 C 프로그래밍

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - Lect04.pptx

PowerPoint Presentation

PowerPoint 프레젠테이션

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Microsoft PowerPoint - Chapter 6.ppt

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - additional08.ppt [호환 모드]

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

No Slide Title

JAVA PROGRAMMING 실습 09. 예외처리

Microsoft PowerPoint - additional01.ppt [호환 모드]

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

PowerPoint Presentation

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

슬라이드 1

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional06.ppt [호환 모드]

Microsoft PowerPoint - C++ 5 .pptx

17장 클래스와 메소드

PowerPoint 프레젠테이션

PowerPoint Template

PowerPoint Template

4Àå

제11장 프로세스와 쓰레드

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java1 [호환 모드]

자바 프로그래밍

쉽게

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

No Slide Title

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint Presentation

Microsoft PowerPoint - additional07.ppt [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

프입2-강의노트-C++배경

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

슬라이드 1

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Slide 1

Microsoft PowerPoint - chap11

금오공대 컴퓨터공학전공 강의자료

PowerPoint Template

슬라이드 1

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint Presentation

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

Microsoft PowerPoint - java2 [호환 모드]

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

유니티 변수-함수.key

Microsoft PowerPoint - 04-UDP Programming.ppt

Transcription:

명품 JAVA Essential 1

2 학습목표 1. 객체지향의개념과특성이해 2. 자바클래스만들기 3. 생성자만들기 4. 객체배열선언및활용 5. 객체치환이해 6. 객체의소멸과가비지컬렉션 7. 클래스와멤버에대한접근지정 8. static 속성을가진멤버의특성 9. final로선언된클래스, 메소드, 필드에대한이해

세상모든것이객체다 3 세상모든것이객체다. 실세계객체의특징 객체마다고유한특성 (state) 와행동 (behavior) 를가짐 다른객체들과정보를주고받는등, 상호작용하면서살아감 컴퓨터프로그램에서객체사례 테트리스게임의각블록들 한글프로그램의메뉴나버튼들

자바의객체지향특성 : 캡슐화 4 캡슐화 : 객체를캡슐로싸서내부를볼수없게하는것 객체의가장본질적인특징 외부의접근으로부터객체보호 자바의캡슐화 클래스 (class): 객체모양을선언한틀 ( 캡슐화하는틀 ) 객체 : 생성된실체 (instance) 클래스내에메소드와필드구현

자바의객체지향특성 : 상속 5 상속 상위개체의속성이하위개체에물려짐하위개체가상위개체의속성을모두가지는관계 실세계의상속사례 나무는식물의속성과생물의속성을모두가짐 사람은생물의속성은가지지만식물의속성은가지고있지않음

자바상속 6 자바상속 상위클래스의멤버를하위클래스가물려받음 상위클래스 : 수퍼클래스 하위클래스 : 서브클래스, 수퍼클래스코드의재사용, 새로운특성추가가능 슈퍼클래스 서브클래스 서브클래스객체는슈퍼클래스의멤버와서브클래스의멤버를모두가짐

자바의객체지향특성 : 다형성 7 다형성 같은이름의메소드가클래스혹은객체에따라다르게구현되는것다형성사례 메소드오버로딩 : 한클래스내에서같은이름이지만다르게작동하는여러메소드 메소드오버라이딩 : 슈퍼클래스의메소드를동일한이름으로서브클래스마다다르게구현

객체지향언어의목적 8 1. 소프트웨어의생산성향상 컴퓨터산업발전에따라소프트웨어의생명주기 (life cycle) 단축 소프트웨어를빠른속도로생산할필요성증대객체지향언어 상속, 다형성, 객체, 캡슐화등소프트웨어재사용을위한여러장치내장 소프트웨어재사용과부분수정빠름 소프트웨어를다시만드는부담대폭줄임 소프트웨어생산성향상 2. 실세계에대한쉬운모델링 초기프로그래밍 수학계산 / 통계처리를하는등처리과정, 계산절차중요 현대프로그래밍 컴퓨터가산업전반에활용 실세계에서발생하는일을프로그래밍 실세계에서는절차나과정보다물체 ( 객체 ) 들의상호작용으로묘사하는것이용이 객체지향언어 실세계의일을보다쉽게프로그래밍하기위한객체중심적언어

절차지향프로그래밍과객체지향프로그래밍 9 절차지향프로그래밍 작업순서를표현하는컴퓨터명령집합함수들의집합으로프로그램작성 객체지향프로그래밍 컴퓨터가수행하는작업을객체들간의상호작용으로표현클래스혹은객체들의집합으로프로그램작성 커피자판기 객체지향적프로그래밍의객체들의상호관련성 절차지향적프로그래밍의실행절차

클래스와객체 10 클래스 객체의속성 (state) 과행위 (behavior) 선언 객체의설계도혹은틀 객체 클래스의틀로찍어낸실체 프로그램실행중에생성되는실체 메모리공간을갖는구체적인실체 인스턴스 (instance) 라고도부름 사례 클래스 : 소나타자동차, 클래스 : 벽시계, 클래스 : 책상, 객체 : 출고된실제소나타 100대객체 : 우리집벽에걸린벽시계들객체 : 우리가사용중인실제책상들

클래스와객체와의관계 11 붕어빵틀은클래스이며, 이틀의형태로구워진붕어빵은바로객체입니다. 붕어빵은틀의모양대로만들어지지만서로조금씩다릅니다. 치즈붕어빵, 크림붕어빵, 앙코붕어빵등이있습니다. 그래도이들은모두붕어빵입니다.

사람을사례로든클래스와객체사례 12 객체들은클래스에선언된동일한속성을가지지만속성값은서로다름

자바클래스구성 13 클래스 class 키워드로선언멤버 : 클래스구성요소 필드 ( 멤버변수 ) 와메소드 ( 멤버함수 ) 클래스에대한 public 접근지정 : 다른모든클래스에서클래스사용허락멤버에대한 public 접근지정 : 다른모든클래스에게멤버접근허용

예제 4-1 : Circle 클래스의객체생성및활용 14 반지름과이름을가진 Circle 클래스를작성하고, Circle 클래스의객체를생성하라. public class Circle { int radius; String name; // 원의반지름을저장하는멤버변수 // 원의이름을저장하는멤버변수 public double getarea() { // 멤버메소드 return 3.14*radius*radius; public static void main(string[] args) { Circle pizza; pizza = new Circle(); // Circle 객체생성 pizza.radius = 10; // 피자의반지름을 10으로설정 pizza.name = " 자바피자 "; // 피자의이름설정 double area = pizza.getarea(); // 피자의면적알아내기 System.out.println(pizza.name + " 의면적은 " + area); Circle donut = new Circle(); // Circle 객체생성 donut.radius = 2; // 도넛의반지름을 2로설정 donut.name = " 자바도넛 "; // 도넛의이름설정 area = donut.getarea(); // 도넛의면적알아내기 System.out.println(donut.name + " 의면적은 " + area); 자바피자의면적은 314.0 자바도넛의면적은 12.56

객체생성과활용 1. 레퍼런스변수선언 Circle pizza; 2. 객체생성 - new 연산자이용 pizza = new Circle(); 3. 객체멤버접근 - 점 (.) 연산자이용 pizza.radius = 10; area = pizza.getarea(); 15

예제 4-2 : Rectangle 클래스만들기연습 16 너비 (width) 와높이 (height) 필드, 그리고면적값을제공하는 getarea() 메소드를가진 Rectangle 클래스를작성하라. public class Rectangle { int width; int height; int getarea() { return width*height; public static void main(string[] args) { Rectangle rect = new Rectangle(); // 객체생성 rect.width = 4; rect.height = 5; System.out.println(" 사각형의면적은 " + rect.getarea()); 사각형의면적은 20

생성자개념과목적 17 생성자 객체가생성될때초기화목적으로실행되는메소드 객체가생성되는순간에자동호출

예제 4-3 : 두개의생성자를가진 Circle 클래스 18 두개의생성자를가진 Circle 클래스를만들어보라. public class Circle { int radius; String name; 생성자이름은클래스이름과동일 public Circle() { // 매개변수없는생성자 radius = 1; name = ""; // radius 의초기값은 1 public Circle(int r, String n) { // 매개변수를가진생성자 radius = r; name = n; public double getarea() { return 3.14*radius*radius; 생성자는리턴타입없음 public static void main(string[] args) { Circle pizza = new Circle(10, " 자바피자 "); // Circle 객체생성, 반지름 10 double area = pizza.getarea(); System.out.println(pizza.name + " 의면적은 " + area); Circle donut = new Circle(); // Circle 객체생성, 반지름 1 donut.name = " 도넛피자 "; area = donut.getarea(); System.out.println(donut.name + " 의면적은 " + area); 자바피자의면적은 314.0 도넛피자의면적은 3.14

생성자의특징 19 생성자이름은클래스이름과동일 생성자는여러개작성가능 ( 생성자중복 ) public class Circle { public Circle() {... // 매개변수없는생성자 public Circle(int r, String n) {... // 2 개의매개변수를가진생성자 생성자는객체생성시한번만호출 자바에서객체생성은반드시 new 연산자로함 Circle pizza = new Circle(10, " 자바피자 "); // 생성자 Circle(int r, String n) 호출 Circle donut = new Circle(); // 생성자 Circle() 호출 생성자의목적은객체생성시초기화 생성자는리턴타입을지정할수없음 public void Circle() {... // 오류. void 도사용안됨

예제 4-4 : 생성자선언및호출연습 20 title 과 author 필드를가진 Book 클래스를선언하고, 필드값을매개변수로받아초기화하는 2 개의생성자를작성하라. public class Book { String title; String author; public Book(String t) { // 생성자 title = t; author = " 작자미상 "; public Book(String t, String a) { // 생성자 title = t; author = a; public static void main(string [] args) { Book javabook = new Book("Java", " 황기태 "); Book bible = new Book("Bible"); // 생성자 Book(String t, String a) 호출 // 생성자 Book(String t) 호출

기본생성자 21 기본생성자 (default constructor) 매개변수없고, 아무작업없이단순리턴하는생성자 class Circle { public Circle() { // 기본생성자 디폴트생성자라고도불림

기본생성자가자동생성되는경우 22 클래스에생성자가하나도선언되어있지않을때 컴파일러에의해기본생성자자동생성

기본생성자가자동생성되지않는경우 23 클래스에생성자가선언되어있는경우 컴파일러는기본생성자를자동생성해주지않는다.

this 레퍼런스 24 this 객체자신에대한레퍼런스 컴파일러에의해자동관리, 개발자는사용하기만하면됨 this. 멤버형태로멤버를접근할때사용 public class Circle { int radius; public class Circle { int radius; public Circle() { radius = 1; public Circle(int r) { radius = r; double getarea() { return 3.14*radius*radius;... public Circle() { this.radius = 1; public Circle(int radius) { this.radius = radius; double getarea() { return 3.14*this.radius*this.radius;... this 를사용하여수정한경우

25 객체속에서의 this

26 this 요약

this() 로다른생성자호출 27 this() 같은클래스의다른생성자호출 생성자내에서만사용가능 생성자코드의제일처음에있어야함 this() 사용실패사례 public Book() { System.out.println(" 생성자호출됨 "); this("", "", 0); // 생성자의첫번째문장이아니기때문에컴파일오류

예제 4-5 this() 로다른생성자호출 28 예제 4-4 에서작성한 Book 클래스의생성자를 this() 를이용하여수정하라. public class Book { String title; String author; void show() { System.out.println(title + " " + author); public Book() { this("", ""); System.out.println(" 생성자호출됨 "); title = "Bible" author = " 작자미상 " public Book(String title) { this(title, " 작자미상 "); public Book(String title, String author) { this.title = title; this.author = author; public static void main(string [] args) { Book javabook = new Book("Java", " 황기태 "); Book bible = new Book("Bible"); Book emptybook = new Book(); bible.show(); 생성자호출됨 Bible 작자미상

객체배열 29 자바의객체배열 객체에대한레퍼런스배열임 자바의객체배열만들기 3 단계 배열레퍼런스변수선언 레퍼런스배열생성 배열의각원소객체생성

객체배열선언과생성과정 30 배열에대한레퍼런스변수선언 레퍼런스배열생성 객체생성

예제 4-6 : Circle 배열만들기 31 Circle 객체 5 개를가지는배열을생성하고, Circle 객체의반지름을 0 에서 4 까지각각지정한후, 면적을출력하라. class Circle { int radius; public Circle(int radius) { this.radius = radius; public double getarea() { return 3.14*radius*radius; public class CircleArray { public static void main(string[] args) { Circle [] c; c = new Circle[5]; for(int i=0; i<c.length; i++) c[i] = new Circle(i); for(int i=0; i<c.length; i++) System.out.print((int)(c[i].getArea()) + " "); 0 3 12 28 50

예제 4-7 : 객체배열만들기연습 32 예제 4-4 의 Book 클래스를활용하여 2 개짜리 Book 객체배열을만들고, 사용자로부터책의제목과저자를입력받아배열을완성하라. import java.util.scanner; class Book { String title, author; public Book(String title, String author) { this.title = title; this.author = author; public class BookArray { public static void main(string[] args) { Scanner scanner = new Scanner(System.in); Book [] book = new Book[2]; // Book 배열선언 for(int i=0; i<book.length; i++) { System.out.print(" 제목 >>"); String title = scanner.nextline(); System.out.print(" 저자 >>"); String author = scanner.nextline(); book[i] = new Book(title, author); // 배열원소객체생성 제목 >> 사랑의기술저자 >> 에리히프롬제목 >> 시간의역사저자 >> 스티븐호킹 ( 사랑의기술, 에리히프롬 )( 시간의역사, 스티븐호킹 ) for(int i=0; i<book.length; i++) System.out.print("(" + book[i].title + ", " + book[i].author + ")");

메소드 33 메소드 메소드는 C/C++ 의함수와동일 자바의모든메소드는반드시클래스안에있어야함 ( 캡슐화원칙 ) 메소드형식 접근지정자 다른클래스에서메소드를접근할수있는지여부선언 public. private, protected, 디폴트 ( 접근지정자생략 ) 리턴타입 메소드가리턴하는값의데이터타입

인자전달 기본타입의값이전달되는경우 매개변수가 byte, int, double 등기본타입으로선언되었을때 호출자가건네는값이매개변수에복사되어전달. 실인자값은변경되지않음 34

인자전달 객체가전달되는경우 객체의레퍼런스만전달 매개변수가실인자객체공유 35

인자전달 - 배열이전달되는경우 배열레퍼런스만매개변수에전달 배열통째로전달되지않음 객체가전달되는경우와동일 매개변수가실인자의배열공유 36

예제 4-8 : 인자로배열이전달되는예 37 char[] 배열을전달받아배열속의공백 (' ') 문자를 ',' 로대치하는메소드를작성하라. public class ArrayParameter { static void replacespace(char a[]) { for (int i=0; i<a.length; i++) if (a[i] == ' ') a[i] = ','; static void printchararray(char a[]) { for (int i=0; i<a.length; i++) System.out.print(a[i]); System.out.println(); public static void main (String args[]) { char c[] = {'T','h','i','s',' ','i','s',' ','a',' ','p','e','n','c','i','l','.'; printchararray(c); replacespace(c); printchararray(c); a T h i s i s a p e n c i l. c for (int i=0; i<a.length; i++) if (a[i] == ' ') a[i] = ',';, replacespace() main() This is a pencil. This,is,a,pencil.

메소드오버로딩 38 오버로딩 (Overloading) 한클래스내에서두개이상의이름이같은메소드작성 메소드이름이동일하여야함 매개변수의개수가서로다르거나, 타입이서로달라야함 리턴타입은오버로딩과관련없음

39 성공한오버로딩과메소드호출

오버로딩실패사례 40 매개변수의개수와타입이같기때문에오버로딩실패

객체치환시주의할점 41 * 객체치환은객체복사가아니며, 레퍼런스의복사이다. 객체치환 ob1.id=4 ob2.id=4

객체소멸 42 객체소멸 new 에의해할당받은객체와배열메모리를자바가상기계로되돌려주는행위 소멸된객체공간은가용메모리에포함 자바에서사용자임의로객체소멸안됨 자바는객체소멸연산자없음 객체생성연산자 : new 객체소멸은자바가상기계의고유한역할 자바개발자에게는매우다행스러운기능 C/C++ 에서는할당받은객체를개발자가프로그램내에서삭제해야함 C/C++ 의프로그램작성을어렵게만드는요인 자바에서는사용하지않는객체나배열을돌려주는코딩책임으로부터개발자해방

가비지 43 가비지 가리키는레퍼런스가하나도없는객체 더이상접근할수없어사용할수없게된메모리 가비지켈렉션 자바가상기계의가비지컬렉터가자동으로가비지수집, 반환

예제 4-9 : 가비지의발생 44 다음소스에서언제가비지가발생하는지설명하라. public class GarbageEx { public static void main(string[] args) { String a = new String("Good"); String b = new String("Bad"); String c = new String("Normal"); String d, e; a = null; d = c; c = null;

가비지컬렉션 45 가비지컬렉션 자바가상기계가가비지자동회수 가용메모리공간이일정이하로부족해질때 가비지를수거하여가용메모리공간으로확보 가비지컬렉터 (garbage collector) 에의해자동수행 강제가비지컬렉션강제수행 System 또는 Runtime 객체의 gc() 메소드호출 System.gc(); // 가비지컬렉션작동요청 이코드는자바가상기계에강력한가비지컬렉션요청 그러나자바가상기계가가비지컬렉션시점을전적으로판단

자바의패키지개념 46 패키지 상호관련있는클래스파일 ( 컴파일된.class) 을저장하여관리하는디렉터리 자바응용프로그램은하나이상의패키지로구성

접근지정자 47 자바의접근지정자 4가지 private, protected, public, 디폴트 ( 접근지정자생략 ) 접근지정자의목적 클래스나일부멤버를공개하여다른클래스에서접근하도록허용 객체지향언어의캡슐화정책은멤버를보호하는것 접근지정은캡슐화에묶인보호를일부해제할목적 접근지정자에따른클래스나멤버의공개범위 private 디폴트 protected public 외부로부터완벽차단 동일패키지에허용 동일패키지와자식클래스에허용 모든클래스에허용

클래스접근지정 48 클래스접근지정 다른클래스에서사용하도록허용할지지정 public 클래스 다른모든클래스에게접근허용 디폴트클래스 ( 접근지정자생략 ) package-private라고도함 같은패키지의클래스에만접근허용 public class World { // public 클래스... class Local { // 디폴트클래스... public 클래스와디폴트클래스의접근사례

멤버접근지정 49 public 멤버 패키지에관계없이모든클래스에게접근허용 private 멤버 동일클래스내에만접근허용 상속받은서브클래스에서접근불가 protected 멤버 같은패키지내의다른모든클래스에게접근허용 상속받은서브클래스는다른패키지에있어도접근가능 디폴트 (default) 멤버 같은패키지내의다른클래스에게접근허용

멤버접근지정사례 50 public 접근지정사례 private 접근지정사례

디폴트접근지정사례 protected 접근지정사례 51

예제 4-10 : 멤버의접근지정자 52 다음코드의두클래스 SampleClass 와 AccessEx 클래스는 AccessEx.java 에들어있어컴파일되면, 동일한패키지에저장된다. 컴파일오류를찾아내고이유를설명하라. class SampleClass { public int field1; protected int field2; int field3; private int field4; public class AccessEx { public static void main(string[] args) { SampleClass s = new SampleClass(); s.field1 = 0; s.field2 = 1; s.field3 = 2; s.field4 = 3; AccessEx 클래스의 14 번라인에서컴파일오류발생. field4 는 SampleClass 의 private 멤버이므로 SampleClass 외의다른클래스에서접근할수없다. Exception in thread "main" java.lang.error: Unresolved compilation problem: The field s.field4 is not visible at AccessEx.main(AccessEx.java:14)

static 멤버 53 static 멤버선언 class StaticSample { int n; void g() {... // non-static 필드 // non-static 메소드 static int m; static void f() {... // static 필드 // static 메소드 객체생성과 non-static 멤버의생성 non-static 멤버는객체가생성될때, 객체마다생긴다 객체마다 n, g() 의 nonstatic 멤버들이생긴다

static 멤버의생성 54 static 멤버는클래스당하나만생성 객체들에의해공유됨 StaticSample 의어떤객체가생기기전에도 static 멤버는생성되어있음

55 static 멤버와 non-static 멤버특성정리

static 멤버사용 56 클래스이름으로접근가능 StaticSample.m = 3; StaticSample.f(); // 클래스이름으로 static 필드접근 // 클래스이름으로 static 메소드호출 객체의멤버로접근가능 StaticSample b1 = new StaticSample(); b1.m = 3; // 객체이름으로 static 필드접근 b1.f(); // 객체이름으로 static 메소드호출 non-static 멤버는클래스이름으로접근안됨 StaticSample.n = 5; StaticSample.g(); // n은 non-static이므로컴파일오류 // g() 는 non-static이므로컴파일오류

static 의활용 57 1. 전역변수와전역함수를만들때활용 2. 공유멤버를만들고자할때 static 으로선언한멤버는클래스의객체들사이에공유

예제 4-11 : static 멤버를가진 Calc 클래스작성 58 전역함수로작성하고자하는 abs, max, min 의 3 개함수를 static 메소드를작성하고호출하는사례를보여라. class Calc { public static int abs(int a) { return a>0?a:-a; public static int max(int a, int b) { return (a>b)?a:b; public static int min(int a, int b) { return (a>b)?b:a; public class CalcEx { public static void main(string[] args) { System.out.println(Calc.abs(-5)); System.out.println(Calc.max(10, 8)); System.out.println(Calc.min(-3, -8)); 5 10-8

static 메소드의제약조건 1 59 static 메소드는오직 static 멤버만접근가능 객체가생성되지않은상황에서도 static 메소드는실행될수있기때문에, non-static 멤버활용불가 non-static 메소드는 static 멤버사용가능

static 메소드의제약조건 2 60 static 메소드는 this 사용불가 static 메소드는객체없이도사용가능하므로, this 레퍼런스사용할수없음

final 클래스와메소드 61 final 클래스 - 더이상클래스상속불가능 final class FinalClass {... class DerivedClass extends FinalClass { // 컴파일오류... final 메소드 - 더이상오버라이딩불가능 public class SuperClass { protected final int finalmethod() {... class SubClass extends SuperClass { protected int finalmethod() {... // 컴파일오류, 오버라이딩할수없음

final 필드 62 final 필드, 상수선언 상수를선언할때사용 class SharedClass { public static final double PI = 3.14; 상수필드는선언시에초기값을지정하여야한다 상수필드는실행중에값을변경할수없다 public class FinalFieldClass { final int ROWS = 10; // 상수정의, 이때초기값 (10) 을반드시설정 void f() { int [] intarray = new int [ROWS]; // 상수활용 ROWS = 30; // 컴파일오류발생, final 필드값을변경할수없다.