쉽게 풀어쓴 C 프로그래밍

Similar documents
<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Lect04.pptx

쉽게 풀어쓴 C 프로그래밍

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

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

Microsoft PowerPoint - 2강

PowerPoint Presentation

PowerPoint Presentation

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

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

PowerPoint Presentation

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밊

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Design Issues

PowerPoint 프레젠테이션

PowerPoint Presentation

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

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

PowerPoint Presentation

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

No Slide Title

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

쉽게

11장 포인터

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

JAVA PROGRAMMING 실습 09. 예외처리

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

JVM 메모리구조

JAVA PROGRAMMING 실습 07. 상속

PowerPoint Presentation

Microsoft PowerPoint - chap11

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - java2 [호환 모드]

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

쉽게 풀어쓴 C 프로그래밍

C# Programming Guide - Types

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

설계란 무엇인가?

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

Microsoft PowerPoint - C++ 5 .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µå

Blog

슬라이드 1

No Slide Title

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

설계란 무엇인가?

C++ Programming

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - 제11장 포인터(강의)

5장.key

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft Word - EEL2 Lab4.docx

PowerPoint 프레젠테이션

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

4장.문장

PowerPoint Template

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

09-interface.key

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - 제11장 포인터

PowerPoint Presentation

PowerPoint 프레젠테이션

슬라이드 1

TEST BANK & SOLUTION

02장.배열과 클래스

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밍

교육자료

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint 프레젠테이션

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

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

Transcription:

클래스와객체 I

이번시간에서학습할내용 클래스와객체 객체의일생 메소드 필드 UML 직접클래스를작성해봅시다.

클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다. 필드 (field) 는객체의속성을나타낸다. 메소드 (method) 는객체의동작을나타낸다.

클래스정의의예 class Car { // 필드정의 public int speed; // 속도 public int mileage; // 주행거리 public String color; // 색상 // 메소드정의 public void speedup() { // 속도증가메소드 speed += 10; } 필드정의! 메소드정의! public void speeddown() { // 속도감소메소드 speed -= 10; } } public String tostring() { // 객체의상태를문자열로반환하는메소드 return " 속도 : " + speed + " 주행거리 : " + mileage + " 색상 : " + color; }

테스트클래스 public class CarTest { public static void main(string[] args) { Car mycar = new Car(); // 첫번째객체생성 Car yourcar = new Car(); // 두번째객체생성 mycar.speed = 60; // 객체의필드변경 mycar.mileage = 0; // 객체의필드변경 mycar.color = "blue"; // 객체의필드변경 mycar.speedup(); System.out.println(myCar); // 객체의메소드호출 yourcar.mileage = 10; // 객체의필드변경 yourcar.speed = 120; // 객체의필드변경 yourcar.color = "white"; // 객체의필드변경 } } yourcar.speeddown(); System.out.println(yourCar); // 객체의메소드호출

속도 : 70 주행거리 : 0 색상 : blue 속도 : 110 주행거리 : 10 색상 : white

객체의일생 Car c = new Car(); c.speedup(); c = null;

객체의생성

주의 Car mycar; 위의문장으로객체가생성되는것은아님!!! 객체를가리키는참조값을담을수있는변수만생성됨.

참조변수와대입연산 Car car1 = new Car(); Car car2 = car1; // 대입연산의의미

객체의사용 객체를이용하여필드와메소드에접근할수있다.

객체의소멸 객체는참조가없어지면소멸!!

객체의소멸

메소드

매개변수

값에의한전달

매개변수가객체인경우 아주중요!!

메소드호출

메소드호출의예제 import java.util.*; class DiceGame { int diceface; int userguess; private void RollDice() { diceface = (int)(math.random() * 6) + 1; } private int getuserinput(string prompt) { System.out.println(prompt); Scanner s = new Scanner(System.in); return s.nextint(); }

메소드호출의예제 private void checkuserguess() { if( diceface == userguess ) System.out.println(" 맞았습니다 "); else System.out.println(" 틀렸습니다 "); } public void startplaying() { int userguess = getuserinput(" 예상값을입력하시오 : "); RollDice(); checkuserguess(); } } public class DiceGameTest { public static void main(string[] args) { DiceGame game = new DiceGame(); game.startplaying(); } }

예상값을입력하시오 : 3 틀렸습니다 결과화면

중복메소드 메소드오버라이딩 (method overriding) 메소드호출시매개변수를보고일치하는메소드가호출된다. 만약 square(3.14) 와같이호출되면컴파일러는매개변수의개수, 타입, 순서등을봐서두번째메소드를호출한다.

중복메소드예제 class Car { // 필드선언 private int speed; // 속도 // 중복메소드 : 정수버전 public void setspeed(int s) { speed = s; System.out.println(" 정수버전호출 "); } } // 중복메소드 : 실수버전 public void setspeed(double s) { speed = (int)s; System.out.println(" 실수버전호출 "); }

중복메소드예제 public class CarTest1 { public static void main(string[] args) { Car mycar = new Car(); // 첫번째객체생성 } } mycar.setspeed(100); // 정수버전메소드호출 mycar.setspeed(79.2); // 실수버전메소드호출 정수버전호출실수버전호출

자바에서의변수의종류 필드 (field) 또는인스턴스변수 : 클래스안에서선언되는멤버변수 지역변수 (local variable): 메소드나블록안에서선언되는변수 필드 Class Car { int speed; void speedup(int s){ int limit=100; } } 지역변수

필드의선언

필드의사용범위

설정자와접근자 설정자 (mutator) 필드의값을설정하는메소드 setxxx() 형식접근자 (accessor) 필드의값을반환하는메소드 getxxx() 형식

설정자와접근자의예

설정자와접근자의사용

설정자와접근자는왜사용하는가? 설정자에서매개변수를통하여잘못된값이넘어오는경우, 이를사전에차단할수있다. 필요할때마다필드값을계산하여반환할수있다. 접근자만을제공하면자동적으로읽기만가능한필드를만들수있다.

필드의초기화 생성자를사용하는방법 -> 다음장에서학습

주의

변수와변수의비교 변수 1 == 변수 2 의의미 참조형변수의경우, 객체의내용이같다는의미가아니다.

UML UML(Unified Modeling Language)

클래스와클래스의관계

Television -ison -volume -channel +setchannel() +getchannel() +setvolume() +getvolume() +turnon() +turnoff() +tostring()

예제

예제 class DeskLamp { // 인스턴스변수정의 private boolean ison; // 켜짐이나꺼짐과같은램프의상태 // 메소드정의 public void turnon() // 램프를켠다. { ison = true; } public void turnoff() // 램프를끈다. { ison = false; } } public String tostring() { return " 현재상태는 " + (ison == true? " 켜짐 " : " 꺼짐 "); }

예제 public class DeskLampTest { public static void main(string[] args) { // 역시객체를생성하려면 new 예약어를사용한다. DeskLamp mylamp = new DeskLamp(); // 객체의메소드를호출하려면도트연산자인. 을사용한다. mylamp.turnon(); System.out.println(myLamp); mylamp.turnoff(); System.out.println(myLamp); } } 현재상태는켜짐현재상태는꺼짐

Q & A

클래스와객체 II

이번시간에서학습할내용 생성자 정적변수 정적메소드 접근제어 this 클래스간의관계 객체가생성될때초기화를담당하는생성자에대하여살펴봅니다.

생성자 생성자 (contructor): 객체가생성될때에필드에게초기값을제공하고필요한초기화절차를실행하는메소드

생성자의예제

생성자의예제

디폴트생성자 만약클래스작성시에생성자를하나도만들지않는경우에는자동적으로메소드의몸체부분이비어있는생성자가만들어진다.

생성자에서메소드호출

예제 : Date 클래스

예제 : Date 클래스

Time 클래스

Circle 클래스 점을나타내는 Point 클래스를먼저정의

Circle 클래스

Circle 클래스

정적변수 인스턴스변수 (instance variable): 객체마다하나씩있는변수 정적변수 (static variable): 모든객체를통틀어서하나만있는변수

정적변수의예

정적메소드 정적메소드 (static method): 객체를생성하지않고사용할수있는메소드 ( 예 ) Math 클래스에들어있는각종수학메소드들 double value = Math.sqrt(9.0);

정적메소드의예

정적메소드의예

상수 공간을절약하기위하여정적변수로선언된다.

중간점검문제 1. 정적변수는어떤경우에사용하면좋은가? 2. 정적변수나정적메소드를사용할때, 클래스이름을통하여접근하는이유는무엇인가? 3. main() 안에서인스턴스메소드를호출할수없는이유는무엇인가?

접근제어 접근제어 (access control): 다른클래스가특정한필드나메소드에접근하는것을제어하는것

접근제어의종류 클래스수준에서의접근제어 멤버수준에서의접근제어

클래스수준에서의접근제어 public: 다른모든클래스가사용할수있는공용클래스 package: 수식자가없으면 : 같은패키지안에있는클래스들만이사용 패키지 (package) 는관련된클래스를모아둔것 public class myclass { } class myclass { }

멤버수준에서의접근제어

this 자기자신을참조하는키워드 this.member = 10; 생성자를호출할때도사용된다. this(10, 20);

중간점검문제 1. this 의주된용도는무엇인가? 2. this() 와같이표기하면무엇을의미하는가??

클래스와클래스간의관계 사용 (use): 하나의클래스가다른클래스를사용한다. 집합 (has-a): 하나의클래스가다른클래스를포함한다. 상속 (is-a): 하나의클래스가다른클래스를상속한다.

사용관계 클래스 A 의메소드에서클래스 B 의메소드들을호출한다.

집합관계 클래스 A 안에클래스 B 가포함된다.

Q & A

배열

이번시간에서학습할내용 배열의선언 배열의사용 배열과메소드 객체들의배열 2 차원배열 정렬과탐색 자바에서배열은객체로취급됩니다.

배열의개념 배열 (array): 같은타입의변수들의모임

배열을만드는절차 1. 먼저배열참조변수부터선언 int[] numbers; // 배열참조변수선언 2. 배열을 new 연산자를사용하여서생성 numbers = new int[6]; // 배열객체생성

배열예제

또다른배열선언방법 int[] values;// 1 자바방식 int values[];// 2 C 언어유사방식

중간점검문제 1. int 형의 100 개의원소를가지고 array 로참조되는배열을생성하는문장을써라. 2. 10 개의원소를가지는배열에서올바른인덱스값의범위는? 3. 만약배열의인덱스가올바르지않으면어떻게되는가? 4. { 1.2, 3.1, 6.7 } 의값으로초기화되는 double 형배열을생성하는문장을작성하시오.

배열의사용

배열의사용

배열의크기 for(int i=0; i < numbers.length; i++) numbers[i] = (int)(math.random()*1000); 배열의크기는 length 라는필드로알수있습니다.

for-each 루프

예제

사용자가배열의크기를지정

중간점검문제 1. int 형정수를저장하고있는배열 array 의모든원소의값을두배로만드는반복루프를작성하라. 2. 사용자에게배열의크기를받아서 double 형배열을생성하는문장을작성하라. 3. for-each 와전통적인 for 루프를비교하라. 4. 하나의배열을다른배열로복사하는반복루프를작성하라.

배열을메소드의매개변수로전달

예제

예제

메소드의반환값으로배열반환

중간점검문제 1. 배열이메소드로전달되면어떤값이전달되는것인가? 2. 배열원소가전달되는경우와배열전체가전달되는경우를비교하여차이점을설명하라. 3. int 형배열을전달받아서배열의각원소를하나증가시키는메소드를작성하시오.

객체들의배열 객체들의배열에서는객체에대한참조값만을저장 Car[] cars = new Car[5];

객체들의배열 각원소에들어가는객체는따로생성하여야한다. cars[0] = new Cars(); cars[1] = new Cars();

예제

예제

중간점검문제 1. 은행계좌를나타내는클래스 BankAccount 를가정하자. BankAccount 는잔액만을가지고있다. 3 개의원소를가지는 BankAccount 의배열을생성하고각배열원소를 BankAccount 객체로초기화하라. 2. 객체들의배열을메소드로전달하면무엇이전달되는가?

2 차원배열

2 차원배열의초기화와크기

2 차원배열매개변수

배열의응용 : 정렬 선택정렬 : 최소값을정렬되지않은첫번째원소와교환

선택정렬코드

배열의응용 : 이진탐색

이진탐색

이진탐색

중간점검문제 1. 선택정렬에서가장작은값은몇번이나교환되는가? 2. 1024 개의원소가있는배열을이진탐색할때최대몇번의비교가필요한가? 3. 순차탐색과이진탐색을비교하라. 순차탐색이란배열의첫번째원소부터순차적으로비교하여탐색하는알고리즘이다.

Q & A

상속

이번시간에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다.

상속이란? 상속의개념은현실세계에도존재한다.

상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성 상속은이미작성된검증된소프트웨어를재사용 신뢰성있는소프트웨어를손쉽게개발, 유지보수 코드의중복을줄일수있다.

상속 class Car { int speed; } class SportsCar extends Car { int turbo; } 상속한다는의미

수퍼클래스는서브클래스를포함

상속의예

상속의계층구조

상속은중복을줄인다. 상속

중간점검문제 1. 사자, 호랑이, 개, 고양이, 여우, 악어, 도마뱀들을상속계층구조를이용하여표현하여보자.

상속의구체적인예

상속의예

상속의사용 서브클래스는수퍼클래스의필드와메소드를마치자기것처럼사용할수있다.

메소드재정의 메소드재정의 (method overriding): 서브클래스가필요에따라상속된메소드를다시정의하는것

메소드재정의의예 Animal

메소드를재정의하려면 메소드의이름, 반환형, 매개변수의개수와데이터타입이일치하여야한다. public class Animal { public void makesound() { } }; 오버라이드가아님 public class Dog extends Animal { public int makesound() { } };

중복정의와재정의

super 키워드 수퍼클래스객체를가리킨다.

접근지정자

접근지정자의예 Manager Employee

접근지정자의예 Manager Employee

상속과생성자

묵시적인호출

Object 클래스

Object 의메소드

equals() 메소드 Object 의 equals() 를재정의

equals() 메소드 재정의된 equals() 호출

tostring() Object 클래스의 tostring() 메소드는객체의문자열표현을반환 public class Car { private String model; public Car(String model) { this.model = model; } public String tostring() { return 모델 : + model; } } Object 의 tostring() 를재정의

종단클래스와종단메소드 키워드 final 을붙이면상속이나재정의할수없다. 재정의할수없도록한다.

Q & A

인터페이스와다형성

이번시간에서학습할내용 추상클래스 인터페이스 다형성 내부클래스 무명클래스 인터페이스는클래스와클래스를연결하는기법입니다.

추상클래스 추상클래스 (abstract class): 몸체가구현되지않은메소드를가지고있는클래스 추상클래스는추상적인개념을표현하는데적당하다.

추상클래스의예

추상클래스의예

중간점검문제 1. 추상클래스의주된용도는무엇인가? 2. 추상클래스는일반메소드를포함할수있는가? 3. 추상클래스를상속받으면반드시추상메소드를구현하여야하는가?

인터페이스 인터페이스 (interface): 추상메소드들로만이루어진다.

인터페이스의필요성 인터페이스는객체와객체사이의상호작용을위한인터페이스이다.

인터페이스의예 홈네트워킹예제

홈네트워킹예제 인터페이스를구현

홈네트워킹예제 Television 객체를생성하여메소드들을호출

인터페이스와타입 인터페이스는하나의타입으로간주된다. 인터페이스로참조변수를만들수있다.

다중상속 다중상속이란여러개의수퍼클래스로부터상속하는것 자바에서는다중상속을지원하지않는다. 다중상속에는어려운문제가발생한다.

다중상속 인터페이스를이용하면다중상속의효과를낼수있다.

상수공유 상수를공유하려면인터페이스를구현하면된다.

중간점검문제 1. 인터페이스로참조변수를정의할수있는가? 2. 인터페이스를이용하여서상수를공유하는방법에대해서설명하라. 3. 자바에서는어떻게다중상속을도입하지않고서도다중상속의효과를내는가?

다형성이란?

상속과객체참조 Shape 타입변수로 Rectangle 객체를참조하니틀린거같지만올바른문장!! Shape s = new Rectangle();// OK!

왜그럴까? 서브클래스객체는수퍼클래스객체를포함하고있기때문이다.

동적바인딩 Shape 의 draw() 가호출되는것이아니라 Rectangle 의 draw() 가호출된다. s 의타입은 Shape 이지만 s 가실제로가리키고있는객체의타입이 Rectangle 이기때문이다.

예제

예제

예제 어떤 draw() 가호출되는가?

다형성의장점 만약새로운도형클래스를작성하여추가한다고해보자. drawall() 메소드는수정할필요가없다.

객체의실제타입을알아내는방법 instanceof 연산자를사용한다.

메소드의매개변수 메소드의매개변수로수퍼클래스참조변수를이용한다. -> 다형성을이용하는전형적인방법

예제

형변환 Shape s = new Rectangle(); s 를통하여 Rectangle 클래스의필드와메소드를사용하고자할때는어떻게하여야하는가? ((Rectangle) s).setwidth(100);

중간점검문제 1. 수퍼클래스참조변수는서브클래스객체를참조할수있는가? 역은성립하는가? 2. instanceof 연산자가하는연산은무엇인가? 3. 다형성은어떤경우에유용한가? 4. 어떤타입의객체라도받을수도있게하려면메소드의매개변수를어떤타입으로정의하는것이좋은가?

내부클래스 내부클래스 (inner class): 클래스안에다른클래스를정의

내부클래스의사용목적 특정멤버변수를 private 로유지하면서자유롭게사용할수있다. 특정한곳에서만사용되는클래스들을모을수있다. 보다읽기쉽고유지보수가쉬운코드가된다.

예제

중간점검문제 1. 내부클래스와일반클래스의차이점은무엇인가? 2. 내부클래스는정의된클래스의전용필드에접근할수있는가?

무명클래스 무명클래스 (anonymous class): 클래스몸체는정의되지만이름이없는클래스 부모클래스이름이나인터페이스이름

무명클래스의예

중간점검문제 1. 무명클래스작성시에 new 다음에는적어야하는것은? 2. 무명클래스를사용하는경우의이점은무엇인가? 3. Object 클래스를상속받는무명클래스를하나정의하여보자.

Q & A