Back-End/JAVA

[Java] Storage Class(저장 기억 부류), 클래스, 생성자

챌링킴 2021. 5. 24. 21:19
반응형

1) Storage Class

1. 지역 변수

   메소드 내부에 선언된 변수

2. 전역 변수

   클래스 내부, 메소드 외부에 선언된 변수

3. 정적 변수

   static이 붙은 변수

 

2) 지역변수/전역변수/정적변수 특징

저장되는 RAM영역 Stack Data Data
  지역변수 전역변수 정적변수
초기화 직접 자동 자동
생명주기 } 프로그램 종료시 프로그램 종료시
보안성

3) Class

공통 요소들을 추상적으로 묶어놓은 틀, 개념

ex) 자동차로 비유하자면 각 차의 엔진종류, 차 번호, 브랜드, 시동켜기 등

     붕어빵 틀

여러 변수들과 메소드들을 둘다 관리하고 사용하기 위해 쓴다.

 

1. 주어이다.

         모든 문장 맨 앞에 클래스가 나오고 영어는 맨 앞을 대문자로 적는다.

         클래스는 주어의 역할이고 대문자로 시작한다.

         Monkey.eat("banana");  =>  Monkey : 클래스 / eat : 메소드 / banana : 변수

         [주어][먹는다][목적어]

2. 타입이다. 

         클래스는 추상적인 개념이고 이 클래스 안에는 필드가 존재한다.

         추상적인 것을 바로 사용할 수 없기때문에 그 필드들을 구체화시킨 하나의 대상이 필요하다.

         이러한 것들을 "객체"라고 부르고 영어로는 instance variable이라고 한다.

         ex) 붕어빵

              instance 예, 예시

              추상적인 개념의 한 예시로서 객체가 나오기 때문에 instance variable이라 부른다.

              (자동차인데 예를 들어 내 차야)

              [클래스]                   [객체]

 

추상적인 개념인 클래스를 객체로 구체화해서 만드는 작업을 객체화라고 한다.

클래스명 객체명;

따라서 클래스는 그 객체의 타입이다.

 

4) 클래스 선언

다른 클래스 외부에서 선언한다.

class 클래스명{

           자료형 변수;

           자료형 변수;

           ...

          리턴타입 메소드명1( ){

          }

          ...

}

 

5) 클래스 사용

클래스는 추상적인 틀이기 때문에 먼저 객체화를 진행한다.

         클래스명 객체명 = new 클래스명( );

         객체명.변수명 = 값;

         객체명.메소드( );

하나의 저장공간에는 단 한개의 값만 담을 수 있다.

필드에는 여러개의 값이 존재하기 때문에 필드는 다른 곳(Heap)에 할당되고

**할당된 필드의 주소값을 저장하는 것이 객체이다.**

		Car mycar = new Car("Ferrari", "red", 65000);
//	   [클래스][객체] = [새로 만들어진 필드의 주소값];  => 객체화

6) 생성자

생성자 : 클래스명 뒤에 소괄호

생성자는 메소드와 똑같은 기능을 가지고 있다.

리턴을 할 수 없고 필드를 만들어주기 때문에 메소드라고 부르지 않는다.

 

클래스 선언시 자동으로 생성자가 하나 만들어지고 코드상에는 나타나지 않는다.

이런 생성자를 기본 생성자라고 하며, 만약 생성자를 직접 선언하게 되면 기존에 있던 기본 생성자는 사라진다.

class Car {
	String brand; //속성
	String color;
	int price;

	public Car(String brand, String color, int price) { // 생성자 단축키 : alt + shift + s + o
		// super();
		this.brand = brand;
		this.color = color;
		this.price = price;
	}

//	public Car(String color, int price, String brand) {
//
//	}

	public Car(int price) {
		super();
		this.price = price;
	}

	void engineStart() {
		System.out.println(brand + " 시동켜기");
	}

	void engineStop() {
		System.out.println(brand + " 시동끄기");
	}

}

 

7) 생성자의 목적

1. 클래스의 필드를 똑같이 복사해서 메모리에 할당해주고 할당된 필드의 주소값을 가지고온다.

   이 주소값을 객체에 담아두고 사용한다. => (객체화)

2. 필드 초기화의 목적

 

8) this

   클래스 선언시 내부적으로 선언되어 생성된다.

   클래스 필드에서 하나의 메소드로 여러 객체를 다루어야 한다.

   만약 메소드 내에서 필드를 사용하고자 할 때 어떤 객체의 필드인지를 구분할 수가 없다.

   따라서 객체에 마침표를 찍거나 생성시에 그 접근한 객체를 this라는 변수가 받는다.

   결과적으로 클래스 선언시 this.필드명으로 접근하면 여러 객체도 하나의 메소드에서 구분하여 다룰 수 있게된다.

반응형

'Back-End > JAVA' 카테고리의 다른 글

[Java] 클래스 배열  (0) 2021.05.24
[Java] 다형성(Polymorphism)  (0) 2021.05.24
[Java] 메소드(method)  (0) 2021.05.21
[Java] 2차원 배열[ ] [ ], 2중 for문  (0) 2021.05.20
[Java] 배열(array,[ ])  (0) 2021.05.18