객체지향프로그래밍 클래스, 객체, 메소드 손시운 ssw5176@kangwon.ac.kr
실제세계는객체로이루어진다. 2
객체와메시지 3
객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 4
객체 5
객체란? 객체 (Object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작 6
필드와메소드 7
중간점검문제 8
메시지 소프트웨어객체는메시지 (message) 를통해다른소프트웨어객체와통신 하고서로상호작용한다. 9
절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를 중요하게생각하는방법 객체지향프로그래밍 (Object-Oriented Programming): 데이터와절차를하 나의덩어리 ( 객체 ) 로묶어서생각하는방법이다. 10
절차지향과객체지향 11
객체지향방법 객체지향으로소프트웨어를작성하는것은컴퓨터하드웨어부품을구입하 여서컴퓨터를조립하는것과비슷하다. 12
중간점검문제 객체들은 전달을통해서서로간에상호작용을한다. 자동차객체에서생각할수있는메시지와매개변수에대하여나열하여보 라. 13
객체지향의 3 대특징 캡슐화 상속 다형성 14
캡슐화 캡슐화 (encapsulation): 관련된데이터와알고리즘 ( 코드 ) 이하나의묶음으로 정리되어있는것 15
캡슐화와정보은닉 정보은닉 (information hiding) 은객체를캡슐로싸서객체의내부를보호하 는하는것이다. 즉객체의실제구현내용을외부에감추는것이다. 16
캡슐화와정보은닉 17
업그레이드가쉽다. 라이브러리가업그레이드되면쉽게바꿀수있다. 정보은닉이가능하기때문에업그레이드가능 18
상속 상속 (inheritance): 이미작성된클래스 ( 부모클래스 ) 를이어받아서새로운클 래스 ( 자식클래스 ) 를생성하는기법 기존의코드를재활용하기위한기법 19
다형성 하나의이름 ( 방법 ) 으로많은상황에대처하는기법 개념적으로동일한작업을하는멤버함수들에똑같은이름을부여할수있 으므로코드가더간단해진다 20
추상화 21
객체지향의장점 신뢰성있는소프트웨어를쉽게작성할수있다. 코드를재사용하기쉽다. 업그레이드가쉽다. 디버깅이쉽다. 22
중간점검문제 자바에서코드재사용이쉬운이유는관련된 와 이하나의덩어리로묶여있기때문이다. 정보은닉이란 을외부로부터보호하는것이다. 정보를은닉하면발생하는장점은무엇인가? 23
클래스 클래스 (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스 (instance) 라고도한다. 24
클래스의구조 25
클래스의예 텔레비젼 26
예제 : 객체생성하기 27
28
변수의종류 기초변수 (primitive variable) 에는실제데이터값이저장된다. 참조변수 (reference variable) 는참조변수는객체를참조할때사용되는변 수로서여기에는객체의참조값이저장된다. 29
객체의필드와메소드사용 도트 (.) 연산자사용! 30
여러개의객체생성하기 31
32
실행결과 33
메소드 메소드는입력을받아서처리를하고결과를반환하는가상적인상자와같 다. 34
메소드의구조 35
예제 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean onoff; // 전원상태 void print() { System.out.println(" 채널은 " + channel + " 이고볼륨은 " + volume + " 입니다."); 36
예제 public class TelevisionTest { public static void main(string[] args) { Television mytv = new Television(); mytv.channel = 7; mytv.volume = 10; mytv.onoff = true; mytv.print(); Television yourtv = new Television(); yourtv.channel = 9; yourtv.volume = 12; yourtv.onoff = true; yourtv.print(); 채널은 7 이고볼륨은 10 입니다. 채널은 9 이고볼륨은 12 입니다. 37
예제설명 38
메소드의종료 return 을사용한다. void mymethod() { for( int i=0; i<10; i++ ) { if( i == 7 ) return; 39
메소드의반환값 40
예제 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean onoff; // 전원상태 void print() { System.out.println(" 채널은 " + channel + " 이고볼륨은 " + volume + " 입니다."); int getchannel() { return channel; 41
예제 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 입니다. 42
예제설명 43
인수와매개변수 메소드호출시전달하는값을인수 (argument) 메소드에서값을받을때사용하는변수를매개변수 (parameter) 44
예제 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 45
예제설명 46
예제 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; 47
예제 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 입니다. 48
예제설명 49
Lab: 자동차클래스작성 50
예제 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; 51
예제 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] 52
메소드오버로딩 자바에서는같은이름의메소드가여러개존재할수있다. 이것을메소드 오버로딩 (method overloading) 이라고한다. 53
예제 public class MyMath { // 정수값을제곱하는메소드 int square(int i) { return i * i; // 실수값을제곱하는메소드 double square(double i) { return i * i; 54
예제 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 55
예제설명 56
String 클래스 문자열은자바에서기초자료형이아니다. 그러나문자열을저장하고처리하는 String 이라고하는클래스가존재한다 57
String 클래스의객체생성 String s = new String("Hello World!"); // 선언과동시에초기화 58
String 클래스의메소드 59
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); 문자열의길이 =13 A barking dog never Bites! A barking dog bar A BARKING DOG 60
문자열의결합 + 연산자를사용한다. 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" 61
수치값 -> 문자열 자바에서는문자열과기초자료형변수를결합하게되면자동적으로기초 자료형을문자열로변환한다. int x = 20; System.out.println(" 결과값은 " + x); // 결과값은 20 이출력된다. String answer = "The answer is " + 100; // The answer is 100" 62
문자열 -> 수치값 즉문자열 123 을숫자 123 으로변환하려면어떻게하여야하는가? 자바에 는이것을전문으로해주는클래스가있다. 바로랩퍼클래스인 Integer 클 래스이다. 63
예제 문자열을기초자료형으로변환하려면각랩퍼클래스의 parsexxx() 메소드 를사용한다. int i = Integer.parseInt("123"); // 변수 i 에정수 123 이저장된다. double d = Double.parseDouble("3.141592"); // 변수 d 에실수 3.141592 가저장된다. 64
LAB: 사용자에게문자열을받아서문자열이 www 로시작하는지를검사하는프 로그램을작성해보자. 사용자가 quit 를입력하면프로그램을종료한다. 문자열을입력하세요 > www.google.com www.google.com 은 'www' 로시작합니다. 문자열을입력하세요 > naver.com naver.com 은 'www' 로시작하지않습니다. 문자열을입력하세요 > quit 65
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' 로시작하지않습니다."); 66