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

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

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - 4장

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

4Àå

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

PowerPoint Presentation

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - Lect04.pptx

PowerPoint 프레젠테이션

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

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - 2강

PowerPoint 프레젠테이션

C++ Programming

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Blog

JAVA PROGRAMMING 실습 07. 상속

JVM 메모리구조

Design Issues

C++ Programming

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

설계란 무엇인가?

No Slide Title

슬라이드 1

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - Chap12-OOP.ppt

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

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint 장강의노트.ppt

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Slide 1

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

PowerPoint Presentation

5장.key

예제 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

제11장 프로세스와 쓰레드

Microsoft Word - java19-1-midterm-answer.doc

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chapter 6.ppt

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

JAVA PROGRAMMING 실습 09. 예외처리

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

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

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

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

Microsoft Word - EEL2 Lab4.docx

No Slide Title

PowerPoint Presentation

Microsoft PowerPoint - additional06.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µå

JAVA PROGRAMMING 실습 02. 표준 입출력

Slide 1

PowerPoint Template

Microsoft PowerPoint - ch07 - 포인터 pm0415

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - Java7.pptx

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

Microsoft PowerPoint - chap11

자바 프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

쉽게

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

17장 클래스와 메소드

PowerPoint Presentation

Microsoft PowerPoint - java2 [호환 모드]

PowerPoint Template

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

01-OOPConcepts(2).PDF

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Template

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

Transcription:

OOP (Object-Oriented Programming) 객체지향개념클래스, 객체, 메소드 514760-1 2017 년가을학기 9/18/2017 박경신 소프트웨어의생산성향상 컴퓨터산업발전에따라소프트웨어의생명주기 (life cycle) 단축 객체지향언어는상속, 다형성, 객체, 캡슐화등소프트웨어재사용을위한여러장치내장 소프트웨어의재사용과부분수정을통해소프트웨어를다시만드는부담을대폭줄임으로써소프트웨어의생산성이향상 실세계에대한쉬운모델링 과거 수학계산 / 통계처리를하는등의처리과정, 계산절차가중요 현재 컴퓨터가산업전반에활용 실세계에서발생하는일을프로그래밍 실세계에서는절차나과정보다일과관련된물체 ( 객체 ) 들의상호작용으로묘사하는것이용이 실세계의일을보다쉽게프로그래밍하기위한객체중심의객체지향언어탄생 절차지향프로그래밍 vs OOP 절차지향프로그래밍 (Procedural Programming) 작업순서를표현하는컴퓨터명령집합 함수들의집합으로프로그램작성 객체지향프로그래밍 (Object Oriented Programming) 프로그램을실제세상에가깝게모델링 컴퓨터가수행하는작업을객체들간의상호작용으로표현 클래스혹은객체들의집합으로프로그램작성 절차지향프로그래밍 vs OOP OOP 실세계를모델링하여프로그래밍하는방법 커피자판기 객체지향적프로그래밍의객체들의상호관련성 절차지향적프로그래밍의실행절차

절차지향프로그래밍 vs OOP 객체 (Object) 객체 (object) 는상태 (state) 와동작 (behavior) 을가짐. 객체의상태 (state) 는객체의속성임. 객체의동작 (behavior) 또는행동은객체가할수있는동작임. 상태는필드 (field) 로동작은메소드 (method) 로구현됨. 객체지향의 3 대특징 캡슐화 (Encapsulation) 상속 (Inheritance) 다형성 (Polymorphism) 캡슐화 (Encapsulation) 캡슐화 (Encapsulation) 관련된데이터와알고리즘 ( 코드 ) 를하나의덩어리로묶는것 메소드 ( 함수 ) 와데이터를클래스내에선언하고구현 외부에서는공개된메소드의인터페이스만접근가능 외부에서는비공개데이터에직접접근하거나메소드의구현세부를알수없음 객체내데이터에대한보안, 보호, 외부접근제한 실세계의캡슐화

캡슐화 (Encapsulation) 캡슐화와정보은닉 정보은닉이가능하기때문에업그레이드기쉽게가능 정보은닉 (information hiding) 은객체를캡슐로싸서객체의내부를보호하는하는것이다. 즉객체의실제구현내용을외부에감추는것임. 자바객체의캡슐화 상속 (Inheritance) 상속 (Inheritance) 상속 (Inheritance): 이미작성된클래스 ( 부모클래스 ) 를이어받아서새로운클래스 ( 자식클래스 ) 를생성하는기법 기존의코드를재활용하기위한기법 상속의개념 상속 상위클래스의특성을하위클래스가물려받음 상위클래스 : 수퍼클래스, 하위클래스 : 서브클래스 서브클래스 수퍼클래스코드의재사용 새로운특성추가가능 자바는클래스다중상속없음 인터페이스를통해다중상속과같은효과얻음

다형성 (Polymorphism) 다형성 (Polymorphism) 동일한이름으로많은상황에대처하는기법 자바의다형성사례 슈퍼클래스의메소드를서브클래스마다다르게구현하는메소드오버라이딩 (overriding) 클래스와객체 클래스 객체의속성과행위선언 객체의설계도혹은틀 객체 클래스의틀로찍어낸실체 메모리공간을갖는구체적인실체 클래스를구체화한객체를인스턴스 (instance) 라고부름 객체와인스턴스는같은뜻으로사용 사례 클래스 : 소나타자동차, 객체 : 출고된실제소나타 100대 클래스 : 벽시계, 객체 : 우리집벽에걸린벽시계들 클래스 : 책상, 객체 : 우리가사용중인실제책상들 클래스와객체 클래스구조 클래스 : Person 이름, 직업, 나이, 성별, 혈액형밥먹기, 잠자기, 말하기, 걷기 이름 최승희 직업 의사 나이 45 성별 여 혈액형 A 이름 이미녀 직업 골프선수 나이 28 성별 여 혈액형O 이름 김미남 직업 교수 나이 47 성별 남 혈액형AB 객체 : 최승희 객체 : 이미녀 객체 : 김미남

클래스선언 클래스접근권한, public 다른클래스들에서이클래스를사용하거나접근할수있음을선언 class Person Person 이라는이름의클래스선언 클래스는 { 로시작하여 로닫으며이곳에모든필드와메소드구현 필드 (field) 값을저장할멤버변수 멤버변수혹은필드라고함 필드의접근지정자 public 필드를다른클래스의메소드에서접근할수있도록공개한다는의미 메소드 (method) 메소드는함수이며객체의행위를구현 메소드의접근지정자 public 메소드를다른클래스의메소드에서호출할수있도록공개한다는의미 생성자 (constructor) 클래스의이름과동일한메소드 클래스의객체가생성될때만호출되는메소드 객체생성 객체생성 new 키워드를이용하여생성 new 는객체의생성자호출 객체생성과정 1. 객체에대한레퍼런스변수선언 2. 객체생성 public static void main (String args[]) { Person aperson; // 1. 레퍼런스변수 aperson 선언 aperson = new Person(" 김미남 "); // 2. Person 객체생성 aperson.age = 30; // 객체멤버접근 int i = aperson.age; // 30 String s = aperson.getname(); // 객체메소드호출 객체생성및사용예 객체의활용 객체의멤버접근 : 객체레퍼런스. 멤버 객체의필드에값대입 public class ClassExample { public static void main (String args[]) { Person aperson = new Person(" 홍길동 "); aperson.age = 30; int i = aperson.age; String s = aperson.getname(); 객체의필드에서값읽기 객체의메소드호출

예제 : 상품 (Goods) 클래스 public class Goods { String name; // 상품이름 int price; // 상품가격 int numberofstock; // 재고수량 int numberofsold; // 팔린수량 public static void main(string[] args) { Goods camera = new Goods(); camera.name = "Nikon"; camera.price = 400000; camera.numberofstock = 30; camera.numberofsold = 50; 상품이름 :Nikon 상품가격 :400000 재고수량 :30 팔린수량 :50 System. out.println(" 상품이름 :" + camera.name); System.out.println(" 상품가격 :" + camera.price); System.out.println(" 재고수량 :" + camera.numberofstock); System.out.println(" 팔린수량 :" + camera.numberofsold); public class Car { String color; int speed; int gear; @Override public String tostring() { return "Car [color=" + color + ", speed=" + speed + ", gear=" + gear + "]"; void setcolor(string c) { color = c; void speedup() { speed = speed + 10; void speeddown() { speed = speed - 10; void changegear(int g) { gear = g; public class CarTest { public static void main(string[] args) { Car mycar = new Car(); 예제 : 자동차 (Car) 클래스 mycar.setcolor( red ); mycar.changegear(1); mycar.speedup(); System.out.println(myCar); Car [color=red, speed=10, gear=1] 예제 : 지수클래스 (MyExp) 만들기 public class MyExp { int base; int exp; int getvalue() { int res=1; for(int i=0; i<exp; i++) res = res * base; return res; public static void main(string[] args) { MyExp number1 = new MyExp(); number1.base = 2; number1.exp = 3; MyExp number2 = new MyExp(); number2.base = 3; number2.exp = 4; 클래스 MyExp를작성하라. MyExp는지수값을표현하는클래스로서두개의정수형멤버필드 base와 exp를가진다. 2 3 의경우 base는 2이며, exp는 3이다. base와 exp는양의정수만을가지는것으로가정한다. 또한 MyExp는정수값을리턴하는 getvalue() 라는메소드를제공한다. getvalue() 는 base와 exp 값으로부터지수를계산하여정수값으로 리턴한다. 예를들어 MyExp객체의 base 필드가 2이고 exp가 3이라면 getvalue() 는 8을리턴한다. 2 의 3 승 = 8 3 의 4 승 = 81 System.out.println("2 의 3 승 = " + number1.getvalue()); System.out.println("3 의 4 승 = " + number2.getvalue()); 객체배열 객체배열생성및사용

객체배열선언과생성사례 public static void main(string [] args) { Person[] pa; pa = new Person[10]; for(int i=0;i<pa.length; i++) { pa[i] = new Person(); pa[i].age = 30 + i; for(int i=0;i<pa.length;i++) System.out.print(pa[i].age+" "); 30 31 32 33 34 35 36 37 38 39 예제 : 객체배열생성 import java.util.scanner; Scanner 클래스를이용하여상품을 public class GoodsArray { 입력받아 Goods 객체를생성하고 public static void main(string[] args) { 이들을 Goods 객체배열에 Goods [] goodsarray; 저장하라. 상품을 3개입력받으면 goodsarray = new Goods [3]; 이들을모두화면에출력하라. Scanner s = new Scanner(System.in); for(int i=0; i<goodsarray.length; i++) { String name = s.next(); int price = s.nextint(); int n = s.nextint(); int sold = s.nextint(); goodsarray[i] = new Goods(name, price, n, sold); for(int i=0; i<goodsarray.length; i++) { System.out.print(goodsArray[i].getName()+" "); System.out.print(goodsArray[i].getPrice()+" "); System.out.print(goodsArray[i].getNumberOfStock()+" "); System.out.println(goodsArray[i].getSold()); 예제 : 객체배열생성 class Goods { private String name; private int price; private int numberofstock; private int sold; Goods(String n, int p, int nstack, int s) { name = n; price = p; numberofstock = nstock; sold = s; String getname() {return name; int getprice() {return price; int getnumberofstock() {return numberofstock; int getsold() {return sold; 콜라 500 10 20 사이다 1000 20 30 맥주 2000 30 50 콜라 500 10 20 사이다 1000 20 30 맥주 2000 30 50 메소드형식 메소드 메소드는 C/C++ 의함수와동일 자바의모든메소드는반드시클래스안에있어야함 ( 캡슐화원칙 ) 메소드구성형식 접근지정자 public. private, protected, 디폴트 ( 접근지정자생략된경우 ) 리턴타입 메소드가반환하는값의데이터타입

인자전달 기본타입 자바의인자전달방식 (Parameter Passing) 값에의한호출 (call by value) 기본타입의값을전달하는경우 값이복사되어전달 메소드의매개변수가변경되어도호출한실인자값은변경되지않음 인자전달 레퍼런스타입 자바의인자전달방식 객체혹은배열을전달하는경우 객체나배열의레퍼런스만전달 객체혹은배열이통째로복사되어전달되는것이아님 메소드의매개변수와호출한실인자가객체나배열을공유하게됨 아주중요!! 기본타입의값이전달되는경우 객체가전달되는경우 33 34 * 객체가복사되어전달되는것이아님객체에대한레퍼런스만복사되어전달

매개변수에배열이전달되는경우 매개변수에배열의레퍼런스만전달 2 3 4 5 6 예제 : 배열의전달 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); char 배열을메소드의인자로전달하여배열속의공백 (' ') 문자를, 로대치하는프로그램을작성하라. 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] = ',';, This is a pencil. This,is,a,pencil. replacespace() main() 메소드오버로딩 오버로딩 (Overloading) 한클래스내에서두개이상의이름이같은메소드작성 메소드이름이동일하여야함 매개변수의개수가서로다르거나, 타입이서로달라야함 리턴타입은오버로딩과관련없음 // 메소드오버로딩이성공한사례 class MethodOverloading { public int getsum(int i, int j) { return i + j; public int getsum(int i, int j, int k) { return i + j + k; public double getsum(double i, double j) { return i + j; // 메소드오버로딩이실패한사례 class MethodOverloadingFail { public int getsum(int i, int j) { return i + j; public double getsum(int i, int j) { return (double)(i + j);

오버로딩된메소드호출 this 레퍼런스 this 란? 현재실행되는메소드가속한객체에대한레퍼런스 컴파일러에의해자동선언 : 별도로선언할필요없음 class Samp { int id; public Samp(int x) { id = x; public void set(int x) { id = x; public int get() {return id; class Samp { int id; public Samp(int x) { this.id = x; public void set(int x) { this.id = x; public int get() {return id; this 가필요한경우 this 에대한이해 this의필요성 객체의멤버변수와메소드변수의이름이같은경우 다른메소드호출시객체자신의레퍼런스를전달할때 메소드가객체자신의레퍼런스를반환할때 class Samp { int id; // 매개변수이름과필드의이름이같을때 public Samp(int id) { this.id = id; public void set(int id) { this.id = id; public int get() {return this.id; public Samp me() { return this; // 자신의레퍼런스를반환할때

객체의치환 * 객체의치환은객체가복사되는것이아니며레퍼런스가복사된다. 필드의초기화 선언과동시에초기화가능 생성자를사용하는방법 -> 다음장에서학습 ob1.id=4 ob2.id=4 생성자개념 생성자 - 객체가생성될때초기화를위해실행되는메소드 생성자 생성자의특징 생성자는메소드 생성자이름은클래스이름과동일 생성자는 new를통해객체를생성할때만호출됨 생성자도오버로딩하여여러개작성가능 생성자는리턴타입을지정할수없음 생성자는하나이상선언되어야함 개발자가생성자를작성하지않았으면컴파일러에의해자동으로기본생성자가선언됨 기본생성자를디폴트생성자 (default constructor) 라고도함

생성자정의와생성자호출 기본생성자 기본생성자 (default constructor) 클래스에생성자가하나도선언되지않은경우 컴파일러에의해자동으로생성 매개변수없는생성자 아무작업없이단순리턴 디폴트생성자라고도부름 class DefaultConstructor{ int x; public void setx(int x) {this.x = x; public int getx() {return x; public static void main(string [] args) { DefaultConstructor p = new DefaultConstructor(); p.setx(3); 개발자가작성한코드 기본생성자 class DefaultConstructor{ int x; public void setx(int x) {this.x = x; public int getx() {return x; public DefaultConstructor() { 컴파일러에의해자동삽입된기본생성자 public static void main(string [] args) { DefaultConstructor p= new DefaultConstructor(); p.setx(3); 컴파일러가자동으로기본생성자를삽입한코드 기본생성자가자동생성되지않는경우 클래스에생성자가하나라도존재하면기본생성자가자동삽입되지않음 class DefaultConstructor{ 컴파일러가기본생성자를 int x; 자동생성하지않음 public void setx(int x) {this.x = x; public DefaultConstructor() { public int getx() {return x; public DefaultConstructor(int x) { this.x = x; public static void main(string [] args) { DefaultConstructor p1= new DefaultConstructor(3); int n = p1.getx(); DefaultConstructor p2= new DefaultConstructor(); p2.setx(5); 컴파일오류. 해당하는생성자가 없음!!!

this(), 생성자에서다른생성자호출 this() 생성자호출 같은클래스의다른생성자호출 생성자내에서만사용가능 다른메소드에서는사용불가 반드시생성자코드의제일처음에수행 public class Book { String title; String author; int ISBN; public Book(String title, String author, int ISBN) { this.title = title; this.author = author; this.isbn = ISBN; public Book(String title, int ISBN) { this(title, "Anonymous", ISBN); public Book() { this(null, null, 0); System.out.println(" 생성자가호출되었음 "); title = "Holy Bible" author = "Anonymous" ISBN = 1 title = "Holy Bible" ISBN = 1 public static void main(string [] args) { Book javabook = new Book("Java JDK", " 황기태 ", 3333); Book holybible = new Book("Holy Bible", 1); Book emptybook = new Book(); this() 사용실패예 public class Book { String title; String author; int ISBN; public Book(String title, String author, int ISBN) { this.title = title; this.author = author; this.isbn = ISBN; public Book() { System.out.println(" 생성자가호출되었음 "); this(null, null, 0); // 생성자의첫번째문장이아니기때문에컴파일오류 public static void main(string [] args) { Book javabook = new Book("Java JDK", " 황기태 ", 3333); 객체의소멸과가비지 가비지사례 객체소멸 new에의해생성된객체메모리를자바가상기계로되돌려주는행위 소멸된객체공간은가용메모리에포함 자바응용프로그램에서임의로객체소멸할수없음 객체소멸은자바가상기계의고유한역할 자바개발자에게는매우다행스러운기능 C/C++ 에서는할당받은객체를개발자가프로그램내에서삭제해야함 C/C++ 의프로그램작성을어렵게만드는요인 가비지 (Garbage) 가비지 (Gabage) : 가리키는레퍼런스가하나도없는객체 더이상접근하여사용할수없게되었음 가비지켈렉션 (Gabage Collection) 자바가상기계의가비지컬렉터가자동으로가비지를수집하여반환

예제 : 가비지발생 다음소스에서언제가비지가발생하는지설명하라. 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; 가비지컬렉션 가비지컬렉션 자바에서가비지자동회수 가용메모리공간으로확보 가비지컬렉터 (garbage collector) 에의해자동수행 개발자에의한강제가비지컬렉션 System 또는 Runtime 객체의 gc() 메소드호출 System.gc(); // 가비지컬렉션작동요청 이코드는자바가상기계에강력한가비지컬렉션요청 그러나자바가상기계가가비지컬렉션시점을전적으로판단 설정자와접근자 설정자와접근자 설정자 (mutator) 필드의값을설정하는메소드 setxxx() 형식 접근자 (accessor) 필드의값을반환하는메소드 getxxx() 형식 접근자와변경자메소드만을통하여필드에접근한다.

예제 : 설정자 (set) 와접근자 (get) 설정자와접근자는왜사용하는가? 설정자에서매개변수를통하여잘못된값이넘어오는경우, 이를사전에차단할수있음. 필요할때마다필드값을계산하여반환할수있음. 접근자만을제공하면자동적으로읽기만가능한필드를만들수있음. 현재자동차의색상는 red 현재자동차의속도는 100 현재자동차의기어는 1 지역변수 메소드안에선언 메소드의매개변수도지역변수의일종 주의 지역변수를초기화하지않고사용하면오류 Exception in thread "main" java.lang.error: Unresolved compilation problems: The local variable sum may not have been initialized...

객체의생성 참조값을복사한다면 두개의참조변수가하나의객체를가리킬수있음. 객체의소멸 객체의소멸

접근지정자이해 클래스접근지정자 클래스앞에올수있는접근지정자 public 접근지정자 public class Person { 다른모든클래스가접근가능 접근지정자생략 (default 접근지정자 ) class Person { package-private 라고도함 같은패키지내에있는클래스에서만접근가능 같은디렉토리에있는클래스끼리접근가능 멤버접근지정자 멤버접근지정자의이해 디폴트 (default) 멤버 같은패키지내의다른클래스만접근가능 public 멤버 패키지에관계없이모든클래스에서접근가능 private 멤버 클래스내에서만접근가능 상속받은하위클래스에서도접근불가 protected 멤버 같은패키지내의다른모든클래스에서접근가능 상속받은하위클래스는다른패키지에있어도접근가능 public 접근지정사례 private 접근지정사례

멤버접근지정자의이해 멤버접근지정자의이해 디폴트접근지정사례 protected 접근지정사례 예제 : 접근지정자의사용 다음의소스를컴파일해보고오류가난이유를설명하고오류를수정하시오. class Sample { public int a; private int b; int c; public class AccessEx { public static void main(string[] args) { Sample aclass = new Sample(); aclass.a = 10; aclass.b = 10; aclass.c = 10; Sample 클래스의 a 와 c 는각각 public, default 지정자로선언이되었으므로, 같은패키지에속한 AccessEx 클래스에서접근가능 b 는 private 으로선언이되었으므로 AccessEx 클래스에서접근불가능 예제 : 결과 class Sample { 오류가수정된소스 public int a; private int b; int c; public int getb() { return b; public void setb(int value) { b = value; public class AccessEx { public static void main(string[] args) { Sample aclass = new Sample(); aclass.a = 10; aclass.setb(10); aclass.c = 10; private 접근지정자를갖는멤버 b 를위해클래스내부에 getb()/setb() 메소드만들어접근

static 멤버와 non-static 멤버 non-static 멤버와 static 멤버의차이 non-static 멤버의특성 공간적 - 멤버들은객체마다독립적으로별도존재 인스턴스멤버라고도부름 시간적 - 필드와메소드는객체생성후비로소사용가능 비공유의특성 - 멤버들은여러객체에의해공유되지않고 배타적 static 멤버란? 객체를생성하지않고사용가능 클래스당하나만생성됨 클래스멤버라고도부름 객체마다생기는것이아님 특성 class StaticSample { int n; // non-static 필드 void g() {... // non-static 메소드 static int m; // static 필드 static void f() {... // static 메소드 공간적특성 - static 멤버들은클래스당하나만생성. 시간적특성 - static 멤버들은클래스가로딩될때공간할당. 공유의특성 - static 멤버들은동일한클래스의모든객체에의해공유 static 멤버를객체의멤버로접근하는사례 static 멤버를클래스이름으로접근하는사례 76

static 의활용 전역변수와전역함수를만들때활용 자바의캡슐화원칙지킴 다른클래스에서공유하는전역변수나전역함수도반드시클래스내부에구현해야함 static 멤버를가진클래스사례 java.lang.math 클래스 JDK와함께배포되는 java.lang.math 클래스 모든필드와메소드가 public static으로선언 다른모든클래스에서사용할수있음 public class Math { // 잘못된사용법 public static int abs(int a); //Math() 생성자는 private public static double cos(double a); //Math m = new Math() public static int max(int a, int b); //int n = m.abs(-5) public static double random();... // 바른사용법 int n = Math.abs(-5); static 메소드의제약조건 1 static 메소드는오직 static 멤버만접근가능 객체가생성되지않은상황에서도 static 메소드는실행될수있기때문에, non-static 메소드와필드사용불가 non-static 메소드는 static 멤버사용가능 static 메소드의제약조건 2 static 메소드는 this 사용불가 static 메소드는객체가생성되지않은상황에서도호출이가능하므로, 현재객체를가리키는 this 레퍼런스사용할수없음 예제 : static 을이용한달러와우리나라원화사이의변환예제 class CurrencyConverter { private static double rate; // 한국원화에대한환율 public static double todollar(double won) { return won/rate; // 한국원화를달러로변환 public static double tokwr(double dollar) { return dollar * rate; // 달러를한국원화로변환 public static void setrate(double r) { rate = r; // 환율설정. KWR/$1 public class StaticMember { public static void main(string[] args) { static 필드와메소드를이용하여달러와한국원화사이의변환을해주는환율계산기를만들어보자. 백만원은 892.0606601248885 달러입니다. 백달러는 112100.0 원입니다. CurrencyConverter.setRate(1121); // 미국달러환율설정 System.out.println(" 백만원은 " + CurrencyConverter.toDollar(1000000) + " 달러입니다."); System.out.println(" 백달러는 " + CurrencyConverter.toKWR(100) +" 원입니다.");

final 클래스와메소드 final 클래스 - 더이상클래스상속불가능 final class FinalClass {... class DerivedClass extends FinalClass { // 컴파일오류... final 메소드 - 더이상오버라이딩불가능 public class SuperClass { protected final int finalmethod() {... class DerivedClass extends SuperClass { protected int finalmethod() {... // 컴파일오류, 오버라이딩할수없음 final 필드 final 필드, 상수선언 상수를선언할때사용 class SharedClass { public static final double PI = 3.141592653589793; 상수필드는선언시에초기값을지정하여야한다 상수필드는실행중에값을변경할수없다 상수는 static으로선언하는것이바람직함 public class FinalFieldClass { final int ROWS = 10; // 상수정의, 이때초기값 (10) 을반드시설정 void f() { int [] intarray = new int [ROWS]; // 상수활용 //ROWS = 30; // 컴파일오류발생, final 필드값을변경할수없다. String 클래스의메소드 문자열의결합 두개의문자열은 + 연산자를이용하여결합될수있다. String subject = "Money"; String other = " has no value if it is not used"; String sentence = subject + other; "Money has no value if it is not used"

숫자를문자열로변환 int x = 20; System.out.println(" 결과값은 + x); // 결과값은 20 이출력된다. String answer = "The answer is " + 100; // The answer is 100" 결과값은 20 The answer is 100