Java - 09

하승·2022년 7월 11일
0

웹 개발반 - Java

목록 보기
9/19
post-thumbnail

this

클래스 선언시 내부적으로 선언되어 생성된다.
클래스는 선언시 한번의 메소드를 선언하는데 그 메소드는
여러 객체의 공통적인 행동을 정의하고 있다. 즉 한번의 선언으로
여러 객체를 다루어야 한다. 그렇기 때문에 메소드 내에서 객체의
필드를 사용하고자 할 때 어떤 객체의 필드인지를 구분할 수 없다.
따라서 객체를 생성하거나 혹은 객체 . 을찍고 필드에 접근하는
순간 그 객체를 this 라는 변수가 받는다. 결과적으로 클래스
선언시 this.필드명 으로 접근하면 여러 객체도 하나의 메소드에서
다룰 수 있게된다.
this : 객체 구별용 변수

생성자의 목적

  1. 클래스의 필드를 똑같이 복사해서 메모리에 할당해주고 할당된
    필드의 주소값을 가지고 온다. 이 주소값을 객체에 넣어놓고 사용한다. (객체화의 목적)
  2. 생성자는 호출시 내부의 내용을 모두 수행한다. (초기화의 목적)

다형성(Polymorphism)

  • Overloading(오버로딩)
    같은 이름의 메소드를 넘쳐서(여러개) 불러오는(선언하는) 기법
    매개변수의 개수 혹은 타입이 다르면 같은 이름의 메소드로
    여러개 선언할 수 있다. 이름이 아닌 매개변수로 구별하기 때문이다.
    오버로딩된 메소드 사용시, 전달된 값의 타입 혹은 개수로 구분하여
    알맞은 메소드가 자동으로 호출된다.
    public class ClassTest {
    	public static void main(String[] args) {
    		Car mycar = new Car("Ferrari","Red",65000);
    		Car momcar = new Car("K8", "White", 4000);
    		Car dadcar = new Car(31000);
    		System.out.println(mycar.brand);
    		System.out.println(momcar.brand);
    		mycar.engineStart();
    	}
    }
    class Car{
    	String brand;
    	String color;
    	int price;
    	//생성자 오버로딩 과정
    	//클래스이름  + 자동완성 : 기본 생성자 만들기
    	public Car() {}
    	//Alt + Shift + S > O : 필드를 이용해서 생성자 만들기
    	public Car(String brand, String color, int price) {
    		this.brand = brand;
    		this.color = color;
    		this.price = price;
    	}
    	public Car(int price) {
    		this.price = price;
    	}
    	void engineStart() {
    		System.out.println(this.brand+" 시동켜기");
    	}
    	void engineStop() {
    		System.out.println(brand+" 시동끄기");
    	}
    }      					                                                                    

클래스 배열

객체를 여러개 선언해야 하는 경우 배열 타입으로 한번에 선언 후 사용
각 객체는 규칙성이 없기 때문에 규칙성을 부여하기 위해서 사용한다.

클래스 배열 선언

클래스명[] 배열명 = {
	new 생성자(),
	new 생성자(),
	...
};
Square[] arSquare = {
				 new Square("가나", 20, 8),
				 new Square("미니맵", 40, 40),
				 new Square("돈", 100, 25)
		};
}
class Square{
	String name;
	double height;
	double width;
	
	public Square(String name, double height, double width) {
		this.name = name;
		this.height = height;
		this.width = width;
	}

	double getArea() {
		return height*width; 
	}
	

클래스 배열 사용

배열명[idx] 방이 객체를 의미하게 된다.

배열명[idx].변수
배열명[idx].메소드()	
for (int i = 0; i < arSquare.length; i++) {
			System.out.println(arSquare[i].getArea());
		}

실습 과제

public class Zoo {
	public static void main(String[] args) {
		//동물 세마리 만들어서 울게하기
		animal samak = new animal("사막여우", 4, 25);
		animal whiteTiger = new animal("백호", 20, 90);
		animal jaegyueo = new animal("재규어", 10, 60);
		
//		samak.cry();
//		whiteTiger.cry();
//		jaegyueo.cry();
		
		animal[] arAnimal = {
				new animal("사막여우", 14, 25),
				new animal("백호", 19, 90),
				new animal("재규어", 21, 60)
		};
		for (int i = 0; i < arAnimal.length; i++) {
			arAnimal[i].cry();
			System.out.println(arAnimal[i].getAction());
		}
	}
}
// 동물 클래스 
// 이름, 나이, 몸무게, ...
// 먹기, 자기, 움직이기, 울기
class animal{
	String name;
	int age;
	double kg;
	
	public animal(String name, int age, double kg) {
		this.name = name;
		this.age = age;
		this.kg = kg;
	}
	void cry() {
		System.out.println(name+" ㅜㅜ");
	}
	void eat() {
		System.out.println(name+" 맛있다!");
	}
	void sleep() {
		System.out.println(name+" zzz...");
	}
	void action() {
		System.out.println(name+" 움직여");
	}
	String getAction() {
		return (name +"\n"+ age +"살\n"+ kg+"킬로그램\n");
	}
}

실행

profile
화이팅!

0개의 댓글