Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다.
QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (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) (314) 와같이호출되면컴파일러는매개변수의개수, 타입, 순서등을봐서두번째메소드를호출한다. 중복메소드예제 class Car { // 필드선언 private int speed; // 속도 // 중복메소드 : 정수버전 public void setspeed(int s) { speed = s; System.out.println( 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)
클래스와클래스의관계
예제 예제 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