본문 바로가기

웹 개발/Java

[Web_JAVA] 13

● 클래스(반)

- 공통 요소를 한 번만 선언해 놓고 가져다 사용만 하도록 설계한다.

 

1. 타입이다.

- 클래스 안에 선언된 변수와 메소드를 사용하고 싶다면, 해당 클래스 타입으로 변수를 선언해야 한다.

 

2. 주어이다.

(ex) 원숭이가 바나나를 먹는다.

→ 영어 : Monkey eats the banana.

→ 자바 : Monkey.eat("banana");

            --------  ---  --------

              주어  동사  목적어

 

 

 

● 클래스 선언

class 클래스명 {

    필드(변수, 메소드)

}

 

 

 

● 클래스의 필드 사용

1. 객체화(instance)

- 객체(instance variable)를 만드는 작업

- 추상적인 개념을 구체화시키는 작업

- 클래스명 객체명 = new 생성자();

  객체명.필드

 

 

 

● 생성자

- 클래스이름 뒤에 소괄호가 있는 형태

- 메소드와 기능이 똑같지만 메소드라고 부르지 않는다.

→ 생성자는 리턴이라는 기능이 존재하지 않기 때문이다.

 

 

 

● 생성자의 사용 목적

1. 해당 클래스의 필드를 메모리에 할당한 뒤 할당된 필드의 주소값을 가져온다.

2. 초기화

 

 

 

● 기본 생성자

- 매개변수와 실행할 문장이 따로 없다.

- 클래스 선언 시 자동으로 선언된다.

- 사용자가 직접 생성자를 선언하게 되면 기본 생성자는 더 이상 사용할 수 없게 된다.

 

 

 

● this

- 필드에 접근한 객체가 누구인지 알아야 해당 필드에 접근할 수 있다.

- 이 때 접근한 객체가 가지고 있는 필드의 주소값을 this라는 변수에 담을 수 있으며, 자동으로 담기게 된다.

 

 

 

● 다형성(polymorphism)

1. 오버로딩(overloading)

- 매개변수

 

 


 

실습(메소드)

1. 다른 영역의 값 변경(불가능)

import java.util.Scanner;

public class MethodTask {

	void test1(int data) { 
		data = 20;
	}


	public static void main(String[] args) {

		MethodTask mt = new MethodTask();
		int data = 10;  //data는 값이 아니라 저장공간이다.
		
		// 저장공간을 넣어도 값이 변하지 않으므로
		// test1()의 data값은 변하지 않는다.
		mt.test1(data);  
		System.out.println(data);  
		
	}
	
}

 

결과

 

 

 

2. 다른 영역의 값 변경(가능)

import java.util.Scanner;

public class MethodTask {
 
	void test2(int[] data) {
		data[0] = 20;
	}


	public static void main(String[] args) {

		MethodTask mt = new MethodTask();
		int[] data = {10};  // data 배열에 10이라는 값이 들어있다.
		mt.test2(data);  // data 배열의 값이 들어간다.
		System.out.println(data2[0]);
		
	}
	
}

 

결과

 

 

 

3. 3개의 정수를 입력받고 세 정수의 곱셈을 구하는 메소드

import java.util.Scanner;

public class MethodTask {
 
	int multiple(int[] arNum) {
		int result = 1;  // 곱해야 하므로 0이 아닌 1로 초기화한다.

		for (int i = 0; i < arNum.length; i++) {
			result *= arNum[i];  // return = return * arNum[i]
		}

		return result;
	}
	
}

 

 

 

4. 3개의 정수를 입력받고 세 정수의 곱셈을 구하는 메소드(void형으로 구현)

import java.util.Scanner;

public class MethodTask {

	void mul(int[] arNum, int[] result) {  // 리턴타입이 void이므로 배열로 받아준다.
		for (int i = 0; i < arNum.length; i++) { 
			result[0] *= arNum[i];  // 1 * 3, 3 * 5, 15 * 1
		}
	}


	public static void main(String[] args) {

		MethodTask mt = new MethodTask();
		int[] arNum = {3, 5, 1};
		int[] result = {1};
		
		mt.mul(arNum, result);
		System.out.println("결과 : " + result[0]);  
		
	}
	
}

 

결과

 

 

 

 

실습(클래스(1))

class A {  // 클래스 생성
	int data = 100;  // 변수 선언
	
	void printData() {  // 메소드 생성
		System.out.println(data); 
	}
}


public class ClassTest {
	public static void main(String[] args) {
		
		A a = new A();  // 객체화
		A a2 = new A();
		
		System.out.println(a);
		a.data = 200;
		a.printData();  // System.out.println(200); 
		
		a2.data = 300;
		a2.printData();  // System.out.println(200); 
		
	}

}

 

결과

 

 

 

 

실습(클래스(2))

class Car {
	String brand;  // 전역변수
	String color;
	int price;

	// 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() {
		
		// 클래스 하나 당 1개의 this가 있다. 
		System.out.println(this.brand + "시동 킴");
	}
	
}


public class Road {
	public static void main(String[] args) {
		
		Car mom = new Car("Benz", "Black", 10000);
		Car daddy = new Car("BMW", "Blue", 8000);
		Car me = new Car("", "", 1000);
		
//		mom.brand = "Benz";
//		mom.color = "Black";
//		mom.price = 10000;
		
		mom.engineStart();
		System.out.println(mom);
		
//		daddy.brand = "BMW";
//		daddy.color = "Blue";
//		daddy.price = 8000;
		
		daddy.engineStart();
		System.out.println(daddy);

		
	}
	
}

 

결과

 

 

 

 

'웹 개발 > Java' 카테고리의 다른 글

[Web_JAVA] 15  (0) 2022.03.01
[Web_JAVA] 14  (0) 2022.02.28
[Web_JAVA] 12  (0) 2022.02.26
[Web_JAVA] 11  (0) 2022.02.25
[Web_JAVA] 10  (0) 2022.02.24