Presentation is loading. Please wait.

Presentation is loading. Please wait.

어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드.

Similar presentations


Presentation on theme: "어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드."— Presentation transcript:

1 어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드

2 실제 세계는 객체로 이루어진다.

3 객체와 메시지

4 객체 지향이란? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법

5 객체

6 객체란? 객체(Object)는 상태와 동작을 가지고 있다. 객체의 상태(state)는 객체의 특징값(속성)이다.
객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작

7 필드와 메소드

8 중간 점검 문제

9 메시지 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체와 통신하고 서로 상호 작용한다.

10 절차 지향과 객체 지향 절차 지향 프로그래밍(procedural programming): 문제를 해결하는 절차를 중요하게 생각하는 방법 객체 지향 프로그래밍(Object-Oriented Programming): 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법이다.

11 객체 지향 방법 객체 지향으로 소프트웨어를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다.

12 중간 점검 문제 객체들은 ________전달을 통해서 서로 간에 상호 작용을 한다.
자동차 객체에서 생각할 수 있는 메시지와 매개 변수에 대하여 나열하여 보라.

13 절차 지향과 객체 지향

14 중간 점검 문제 객체 지향 프로그래밍은 ________들을 조합하여서 프로그램을 작성하는 기법이다.
2. 객체 지향 프로그래밍의 시작은 __________년대에 개발된 ________언어이다.

15 객체 지향의 3대 특징 캡슐화 상속 다형성

16 캡슐화 캡슐화(encapsulation): 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것

17

18 캡슐화와 정보 은닉 정보 은닉(information hiding)은 객체를 캡슐로 싸서 객체의 내부를 보호하는 하는 것이다. 즉 객체의 실제 구현 내용을 외부에 감추는 것이다.

19 캡슐화와 정보 은닉

20 업그레이드가 쉽다. 라이브러리가 업그레이드되면 쉽게 바꿀 수 있다. 정보 은닉이 가능하기 때문에 업그레이드 가능

21 상속 상속(inheritance): 이미 작성된 클래스(부모 클래스)를 이어받아서 새로운 클래스(자식 클래스)를 생성하는 기법
기존의 코드를 재활용하기 위한 기법

22 다형성 하나의 이름(방법)으로 많은 상황에 대처하는 기법
개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해진다

23 추상화

24 객체 지향의 장점 신뢰성있는 소프트웨어를 쉽게 작성할 수 있다. 코드를 재사용하기 쉽다. 업그레이드가 쉽다. 디버깅이 쉽다.

25 쉬운 디버깅 예를 들어서 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정해보자. -> 하나의 변수를 1000개의 함수에서 변경할 수 있다. 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자. -> 하나의 변수를 10개의 메소드에서 변경할 수 있다. 어떤 방법이 디버깅이 쉬울까?

26 중간 점검 문제 1. 자바에서 코드 재사용이 쉬운 이유는 관련된 ________와 ___________이 하나의 덩어리로 묶여 있기 때문이다. 2. 정보 은닉이란 ________을 외부로부터 보호하는 것이다. 3. 정보를 은닉하면 발생하는 장점은 무엇인가?

27 클래스 클래스(class): 객체를 만드는 설계도
클래스로부터 만들어지는 각각의 객체를 특별히 그 클래스의 인스턴스(instance)라고도 한다.

28 클래스의 구조

29 클래스의 예: 박스 텔레비젼

30 예제: 객체 생성하기

31

32 변수의 종류 기초 변수(primitive variable)에는 실제 데이터값이 저장된다.
참조 변수(reference variable)는 참조 변수는 객체를 참조할 때 사용되는 변수로서 여기에는 객체의 참조값이 저장된다.

33 객체의 필드와 메소드 사용 도트(.) 연산자 사용!

34 여러 개의 객체 생성하기

35

36 실행 결과

37 메소드 메소드는 입력을 받아서 처리를 하고 결과를 반환하는 가상적인 상자와 같다.

38 메소드의 구조

39 예제 public class Television { int channel; // 채널 번호 int volume; // 볼륨
boolean onOff; // 전원 상태 void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); }

40 예제 public class TelevisionTest {
public static void main(String[] args) { Television myTv = new Television(); myTv.channel = 7; myTv.volume = 9; myTv.onOff = true; myTv.print(); Television yourTv = new Television(); yourTv.channel = 9; yourTv.volume = 12; yourTv.onOff = true; yourTv.print(); } 채널은 7이고 볼륨은 10입니다. 채널은 9이고 볼륨은 12입니다.

41 예제 설명

42 메소드의 종료 return 을 사용한다. void myMethod() {
for( int i=0; i<10; i++ ) { if( i == 7 ) return; }

43 메소드의 반환값

44 예제 public class T elevision { int channel; // 채널 번호 int volume; // 볼륨
boolean onOff; // 전원 상태 void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); } int getChannel() { return channel;

45 예제 public class TelevisionTest {
public static void main(String[] args) { Television myTv = new Television(); myTv.channel = 7; myTv.volume = 9; myTv.onOff = true; int ch = myTv.getChannel(); System.out.println("현재 채널은 " + ch + "입니다."); } 현재 채널은 7입니다.

46 예제 설명

47 인수와 매개 변수 메소드 호출시 전달하는 값을 인수(argument)
메소드에서 값을 받을 때 사용하는 변수를 매개 변수(parameter)

48 예제 public class Math { int add(int x, int y) { return x + y; }
public class MathTest { public static void main(String[] args) { int sum; Math obj = new Math(); sum = obj.add(2, 3); System.out.println("2와 3의 합은 " + sum); sum = obj.add(7, 8); System.out.println("7와 8의 합은 " + sum); } 2와 3의 합은 5 7와 8의 합은 15

49 예제 설명

50 예제 public class Television { int channel; // 채널 번호 int volume; // 볼륨
boolean onOff; // 전원 상태 void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); } int getChannel() { return channel; void setChannel(int ch) { channel = ch;

51 예제 public class TelevisionTest {
public static void main(String[] args) { Television myTv = new Television(); myTv.setChannel(11); int ch = myTv.getChannel(); System.out.println("현재 채널은 " + ch + "입니다."); } 현재 채널은 11입니다.

52 예제 설명

53 Lab: 자동차 클래스 작성

54 예제 public class Car { String color; // 색상 int speed; // 속도
int gear; // 기어 @Override public String toString() { return "Car [color=" + color + ", speed=" + speed + ", gear=" + gear + "]"; } void changeGear(int g) { gear = g; void speedUp() { speed = speed + 10; void speedDown() { speed = speed - 10;

55 예제 public class CarTest { public static void main(String[] args) {
Car myCar = new Car(); myCar.changeGear(1); myCar.speedUp(); System.out.println(myCar); } Car [color=null, speed=10, gear=1]

56 메소드 오버로딩 자바에서는 같은 이름의 메소드가 여러 개 존재할 수 있다. 이것을 메소드 오버로딩(method overloading)이라고 한다.

57 예제 public class MyMath { // 정수값을 제곱하는 메소드 int square(int i) {
return i * i; } // 실수값을 제곱하는 메소드 double square(double i) {

58 예제 public class MyMathTest { public static void main(String args[]) {
MyMath obj = new MyMath(); System.out.println(obj.square(10)); System.out.println(obj.square(3.14)); } 100 9.8596

59 예제 설명

60 UML UML(Unified Modeling Language): UML은 클래스만을 그리는 도구는 아니고 객체지향설계 시에 사용되는 일반적인 모델링 언어라고 할 수 있다. UML을 사용하면 소프트웨어를 본격적으로 작성하기 전에 구현하고자 하는 시스템을 시각화하여 검토할 수 있다.

61 가시성 표시자 필드나 메소드의 이름 앞에는 가시성 표시자(visibility indicator)가 올 수 있다

62 클래스 간의 관계

63 UML의 예 Car 예제를 UML로 그려보면 다음과 같다.

64 Television 클래스의 UML

65 String 클래스 문자열은 자바에서 기초 자료형이 아니다.

66 String 클래스의 객체 생성 String s = new String("Hello World!"); // 선언과 동시에 초기화

67 String 클래스의 메소드

68 String 클래스 사용하기 public class StringTest {
   public static void main (String[] args)    {       String proverb = "A barking dog"; // new 연산자 생략       String s1, s2, s3, s4; // 참조 변수로서 메소드에서 반환된 참조값을 받는다.       System.out.println ("문자열의 길이 =" + proverb.length());       s1 = proverb.concat (" never Bites!"); // 문자열 결합       s2 = proverb.replace ('B', 'b'); // 문자 교환       s3 = proverb.substring (2, 5); // 부분 문자열 추출       s4 = proverb.toUpperCase(); // 대문자로 변환       System.out.println(s1);       System.out.println(s2);       System.out.println(s3);       System.out.println(s4);    } }

69 예제 문자열의 길이 =13 A barking dog never Bites! A barking dog bar

70 문자열의 결합 + 연산자를 사용한다. 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"

71 수치값-> 문자열 자바에서는 문자열과 기초 자료형 변수를 결합하게 되면 자동적으로 기초 자료형을 문자열로 변환한다.
int x = 20; System.out.println("결과값은 " + x); // ”결과값은 20” 이 출력된다. String answer = "The answer is " + 100; // “The answer is 100"

72 문자열->수치값 즉 문자열 “123”을 숫자 123으로 변환하려면 어떻게 하여야 하는가? 자바에는 이것을 전문으로 해주는 클래스가 있다. 바로 랩퍼 클래스인 Integer 클래스이다.

73 예제 문자열을 기초 자료형으로 변환하려면 각 랩퍼 클래스의 parseXXX() 메소드를 사용한다.
int i = Integer.parseInt("123"); // 변수 i에 정수 123이 저장된다. double d = Double.parseDouble(" "); // 변수 d에 실수 가 저장된다.

74 LAB: 사용자에게 문자열을 받아서 문자열이 “www”로 시작하는지를 검사하는 프로그램을 작성해 보자. 사용자가 “quit”를 입력하면 프로그램을 종료한다. 문자열을 입력하세요> 은 'www'로 시작합니다. 문자열을 입력하세요> naver.com naver.com 은 'www'로 시작하지 않습니다. 문자열을 입력하세요> quit

75 String 클래스 사용하기 import java.util.Scanner; public class StringTest {
public static void main(String a[]) { String str; Scanner sc = new Scanner(System.in); while (true) { System.out.print("문자열을 입력하세요> "); str = sc.next(); if (str.equals("quit") == true) break; if (str.matches("^www\\.(.+)")) { System.out.println(str + " 은 'www'로 시작합니다."); } else { System.out.println(str + " 은 'www'로 시작하지 않습니다."); }

76 Q & A


Download ppt "어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드."

Similar presentations


Ads by Google