웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.10

shine94 2020. 2. 11. 07:22

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