슬라이드 1

Similar documents
PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

슬라이드 1

JAVA PROGRAMMING 실습 05. 객체의 활용

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

JAVA PROGRAMMING 실습 08.다형성

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

PowerPoint Presentation

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

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

Microsoft PowerPoint - Lect04.pptx

슬라이드 1

PowerPoint Presentation

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

Design Issues

PowerPoint Presentation

PowerPoint 프레젠테이션

슬라이드 1

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - 2강

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

슬라이드 1

슬라이드 1

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 05. 객체의 활용

슬라이드 1

슬라이드 1

PowerPoint Presentation

JUNIT 실습및발표

PowerPoint 프레젠테이션

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

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

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

PowerPoint Presentation

Microsoft PowerPoint - Chapter 6.ppt

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

11장 포인터

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

비긴쿡-자바 00앞부속

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap03-변수와데이터형.pptx

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µå

OCW_C언어 기초

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

4장.문장

유니티 변수-함수.key

JAVA PROGRAMMING 실습 09. 예외처리

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

PowerPoint Presentation

Network Programming

PowerPoint Presentation

PowerPoint 프레젠테이션

슬라이드 1

교육자료

PowerPoint Presentation

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

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Cluster management software

Microsoft PowerPoint - chap10-함수의활용.pptx

TEST BANK & SOLUTION

Cluster management software

Microsoft PowerPoint - 04-UDP Programming.ppt

JVM 메모리구조

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

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

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

쉽게

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

C++ Programming

No Slide Title

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - chap04-연산자.pptx

제11장 프로세스와 쓰레드

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - lec2.ppt

No Slide Title

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

PowerPoint 프레젠테이션

PowerPoint Presentation

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

PowerPoint Presentation

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Transcription:

4 장. 객체의행동 학습목표 1. 인스턴스변수와메소드의상호관계에대해알아봅니다. 2. 매개변수와리턴값에대해알아봅니다. 3. 객체의동치에대해알아봅니다.

객체의행동 이렇게하면상태가확바뀌겠죠? 상태 인스턴스변수행동 메소드

객체의상태와행동 Song 인스턴스변수 ( 상태 ) 메소드 ( 행동 ) title artist settitle() setartist() play() 아는것 하는것

객체의상태와행동 void play() { soundplayer.playsound(title); Song t2 = new Song(); t2.setartist( Travis ); t2.settitle( Sing ); Song s3 = new Song(); s3.setartist( Sex Pistols ); s3.settitle( My Way ); Darkstar Grateful Dead Sing Travis Politik Coldplay My Way Sex Pistols My Way Sinatra t2.play(); t2 Song s3.play(); s3 Song

객체의상태와행동 class Dog { int size; String name; void bark() { if (size > 60) { System.out.println("Woof! Woof!"); else if (size > 14) { System.out.println("Ruff! Ruff!"); else { System.out.println("Yip! Yip!"); size Dog name bark() class DogTestDrive { public static void main(string[] args) { Dog one = new Dog(); one.size = 70; Dog two = new Dog(); two.size = 8; Dog three = new Dog(); three.size = 35; Bark Different. one.bark(); two.bark(); three.bark(); 코드를직접실행시켜봅시다.

매개변수 / 인자 자바에서도메소드에어떤값을전달할수있습니다. 매개변수 메소드에서사용하는것 인자 호출하는쪽에서전달하는것 메소드에서받은매개변수는그메소드에서선언한지역변수와똑같이간주됩니다. 메소드에매개변수가있으면반드시해당유형의값을전달해야만합니다.

매개변수 / 인자 1. bark 메소드호출 ( 인자로 3 을전달 ) 2. 3 이라는값을 Dog d = new Dog(); d.bark(3); 나타내는비트들이 bark 메소드로전달됨 void bark(int numofbarks) { while (numofbarks > 0) { System.out.println( ruff ); numofbarks = numofbarks 1; 3. 그비트들이 numofbarks 매개변수에들어감 4. numofbarks 매개변수를메소드코드내에서변수로사용

리턴값 메소드로부터값을받을수도있습니다. void go() { int givesecret() { return 42; 리턴유형은메소드를선언할때지정하며, 리턴유형이정해져있으면반드시그유형의값을리턴해야만합니다.

리턴값 int thesecret = life.givesecret(); int givesecret() { return 42;

두개이상의매개변수 메소드에두개이상의인자를전달할수도있습니다. 각인자는쉼표로구분합니다. 메소드에매개변수가있을때반드시인자를전달해야한다는원칙은여전히적용됩니다.

두개이상의매개변수 void go() { int foo = 7; void go() { int bar = 3; TestStuff t = new TestStuff(); t.taketwo(foo, bar); t.taketwo(12, 34); void taketwo(int x, int y) { int z = x + y; System.out.println( Total is + z);

값으로전달 (pass by value) 자바에서는값으로전달하는방식을사용합니다.

값으로전달 (pass by value) int x = 7; x void go(int z) { z int int x foo.go(x); x z x z int int void go(int z) { int void go(int z) { z = 0; int

바보같은질문은없습니다. 전달하려고하는인자가원시변수가아니고객체인경우에는어떻게되나요? 객체레퍼런스를인자로전달하는경우에도여전히값으로만전달됩니다. 중요한것은여기에서 값 이라는것이 객체 가아니라, 객체를참조하는레퍼런스라는점입니다. 따라서그레퍼런스의복사본이전달됩니다.

바보같은질문은없습니다. 메소드에서리턴값을여러개선언할수있나요? 값을두개이상리턴하는방법이있나요? 리턴값은한가지밖에선언할수없습니다. 하지만세개의 int 를리턴하고싶다면리턴유형을 int 배열로선언하면됩니다. 여러유형의값을리턴하는방법은조금더복잡한데, 나중에배우게될 ArrayList 라는것을사용하면됩니다.

바보같은질문은없습니다. 정확하게처음에선언한유형으로만리턴해야하나요? 자동으로해당유형으로변환되는것은그냥리턴해도됩니다. 예 : int 를리턴하겠다고선언한경우에 byte 를리턴해도됩니다. 하지만그렇지않은경우에는강제로캐스팅을해야합니다. 예 : return (int) (Math.random() * 10.0);

바보같은질문은없습니다. 메소드에서리턴한값으로반드시뭔가를해야하나요? 그냥무시하면안되나요? 자바에서는리턴값의사용여부에는전혀신경을쓰지않습니다. 따라서리턴값을꼭어떤변수에대입한다거나특정한용도로사용하지않아도됩니다. 예를들어리턴값은별로필요없고메소드로어떤작업을하기만되는경우에는리턴값은그냥무시하고메소드를호출하기만해도됩니다.

핵심정리 클래스에서는객체가하는것과객체가아는것을정의합니다. 인스턴스변수 ( 상태 ) 는객체가아는것입니다. 메소드 ( 행동 ) 는객체가하는것입니다. 메소드에서인스턴스변수를이용하여같은형식의객체가다른식으로행동하도록할수있습니다. 메소드에서매개변수를사용할수있습니다. 즉메소드에한개이상의값을전달할수있습니다.

핵심정리 전달하는값의개수와유형은반드시메소드를선언할때지정한것과같아야하며그순서도같아야합니다. 메소드안팎으로전달되는값은상황에따라자동으로더큰유형으로올라갈수있습니다. 더작은유형으로바꿀때는강제로캐스팅을해야합니다. 메소드에인자를전달할때는리터럴값 (2, c 등 ) 을사용할수도있고선언된매개변수유형의변수 ( 예를들어 int 변수 x) 를사용할수도있습니다.

핵심정리 메소드를선언할때는반드시리턴유형을지정해야합니다. 리턴유형을 void 로지정하면아무것도리턴하지않아도됩니다. 메소드를선언할때 void 가아닌리턴유형을지정했을때는반드시선언된리턴유형과호환가능한값을리턴해야합니다.

게터 (getter) 와세터 (setter) 게터 (getter) 인스턴스변수의값을알아내기위한메소드 일반적으로인스턴스변수의값을리턴함 getbrand(), getnumofpickups() 세터 (setter) 인스턴스변수의값을설정하기위한메소드 전달된값을확인하고인스턴스변수의값을설정함 setbrand(), setnumofpickups()

게터와세터 class ElectricGuitar { String brand; int numofpickups; boolean rockstarusesit; String getbrand() { return brand; void setbrand(string abrand) { brand = abrand; int getnumofpickups() { return numofpickups; void setnumofpickups(int num) { numofpickups = num; boolean getrockstarusesit() { return rockstarusesit; void setrockstarusesit(boolean yesorno) { rockstarusesit = yseorno;

캡슐화 (encapsulation) 데이터노출!!! 지금까지우리가만든프로그램에는데이터가완전히노출되어있다는심각한문제가있었습니다. 즉아무나인스턴스변수를마음대로보고건드릴수있었습니다. thecat.height = 27; thecat.height = 0; 이렇게 thecat 이라는객체의 height 변수의값을마음대로 0 으로바꿀수있으면안됩니다.

캡슐화 이런문제를어떻게해결할수있을까요? 세터메소드를쓰면됩니다. thecat.height = 0; public void setheight(int ht) { if (height > 9) { height = ht; 세터메소드를사용하면이렇게인스턴스변수의값이합당한지검사할수도있습니다.

캡슐화 그렇다면데이터를직접건드릴수없도록하려면어떻게해야할까요? 액세스변경자 (access modifier) 인스턴스변수 : private 으로선언 게터및세터메소드 : public 으로선언

캡슐화실습 GoodDog class GoodDog { private int size; public int getsize() { return size; size getsize() setsize() Bark() public void setsize(int s) { size = s; void bark() { 112 페이지에있는예제를직접실행시켜봅시다.

배열안에있는객체 1. Dog 배열변수선언 Dog[] pets; pets = new Dog[7]; Dog 배열객체 (Dog[]) pets Dog[]

배열안에있는객체 2. 두개의새로운 Dog 객체를만들고두개의배열원소대입 pets[0] = new Dog(); pets[1] = new Dog(); Dog 객체 Dog 객체 3. Dog 객체두개에대해메소드호출 pets[0].setsize(30); int x = pets[0].getsize(); pets[1].setsize(8); Dog 배열객체 (Dog[]) pets Dog[]

인스턴스변수초기화 인스턴스변수선언 int size; String name; 인스턴스변수선언및초기화 int size = 420; String name = Donny ;

인스턴스변수의기본값 class PoorDog { private int size; private String name; public int getsize() { return size; public String getname() { return name; public class PoorDogTestDrive { public static void main(string[] args) { PoorDog one = new PoorDog(); System.out.println( Dog size is + one.getsize()); System.out.println( Dog name is + one.getname()); 114 페이지에있는예제를직접실행시켜봅시다.

인스턴스변수의기본값 인스턴스변수에는항상기본값이들어갑니다. 각유형별기본값 정수 0 부동소수점수 0.0 부울 false 레퍼런스 null

인스턴스변수와지역변수 선언되는위치 인스턴스변수 클래스내에서 지역변수 메소드내에서 초기화 인스턴스변수 기본초기값이 // 나머지코드있음 지역변수 기본초기값이없음 class Horse { private double height = 15.2; private String breed; class AddThing { class Foo { public public int void add() go() { { int int total x; = a + b; return int z total; = x + 3;

바보같은질문은없습니다. 메소드매개변수는어떤가요? 지역변수와관련된규칙이매개변수에는어떻게적용되죠? 메소드매개변수는지역변수와거의똑같습니다. 메소드내에서선언되지요. 다만메소드를호출할때필요한인자를전달하지않으면컴파일과정에서에러가나기때문에매개변수가초기화되지않았다는에러메시지가뜨는일은없습니다.

변수비교 == 연산자 임의의유형의두변수를비교하기위한연산자 비트패턴을비교합니다. a int 원시값 두값을직접비교합니다. 레퍼런스 == 두변수가같은객체를참조하는지를비교합니다. b byte int Foo a = a 3; = new Foo(); byte Foo b = b 3; = new Foo(); if (a Foo == c b) = a; { // 참 if (a == b) { // 거짓 if (a == c) { // 참 if (b == c) { // 거짓

연필을깎으며 int calcarea(int height, int width) { return height * width; 메소드를제대로호출한부분은? int a = calcarea(7, 12); short c = 7; calcarea(c, 15); int d = calcarea(57); calcarea(2,3); long t = 42; int f = calcarea(t, 17); int g = calcarea(); calcarea(); byte h = calcarea(4, 20); int j = calcarea(2, 3, 5);