1. 클래스(반)
: 공통요소가 모여 있는 곳
1) 주어이다.
Monkey.eat("바나나")
원숭이가 바나나를 먹는다.
문장 맨 앞에는 클래스가 나오므로 항상 대문자로 시작하고 주어 역할을 한다.
2) 타입이다.
추상적인 개념인 클래스는 아무리 필드를 선언해도 접근하기 어렵다.
따라서 구체적인 무언가로 필드에 접근해야 하고,
접근하기 위해서는 그 클래스 타입이어야 한다.
2. 클래스 선언
class 클래스명 {
필드(객체, 메소드)
}
** 필드 혹은 멤버라고 부름 **
** 여기서는 변수보다는 객체라고 불리는 것이 더 적합 **
3. 클래스 사용
[객체화]
클래스명 객체명 = new 클래스명();
추상적인 개념의 클래스를 실체화 시켜주는 객체로
만드는 작업을 객체화(instance)라고 한다.
클래스 내에 있는 필드를 메모리에 할당하기 위해서는
클래스명()(생성자)을 작성해야 하고 필드를 메모리에
올린 후 그 필드의 주소값을 다시 가지고 온다.
이 값을 객체에 대입한다.
따라서 필드에 접근하기 위해서는 객체로
.(하위 연산자)를 사용하여 그 주소에 접근하게 된다.
4. 생성자
1) 클래스의 필드를 메모리에 할당하고, 할당된 주소값을 가지고 온다.
2) 클래스 선언시 자동으로 기본 생성자가 선언되고 코드상에는 나타나지 않는다.
만약 개발자가 직접 생성자를 선언하면 그 생성자가 기본 생성자로 인식된다.
3) 초기화의 목적
5. this
: 클래스 선언시 자동으로 선언되는 저장공간이다.
하나의 클래스 타입에는 여러 객체가 존재하고,
필드에 있는 메소드는 단 한개이다(중복 선언은 불가, 소스파일에 하나의 클래스와 하나의 메소드가 있다는 뜻).
따라서 여러 객체에서 접근하고자 할 때 각 객체를
구분하여 필드에 접근해야 하고 접근한 객체의
주소값을 저장하는 공간이 바로 this이다.
필드 내에 메소드에서는 객체를 사용할 때 this.으로 접근하고,
생략이 가능하다.
6. 오늘 실습 코드
1) ClassTest
package day19;
class A {
String data;
void printData() {
System.out.println(this);
System.out.println(this.data);
}
}
public class ClassTest {
public static void main(String[] args) {
A obj = new A();
A obj2 = new A();
//null : 객체 초기값
System.out.println(obj); //주소값 출력
System.out.println(obj2); //주소값 출력
obj.data = "777";
obj2.printData();
obj.printData();
}
}
2) Road
** 자동으로 기본생성자가 선언된 상태에서 객체에 접근하는 방법 **
package day19;
class Car {
String brand;
String color;
int price;
void enginStart() {
System.out.println(brand + "시동 킴");
}
void enginStop() {
System.out.println(brand + "시동 끔");
}
}
public class Road {
public static void main(String[] args) {
//클래스 선언시 자동으로 기본 생성자가 선언되고 코드상에는 나타나지 않는다
//매우 불편하고 불쾌하다..!!
Car mom = new Car();
Car dady = new Car();
Car mine = new Car();
mom.brand = "Benz";
mom.color = "Black";
mom.price = 8000;
dady.brand = "BMW";
dady.color = "blue";
dady.price = 8000;
}
}
** 개발자가 직접 생성자를 선언한 상태에서 객체에 접근하는 방법 **
package day19;
import java.util.Scanner;
class Car {
String brand;
String color;
int price;
//생성자==========================================
public Car(String brand, String color, int price) {
//객체에 있는 brand를 외부에서 들어온 값으로 초기화 한다.
//지역 안에서는 이름이 같으면 지역변수로 인식된다.
//전역변수를 사용하고자 한다면 명시적으로 this.를 붙여야 한다.
this.brand = brand;
this.color = color;
this.price = price;
}
public Car(String brand, String color) {
this.brand = brand;
this.color = color;
}
public Car() {
}
//====================================================
void enginStart() {
System.out.println(brand + "시동 킴");
}
void enginStop() {
System.out.println(brand + "시동 끔");
}
}
public class Road {
public static void main(String[] args) {
//개발자가 직접 생성자를 선언하면 그 생성자가 기본 생성자로 인식된다.
Car mom = new Car("Benz", "Black", 8000);
Car dady = new Car("BMW", "Blue", 8000);
Car mine = new Car("Bentely", "White");
System.out.println("브랜드 : ");
mine.brand = new Scanner(System.in).next();
System.out.println("가격 : ");
mine.price = new Scanner(System.in).nextInt();
mine.enginStart();
}
}
7. 단축키
** Alt + Shift + S + O : 원하는 생성자 만들기
** Ctrl + Space + 클래스명() 클릭 : 기본생성자 만들기
'웹_프론트_백엔드 > 단과' 카테고리의 다른 글
[단과_JAVA] 2020.02.12 (0) | 2020.02.12 |
---|---|
[단과_JAVA] 2020.02.11 (0) | 2020.02.12 |
[단과_JAVA] 2020.02.07 (0) | 2020.02.10 |
[단과_JAVA] 2020.02.06 (0) | 2020.02.06 |
[단과_JAVA] 2020.02.05 (0) | 2020.02.06 |