Wanna be Brilliant Full-Stack Developer

3/2 Java 객체지향프로그래밍 문법 #3 # 클래스 본문

Some Memos/Java

3/2 Java 객체지향프로그래밍 문법 #3 # 클래스

Flashpacker 2022. 3. 2. 17:06


클래스? 우리가 계속 만들었던 파일이다. 클래스라는 파일이다. 

이게 무엇일까? 

설계도라고 한다! 

우리가 클래스 파일을 만들떄 무엇을 만드냐면? .java 파일을 만들떄 

내가 만약에 Dog라는 클래스를 만들고 싶으면? 파일명을 똑같이 Dog.java로 만들어줘야한다. 

Java는 이게 규칙이다. 내가 파일명을 Dog.java로 만들면 클래스이름도 동일하게 Class Dog로 만들어야한다! 

 

Dog라는 클래스가 만들어졌으면 , 클래스를 어떤식으로 사용하는지 궁금하다! 

Dog라는게 있으면 이 강아지가 어떤 어떠한 특징을 가지고 있는지 이것들을 정의한게 클래스이다! 

우리가 기본 자료형들 Int, Double , Char 와 같은것들은 하나의데이터밖에 표현을 못한다! 

우리 클래스 자료형 (커스텀 자료형) , 커스텀 자료형 클래스는 다양한 데이터들을 같이 들고 있을수 있다.!

예를 들어서 강아지 특징에 

Int age ( 나이) , String name ( 이름) , String Color (강아지 색상) , String Type (강아지 종류) 

이런것들에 대한 특징 을 가지고 있는 강아지 설계도 이다. 

강아지 설계도를 만들어보자 

 

package ch04;

// 클래스 = 여러가지 특징(상태)을 가지고 있다.
// int - > 한가지의 상태만 가질 수 있다.
// String - > 한가지의 상태만 가질 수 있다.

public class Dog {
	int age = 20;
	String name = "토토";
	String color = "하얀색";
	String type = "말티즈";
}

이렇게 만들어지는것이 클래스라고 한다. 클래스는 하나의 특징을 들고 있지 않다! 

클래스는 여러가지 특징을 가지고 있다. 

특징을 다른 말로는 자바에서는 상태라고 말한다.
여러가지 상태를 가지고 있다라고 말한다 

int는 한가지의 상태만, String만 한가지의 상태만 가질 수 있다. 

하지만 클래스는 여러가지 상태를 가질 수있다!

 

이클래스를 사용해보려고하는데! 여기에는 메인 메서드가 없다. 

메인 메서드를 DogApp이라고 새로 만든다!

 

이 Dog 클래스는 Static이 하나도 없기 때문에 아무것도 메모리에 뜨지 않는다! 

Static이 하나도 없으면 이 Dog를 메모리에 띄우고싶으면 방법은 하나이다!

Dog(타입)에 d1(변수명) = new Dog(); Heap에다가 띄운다!

package ch04;

public class DogApp {
	
	public static void main(String[] args) {
		Dog d1 = new Dog(); // Heap 공간에 
	}
}

이렇게 실행이 된다. 하지만 여기서 주의할점은 머냐면 첫번째로 

package ch04;

// 클래스 = 여러가지 특징(상태)을 가지고 있다.
// int - > 한가지의 상태만 가질 수 있다.
// String - > 한가지의 상태만 가질 수 있다.

public class Dog {
	int age = 20;	//  변경 가능
	String name = "토토"; // 변경 가능
	String color = "하얀색"; // 변경 가능(염색하면) 
	String type = "말티즈"; // 변경 불가능 
}

  여기서 name 과 color와 같은것들은 변수이다 , 변수는 변하는 수이다. 

여기서 나이는 강아지 토토라는 애가 시간이 지나면 변경이 되는가 안되는가? 변경 가능하다. 

색상도, 이름도 변경이 가능하지만 type은 불가능하다

변경이 불가능한것들은 변수가 아니라 상수라고 해야한다

 

자바에서는 변경이 불가능하는 애들은 final을 붙인다! 

final을 붙이면 상수가 된다! 실제로 내가 이프로그램에서 강아지의 상태를 변경을 해보자! 

assgined는 할당하다(메모리에)

Final field에서 field는 변수들을 이야기하고, 

field는 변수들을 이야기한다

여러가지 이름을 가지고 있는데
변수, 필드,  전역 변수 ,  힙변수라고도한다.
왜냐하면 이 모든 아이들은 static이 안붙었으니 heap에 들어가기 떄문에 

프로그램에서 애들을 Field라고도하는데  상태라고도 부르기도한다! 

이름이 너무많으니까 상태, 필드, 전역변수라고 알자!

 

그래서 상태 , 필드 , 전역변수라고 부를것인데 전역변수란 지역번수가 아니다라는것이다. 
지역변수가 아니라는뜻은
메서드 내부에서 만들어진 변수가 아니다라는 말이다.