OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3
클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스 (instance) 라고도한다. 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다. 필드 (field) 는객체의속성을나타낸다. 메소드 (method) 는객체의동작을나타낸다. 5 6 자동차클래스 클래스정의의예 class Car { 9800km // 필드정의 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; 7 8
테스트클래스 File 의구성 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"; // 객체의필드변경 Class Car File : CarTest.java mycar.speedup(); System.out.println(myCar); // 객체의메소드호출 yourcar.mileage = 10; // 객체의필드변경 yourcar.speed = 120; // 객체의필드변경 yourcar.color = "white"; // 객체의필드변경 Class CarTest yourcar.speeddown(); // 객체의메소드호출 System.out.println(yourCar); 9 10 기초변수와참조변수 기초변수와참조변수의비교 11 12
객체 (object) 는? 객체 속성 ( 상태 ) 과동작을가지고있다. 자동차가객체라면클래스는설계도 속도 :70 주행거리 :0 색상 :blue 속도 : 110 주행거리 : 10 색상 : white 13 14 객체의일생 객체의생성 Car c = new Car(); c.speedup(); c = null; 15 16
주의 참조변수와대입연산 Car mycar; Car 1 car1 = new Car(); 위의문장으로객체가생성되는것은아님!!! 객체를가리키는참조값을담을수있는변수만생성됨. Car car2 = car1; // 대입연산의의미 17 18 객체의사용 객체의소멸 객체를이용하여필드와메소드에접근할수있다. 객체는참조가없어지면소멸!! 19 20
객체의소멸 메소드 객체는메시지 (message) 를통해다른객체와통신하고서로상호작용한다. 21 22 메소드 매개변수 객체는메시지 (message) 를통해다른객체와통신하고서로상호작용한다. 23 24
값에의한전달 매개변수가객체인경우 아주중요!! 25 26 메소드호출 메소드호출의예제 import java.util. *; classdicegame { 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(); 27 28
메소드호출의예제 결과화면 private void checkuserguess() { if( diceface == userguess ) System.out.println(" 맞았습니다 "); else System.out.println(" 틀렸습니다 "); public void startplaying() { int userguess = getuserinput(" 예상값을입력하시오 : "); RollDice(); checkuserguess(); 예상값을입력하시오 : 3 틀렸습니다 public class DiceGameTest { public static void main(string[] args) { DiceGame game = new DiceGame(); game.startplaying(); 29 30 중복메소드-overloading 중복메소드예제 같은이름의메소드가여러개존재할수있다. 메소드오버라이딩 (method overriding) class Car { // 필드선언 private int speed; // 속도 시그너처 (signature) 메소드호출시매개변수를보고일치하는메소드가호출된다. 만약 square(3.14) 와같이호출되면컴파일러는매개변수의개수, 타입, 순서등을봐서두번째메소드를호출한다. // 중복메소드 : 정수버전 public void setspeed(int s) { speed = s; System.out.println(" 정수버전호출 "); // 중복메소드 : 실수버전 public void setspeed(double s) { speed = (int)s; System.out.println(" 실수버전호출 "); 31 32
중복메소드예제 자바에서의변수의종류 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; d 지역변수 void speedup(int s){ int limit=100; 지역변수 : 선언된블록안에서만사용가능. 매개변수 : 선언된메소드안에서만사용가능. 필드 : 정의된위치와상관없이클래스안에서는어느곳에서도사용가능. 33 34 필드의선언 필드의사용범위 지역변수 : 선언된블록안에서만사용가능. 매개변수 : 선언된메소드안에서만사용가능. 필드 : 정의된위치와상관없이클래스안에서는어느곳에서도사용가능. 35 36
설정자 (mutator) 와접근자 (accessor) 설정자와접근자의예 설정자 (mutator) t : setter 필드의값을설정하는메소드 setxxx() 형식 접근자 (accessor) : getter 필드의값을반환하는메소드 getxxx() 형식 37 38 설정자와접근자의사용 설정자와접근자는왜사용하는가? 설정자에서매개변수를통하여잘못된값이넘어오는경우, 이를사전에차단할수있다. 필요할때마다필드값을계산하여반환할수있다. 접근자만을제공하면자동적으로읽기만가능한필드를만들수있다. 39 40
필드의초기화 주의 생성자를사용하는방법 -> 다음장에서학습 41 42 변수와변수의비교 UML(Unified Modeling Language) g 변수 1 == 변수 2 의의미 클래스들간의관계를그리기위한클래스다이어그램 ( class l diagram) g 가장대표적인클래스다이어그램표기법 : UML(Unified Modeling Language) Class name 변수들 메소드 참조형변수의경우, 객체의내용이같다는의미가아니다. == : not work equals() method 사용 가시성표시자 (visibility indicator) + : 공용 -: 전용 43 44
클래스와클래스의관계 TV class 정의와 UML 의 class diagram 의존 : CarTest 클래스가 Car 클래스를사용하는것과같이하나의클래스가다른클래스를ㅅ용하는관계 45 46 예제 예제 class DeskLamp { // 인스턴스변수정의 private boolean ison; // 켜짐이나꺼짐과같은램프의상태 // 메소드정의 public void turnon() // 램프를켠다. { ison = true; DeskLamp -ison : boolean +turnon() +turnoff() public void turnoff() // 램프를끈다. { ison = false; public String tostring() { return " 현재상태는 " + (ison == true? " 켜짐 " : " 꺼짐 "); 47 48
예제 public class DeskLampTest { public static void main(string[] args) { // 역시객체를생성하려면 new 예약어를사용한다. DeskLamp mylamp = new DeskLamp(); BankAccount 예제 2 -owner : string -accountnumber:int 은행계좌의구현 -balance : int +deposit() +withdraw() class BankAccount{ // 은행계좌 int accountnumber; // String owner; // 예금주 int balance; // 잔액 // 객체의메소드를호출하려면도트연산자인. 을사용한다. mylamp.turnon(); System.out.println(myLamp); mylamp.turnoff(); System.out.println(myLamp); y p); void deposit(int amount) { // 저금 balance += amount; void withdraw(int amount) { // 인출 balance -= amount; public String tostring() { return 현재잔액은 + balance + 입니다. ; // end of class BankAccount public class BankAccountTest{ public static void main(string[] args){ BankAccount myaccount = new BankAccount(); 현재상태는켜짐현재상태는꺼짐 49 myaccount.deposit(10000); System.out.println(myAccount); myaccount.withraw(8000); System.out.println(myAccount); // end of class BankAccountTest 50 문자열객체 문자열 (String) String 객체 52
클래스에서객체를생성하는방법 String 클래스의메소드 단하나의방법만이존재한다. new 연산자만 이객체를생 String s = new String("Hello World"); 성합니다. 53 54 메소드사용의예 랩퍼클래스 기초자료형을객체로포장하여주는클래스 55 56
Q & A 57