● 클래스(반)
- 공통 요소를 한 번만 선언해 놓고 가져다 사용만 하도록 설계한다.
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 |