6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자

Slides:



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

5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
클래스 구성 요소 1개의 클래스는 최대 8개의 구성 요소를 가질 수 있다
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6장. 클래스.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
자바 5.0 프로그래밍.
23장. 구조체와 사용자 정의 자료형 2.
자바 프로그래밍 기초 5장. 객체 지향 언어와 클래스, 객체 hanbitbook.co.kr.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
자바 5.0 프로그래밍.
11장. 1차원 배열.
Choi, Namseok Java 기초 (객체와 클래스) Choi, Namseok
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
JA V A W. 07 Sb.L.
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
Java Programming Java Programming 3장 백석대학교 인터넷멀티미디어 LAB1111호.
제 6 장 함수(functions).
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
서브클래스 조 병 규 한 국 교 통 대 학 교 SQ Lab..
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
16장. 변수, 연산자, 사용자 정의 함수 변수 배열과 객체 연산자 함수.
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
Presentation transcript:

6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자 6.6 변수의 유효 범위 6.7 생성자(Constructor) 6.8 생성자 오버로딩 (overloading) 6.9 예약어 this 6.10 메소드 6.11 메소드 오버로딩 (overloading) 6.12 메소드에 값 전달 방법 (argument passing) 6.13 finalize 메소드와 쓰레기 수집(garbage collection)

6.1 클래스의 일반 구조 클래스는 객체를 생성하는 형판 자바 프로그램은 클래스의 집합 클래스는 크게 2개의 요소로 구성 객체가 가질 수 있는 데이터의 속성(데이터를 포함할 수도 있음) 데이터를 조작할 수 있는 메소드

클래스의 구성 클래스 헤더 멤버 변수 클래스 클래스 멤버 생 성 자 메 소 드

클래스의 일반 구조 생성자 메소드 class Class-name { //클래스 헤더 부분 type1 varName1 = value1; ........ typeN varNameN = valueN; Class-name(args1) { 멤버 변수 //생성되는 객체의 초기화 과정을 기술 ..........… } Class-name(argsN) { …….. } mtype mName1(margs1) { ……. //메소드 기술 } mtype mNameN(margsN) {……. 생성자 메소드

클래스의 일반 구조 - 예 class SampleClass { // 클래스 헤더부분 int a; int b; // 멤버 변수 부분 int c; public SampleClass(int x,y,z) { // 생성자 부분. 이름이 클래스 명과 같다 a = x; b = y; c = z; } public int sum() { // 메소드 부분 int d; d = a + b + c; return d;

6.2 클래스 선언 [public/final/abstract] class Class-name { //클래스 헤더 부분 ......... //클래스 멤버 부분 } 클래스 생성시 클래스의 성격을 지정하는 한정자 사용 public : public은 다른 어떤 클래스에서도 이 클래스를 사용(클래 스의 객체를 생성하는것)할 수 있음을 의미. 한정자를 지정하지 않 으면 같은 패키지내의 클래스들만 접근 가능 final : final은 서브 클래스를 가질 수 없는 클래스(7장) abstract : 추상 메소드를 가지는 추상(abstract) 클래스를 의미(7 장)

클래스 선언 - 예 public class Box { int width; int height; //데이터의 속성만 선언된 클래스 int depth; } int height; //데이터의 속성과 메소드를 가진 클래스 public void volume() { // 메소드 int vol; vol = width * height * depth; System.out.println("Volume is "+vol); } }

클래스 선언 - 예 class Box { int width; // 데이터의 속성과 생성자, 메소드를 가진 클래스 int height; int depth; public void Box(int w, int h, int d) { //생성자, 클래스명과 이름이 같다 width=w; height=h; depth=d; } public void volume() { //메소드 int vol; vol = width * height * depth; System.out.println("Volume is "+vol);

6.3 객체의 생성 객체의 선언 클래스명 객체참조변수; 객체의 생성 객체참조변수 = new 클래스명(); 객체의 선언과 생성 클래스명 객체참조변수; 객체의 생성 객체참조변수 = new 클래스명(); 객체의 선언과 생성 클래스명 객체참조변수 = new 클래스명();

객체의 생성 - 예 class Box { int width; int height; int depth; } class MyBox { ............ Box mybox1; Box mybox2; mybox1 = new Box(); // 또는 Box mybox1 = new Box(); mybox2 = new Box(); // 또는 Box mybox2 = new Box();

객체의 선언과 생성 객체의 선언 : 객체의 선언은 null 값을 가진 변수만을 의미 null null Box mybox1; Box mybox2; mybox1 = new Box(); mybox2 = new Box(); mybox1 null mybox2 객체의 생성 : 객체에 대한 메모리가 할당되고 변수(객체참조변수)는 객체에 대한 참조(주소)를 가진다 width height depth mybox1 width height depth mybox2

예제 프로그램 Class Box{ int width; int height; int depth; } Class TwoBox{ public static void main(String args[]){ Box mybox1 = new Box(); Box mybox2 = new Box(); // 두개의 객체생성 int vol1, vol2; mybox1.width=20; mybox1.height=40; mybox1.depth=15; vol1 = mybox1.width*mybox1.height* mybox1.depth; System.out.println(“첫번째박스부피:”+vol1); vol2 = mybox2.width*mybox2.height* mybox2.depth; System.out.println(“첫번째박스부피:”+vol2); } mybox2.width=10; mybox2.height=20; mybox2.depth=30;

6.4 멤버 변수 멤버 변수는 클래스내의 메소드 밖에서 선언된 모든 것을 의미한다 멤버 변수는 클래스내의 메소드 밖에서 선언된 모든 것을 의미한다 멤버 변수는 객체가 가질 수 있는 속성들을 나타낸다 멤버 변수의 구분 객체 속성 변수 객체 변수 객체 참조 변수 멤버 변수 클래스 변수 종단 변수

멤버 변수 멤버 변수 선언 [public/private/protected] [static/final] 변수형 변수명; 객체 참조변수) 접근 한정자 public/private/protected ==> 다음절에서 설명

멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) 멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) 객체 변수 : 객체가 가질 수 있는 특성을 표현 객체 속성 변수 : 객체가 가질 수 있는 속성을 나타내는 값으로 서 기본 자료형의 값들로 구성 객체 참조 변수 : 객체를 지정하는 변수. 자바에서는 기본 자료 형을 제외한 모든 요소들을 객체로 취급 사용자는 객체를 생성한 다음 그 객체에 접근 하기 위해서는 객체 참조 변수를 통하여 그 객체의 멤버들에 접근할 수 있다.

멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) - 예 멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) - 예 class Box { int width; // 객체 속성 변수 width int height; // 객체 속성 변수 height int depth; // 객체 속성 변수 depth } class MyBox { int vol; // 객체 속성 변수 vol Box mybox1; // 객체 참조 변수 mybox1 Box mybox2; // 객체 참조 변수 mybox2 String boxname; // 객체 참조 변수 boxname // 자바에서 문자열은 객체로 취급한다 mybox1 = new Box(); mybox2 = new Box(); ............ } }

멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) - 변수 대입의 예 멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) - 변수 대입의 예 ............ int my_count1 = 100; int my_count2 = my_count1; // 객체 속성변수의 대입 Box mybox1 = new Box(); Box mybox2 = mybox1; // 객체 참조변수의 대입

멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) - 변수 대입의 예 멤버 변수 - (1) 객체 변수(객체 참조변수와 객체 속성변수) - 변수 대입의 예 객체 속성 변수 : 변수의 값이 복사되어 전달 int my_count1 = 100; int my_count2 = my_count1; Box mybox1 = new Box(); Box mybox2 = mybox1; 100 my_count1 100 my_count2 객체 참조 변수 : 객체에 대한 주소가 복사되어 전달되므로 결국 같은 객체를 가르키게 된다 width height depth 객체의 주소 mybox1 객체의 주소 mybox2

예제 class Fruit{ int apple = 5; int straw = 10; int grapes = 15; } class Buy{ public static void main(String[] args){ int quantity1, quantity2; Fruit f1 = new Fruit(); Fruit f2 = f1; //새로운 객체 참조 변수 f2에 f1할당 quantity1=f1.apple+f1.straw+f1.grapes; quantity2=f2.apple+f2.straw+f2.grapes; System.out.println(“객체 f1의 초기 과일개수”+quantity1+”개”); System.out.println(“객체 f2의 초기 과일개수”+quantity2+”개”); f1.apple = 10; f2.straw = 20; f1.grapes = 30; quantity1=f1.apple+f1.straw+f1.grapes; quantity2=f2.apple+f2.straw+f2.grapes; System.out.println(“객체 f1의 초기 과일개수”+quantity1+”개”); System.out.println(“객체 f2의 초기 과일개수”+quantity2+”개”); }

apple apple=5 straw straw=10 grapes grapes=15 apple=10 straw=20 객체의 주소 객체의 주소 f1 f1 객체의 주소 객체의 주소 f2 f2 apple=10 straw=20 grapes=30 객체의 주소 f1 객체의 주소 f2

멤버 변수 - (2) 클래스 변수 자바에서의 변수는 다음과 같은 형식으로 선언된다. [public/private/protected] [static/final] 변수형 변수이름; 클래스 변수는 static을 붙여 선언한다 클래스 변수는 전역변수의 개념을 가진다.

멤버 변수 - (2) 클래스 변수 클래스 변수의 용도 객체 변수(객체참조,객체속성)는 객체가 생성될 때마다 각 객체에 변수들이 생성되지만, 클래스 변수는 클래스로부터 생성된 객체들의 수와 상관없이 하나만 생성 한 클래스로부터 생성된 모든 객체들은 클래스 변수를 공유 클래스 변수를 이용하여 객체들 사이의 통신에 사용하거나 객체들의 공통 속성을 나타낼 수 있다. 객체변수와는 달리 클래스 변수는 클래스 이름을 통하여 접근

멤버 변수 - (2) 클래스 변수 클래스 Test 클래스 Test로 부터 생성된 모든 객체들은 static int number; 클래스 Test로 부터 생성된 모든 객체들은 Test.number로 클래스 변수에 접근 할 수 있다 객체생성 객체 고유 데이터 객체 고유 데이터 객체 고유 데이터 객체 고유 데이터 객체 a 객체 b 객체 c 객체 d

멤버 변수 - 클래스 변수 - 예 Box 클래스로부터 생성되는 모든 객체의 idNum 값은 class Box { int width; int height; int depth; long idNum; static long boxID = 0; // 클래스 변수 선언 public Box() { idNum = boxID++; // 생성자가 수행될 때마다 클래스 변수의 값을 증가 } Box 클래스로부터 생성되는 모든 객체의 idNum 값은 객체가 생성되는 순서에 따라 유일한 값을 가지게 된다.

예제 class Box{ int width; int height; int depth; long idNum; static long boxID = 0; //클래스 변수 선언 public Box(){ idNum = boxID++; } class StaticDemo{ public static void main(String args[]){ Box mybox1 = new Box(); Box mybox2 = new Box(); Box mybox3 = new Box(); Box mybox4 = new Box(); System.out.println(“mybox1의 id:”+mybox1.idNum); System.out.println(“mybox2의 id:”+mybox2.idNum); System.out.println(“mybox3의 id:”+mybox3.idNum); System.out.println(“mybox4의 id:”+mybox4.idNum); System.out.println(“전체박스의수:”+Box.boxID); }

클래스 Box static long boxID; 객체생성 mybox1 mybox2 mybox3 mybox4 width height depth idNum width height depth idNum width height depth idNum width height depth idNum mybox1 mybox2 mybox3 mybox4

멤버 변수 - (3) 종단(final) 변수 예약어 final을 사용하여 종단변수 지정 변할 수 없는 상수 값을 나타낸다 종단변수는 관례상 대문자로 표기한다. final int MAX = 100; final int MIN = 1;

멤버 변수 - (4) 접근 방법 클래스 변수와 객체 속성변수에 접근하기 위해서는 “.”을 사용 클래스 변수 : 클래스이름.클래스변수 객체 속성 변수 : 객체이름.객체속성변수

멤버 변수 - (4) 접근 방법 class A { int aa; int bb; int cc; static int s = 0; } class ATest { public static void main(String args[]) { A obja = new A(); obja.aa = 4; // 객체 참조변수에 접근 obja.bb = obja.aa * 2; // 객체 참조 변수에 접근 obja.cc = A.s; // 객체 참조 변수에 클래스 변수값을 저장 ....................

6.5 멤버 변수 접근 한정자 자바는 객체지향의 특성인 캡슐화(encapsulation)와 정 보 은폐(information hiding)를 제공하기 위해 멤버 변 수에 한정자를 사용 멤버 변수 한정자로 public, private, protected를 제공 접근 한정자가 없는 멤버 변수는 동일한 패키지와 하위 클래스에서 사용이 가능

멤버 변수 접근 한정자 - public “public”으로 선언된 객체 변수는 소속된 클래스가 접근가능하면 항상 접근 가능 class Box { public int width; public int height; public int depth; public long idNum; static long boxID = 0; public Box() { idNum = boxID++; } } class PublicDemo { public static void main(String args[]) { Box mybox1 = new Box(); mybox1.width = 7; // 접근 가능 mybox2.depth = 20; // 접근 가능 ...............

멤버 변수 접근 한정자 - private “private”으로 선언된 객체 변수는 소속된 클래스 내에서만 사용 가능 하위 클래스에도 상속되지 않는다. class Box { private int width; // private로 선언 이 클래스 내부에서만 사용 private int height; private int depth; ............. } class PrivateDemo { public static void main(String args[]) { Box mybox1 = new Box(10, 20, 30); mybox1.width = 7; // 에러 발생 ...............

멤버 변수 접근 한정자 - protected “protected”로 선언된 객체 변수는 소속된 클래스의 하위 클래스와 소 속된 클래스와 같은 패키지의 클래스에서만 사용가능 class Box { private int width; private int height; private int depth; protected int count; // 이 클래스와 이 클래스의 하위 클래스에서 사용 ..........… } class ProtectedDemo1 extends Box { // extends를 이용하여 Box 클래스의 하위 클래스로 생성 public static void main(String args[]) { Box mybox2 = new Box(); mybox2.count = 7; // 접근 가능 ……………..

6.6 변수의 유효범위 유효범위를 기준으로 변수를 구분하면 멤버변수 메소드 매개변수와 지역변수 예외 처리기 매개변수

변수의 유효범위 class MyClass { ………….. 멤버 변수들 멤버 변수의 유효범위 …………… public void aMethod(메소드 매개변수) { …….. 메소드 지역변수들 catch(예외처리기 매개변수) { ………… …………. } ………. 멤버 변수의 유효범위 메소드 매개변수와 메소드 지역변수의 유효범위 예외 처리기 매개변수의 유효범위

6.7 생성자(Constructor) 생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 기술하는 특수한 메소드 생성자의 이름은 클래스 이름과 같다 생성자는 객체가 생성될 때 자동으로 한번만 수행 접근 한정자의 의미는 멤버변수의 접근 한정자와 같다 단 생성자는 private로 선언하여 사용하지 않음 [public/protected/private] 클래스이름(매개변수) { ........ // 초기화 문장들 }

생성자(Constructor) - 예 class Box { private int width; // 변수를 private로 선언하여 외부에서 접근을 막는다 private int height; // 정보의 은폐 제공 private int depth; private int vol; public Box(int a, int b, int c) { // 클래스의 이름과 같은 이름으로 생성자 선언 width = a; // 초기화 작업 수행 height = b; depth = c; } public int volume() { vol = width * height * depth; return vol; class BoxTestDemo { public static void main(String args[]) { int vol; Box mybox1 = new Box(10, 20, 30); vol = mybox1.volume(); System.out.println("mybox1 객체의 부피 : " + vol);

6.8 생성자 오버로딩(overloading) 클래스에 하나 이상의 생성자를 중첩하여 사용할 수 있다 여러 개의 생성자를 사용할 때는 생성자의 이름은 같지만 매개변수의 타입과 개수는 달라야 한다

생성자 오버로딩(overloading)-예 Box mybox1 = new Box(); Box mybox2 = new Box(5); Box mybox3 = new Box(5, 10); Box mybox4 = new Box(5, 10, 15); class Box { int width; int height; int depth; public Box() { width=1; height=1; depth=1; } public Box(int w) { width=w; public Box(int w, int h) { width=w; height=h; depth=1; } public Box(int w, int h, int d) { depth=d; 4개의 생성자가 서로 다른 매개변수를 가진다

생성자 오버로딩(overloading)-예 class Box { int width, height, depth; double dwidth, dheight, ddepth; public Box(int w, int h, int d) { width=w; height=h; depth=d; } public Box(double w, double h, double d) { dwidth=w; dheight=h; ddepth=d; 매개변수의 개수는 같지만 타입이 다른 경우 Box mybox5 = new Box(5, 10, 15); Box mybox6 = new Box(20.3, 10.7, 15.23);

6.9 예약어 this “this”는 현재의 객체를 의미 생성자나 메소드의 매개변수와 객체 변수가 같은 이름을 가질 때 사용 같은 클래스내의 다른 생성자를 호출할 때 사용 class Box { int width; int height; int depth; public void Box(int width, int height, int depth) { width=width; // 같은 변수(생성자 매개변수)의 height=height; // 값을 배정 depth=depth; } 객체 속성 변수 생성자 매개변수 다음 슬라이드

예약어 this - 예 (같은 이름을 객체 속성 변수와 생성자 매개변수의 이름으로 사용) class Box { int width; int height; int depth; public Box(int width, int height, int depth) { this.width=width; this.height=height; this.depth=depth; } this.width는 현재 객체의 객체 속성 변수 width를 의미. this를 사용 함으로서 같은 이름을 객체변수와 생성자 매개변수의 이름으로 사용할 수 있다

예약어 this - 예 (같은 클래스 내의 다른 생성자를 호출) class Box { int width; int height; int depth; public Box() { this(1,1,1); } public Box(int w) { this(w,1,1); public Box(int w, int h) { this(w,h,1); public Box(int w, int h, int d) { width=w; height=h; depth=d; 이 클래스는 어떠한 형태로 객체가 생성되어도 결국 마지막 생성자가 호출된다. 여기서 사용된 this는 같은 클래스 내의 다른 생성자를 호출하는 역할을 한다

6.10 메소드 메소드 객체가 할 수 있는 행동을 정의 메소드의 이름은 소문자로 시작하는 것이 관례 [접근한정자] [static/final/abstract/synchronized] 반환값 메소드이름([매개변수들]) { ................ // 지역변수 선언 및 메소드 행위 기술 }

메소드 - (1) 접근 한정자 접근 한정자 public/private/protected는 멤버변수 접근 한정자와 같은 의미(6.5절 참조)

예제1 class Fruit { int apple; int straw; int grapes; int sum; this.apple = apple; this.straw = straw; this.grapes = grapes; } public int count(){ sum = apple+straw+grapes; return sum; class MethodDemo1 { public static void main(String[] args){ int total; Fruit f1 = new Fruit(30,30,30); total = f1.count(); System.out.println(“객체 f1의 총개수=“+total); System.out.println(“객체 f1의 apple의 수 =“+f1.apple); System.out.println(“객체 f1의 straw의 수 =“+f1.straw); System.out.println(“객체 f1의 grapes의 수 =“+f1.grapes); }

예제2 class MethodDemo1 { public static void main(String[] args){ class Fruit { private int apple; private int straw; private int grapes; private int sum; Fruit(int apple, int straw, int grapes){ this.apple = apple; this.straw = straw; this.grapes = grapes; this.count(); } private void count(){ sum = apple+straw+grapes; public int gettotal(){ return sum; } } class MethodDemo1 { public static void main(String[] args){ int total; Fruit f1 = new Fruit(30,30,30); System.out.println(“객체 f1의 총개수=“ +f1.gettotal()); System.out.println(“객체 f1의 apple의 수 =“+f1.apple); System.out.println(“객체 f1의 straw의 수 =“+f1.straw); System.out.println(“객체 f1의 grapes의 수 =“+f1.grapes); }

예제2 public int getapple(){ return apple; } public int getstraw(){ class Fruit { private int apple; private int straw; private int grapes; private int sum; Fruit(int apple, int straw, int grapes){ this.apple = apple; this.straw = straw; this.grapes = grapes; this.count(); } private void count(){ sum = apple+straw+grapes; public int gettotal(){ return sum; public int getapple(){ return apple; } public int getstraw(){ return straw; public int getgrapes(){ return grapes; … System.out.println(“객체 f1의 apple의 수 =“+f1.getapple());

메소드 - (2) 클래스 메소드 : static “static”을 붙여 클래스 메소드 선언 클래스 변수와 같이 클래스 명을 통하여 접근 클래스 메소드 내에서는 클래스 변수만 사용할 수 있다

예제 class StaticMethodDemo{ class Box { int width; int height; int depth; long idNum; static long boxID = 100; static long getcurrentID(){ return boxID++; } class StaticMethodDemo{ public static void main(String args[]){ Box mybox1 = new Box(); mybox1.idNum = Box.getcurrentID(); Box mybox2 = new Box(); mybox2.idNum = Box.getcurrentID(); System.out.println(“mybox1의 id :” =“+mybox1.idNum); System.out.println(“mybox2의 id :” =“+mybox2.idNum); System.out.println(“다음박스의 id :” =“+Box.boxID); }

메소드 - (3) final, abstract, synchronized 메소드 final : final로 선언된 메소드는 하위 클래스에서 치환 (overriding) 될 수 없는 메소드이다(7장 설명) abstract : 추상 메소드로서 추상 클래스내에 선언될 수 있 다 추상 메소드는 선언부분만 가지고 몸체부분은 가질 수 없다 (7장 설명) synchronized : 스레드 동기화를 위한 메소드(10장 설명)

메소드 - (4) 메소드 접근 일반 메소드와 클래스 메소드에 접근 클래스 메소드 접근 형식 : 클래스이름.클래스메소드이름(매개변수) 일반 메소드 접근 형식 : 객체이름.객체메소드이름(매개변수)

메소드 - (5) 메소드 반환값 메소드 선언부에 반환값이 지정되어야 한다 반환값이 없을 경우 “void”로 지정 기본 자료형 뿐만 아니라 참조자료형의 데이터도 반환 public int sum(int a, int b) { // 메소드 선언 int c; c = a + b; return c; } 기본 자료형 데이터를 반환하는 메소드 메소드 선언부에 지정된 반환 타입과 실제 반환하는 데이터 타입이 일치해야 한다

메소드 - (5) 메소드 반환 값 public Box volume_compute(Box instance_box) { Box v_box = new Box(); v_box.width = instance_box.width; v_box.height = instance_box.height; v_box.depth = instance_box.depth; v_box.volume= v_box.width * v_box.height * v_box.depth; return v_box; } 참조 자료형인 객체를 반환하는 메소드

6.11 메소드 오버로딩(overloading) 생성자 오버로딩과 같은 개념 한 클래스 내에서 같은 이름의 메소드를 사용 같은 이름의 메소드는 매개변수의 타입과 개수가 달라야 한다 다형성(polymorphism) 제공

예제1 class OverloadDemo1{ public static void main(String args[]){ void test(){ System.out.println(“매개변수 없음”); } void test(int a){ System.out.println(“매개변수 int”+a); void test(int a, int b){ System.out.println(“매개변수 int”+a “매개변수 int”+b); double test(double a){ System.out.println(“매개변수 double”+a); return a*2; class OverloadDemo1{ public static void main(String args[]){ Overload1 ob = new Overload1(); double result; ob.test(); ob.test(100); ob.test(5,10); result = ob.test(4.2); System.out.println(“ob.test(4.2)의 결과 :” +result); }

예제2 class OverloadDemo2{ class Overload2{ void test(){ System.out.println(“매개변수 없음”); } void test(int a, int b){ System.out.println(“매개변수 int”+a “매개변수 int”+b); double test(double a){ System.out.println(“매개변수 double”+a); return a*2; class OverloadDemo2{ public static void main(String args[]){ Overload1 ob = new Overload1(); double result; int i=88; ob.test(); ob.test(100); result = ob.test(i); System.out.println(“ob.test(4.2)의 결과 :” +ob.test(4.2)); }

6.12 메소드에 값 전달 방법(argument passing) 자바는 메소드에 값을 전달할 때 2가지 방법을 사용 call by value : 기본 자료형을 전달할 때 실매개변수의 값을 형식매개변수에 복사 형식매개변수의 값이 변화되어도 실매개 변수의 값은 변하지 않 는다 call by reference : 참조 자료형을 전달할 때 실매개변수(객체)의 주소를 형식매개변수에 전달 형식매개변수의 값이 변화되면 실매개 변수의 값이 변한다

예제 class ParaPassing1{ public void change(int i, int j[], StringBuffer sb){ i=20; j[3]=400; sb.append(“문자열 추가”); } publie void display(int i, int j[], StringBuffer sb){ System.out.println(“객체속성변수 i 값:”+i); System.out.println(“배열의 값:”); for(int c=0;c<j.length;c++) System.out.print(j[c]+” “); System.out.println(“”); System.out.println(“문자열 sb값:”+sb); class ParaPassingDemo1{ public static void main(String args[]){ ParaPassing1 cb=new ParaPassing1(); int i=10; int j[]={1,2,3,4); StringBuffer sb = new StringBuffer(“예제”); System.out.println(“첫번째display() 호출”); cb.display(i,j,sb); cb.change(i,j,sb); System.out.println(“=================”); System.out.println(“값을 변환한 후 호출”); }

6.13 finalize 메소드와 쓰레기 수집(garbage collection) JVM(자바 가상 기계)은 효율적인 시스템 운영을 위해 더 이상 필요없는 객체들을 대상으로 쓰레기 수집 기능을 자동으로 수행 JVM은 쓰레기 수집 전에 그 객체의 finalize() 메소드를 호출한다 사용자는 클래스 생성시 finalize() 메소드를 이용하여 객체에서 사용된 파일이나 소켓 같은 자원들을 반납하는 과정을 기술 할 수 있다 protected void finalize() throws Throwable { items = null; super.finalize(); }