클래스는 객체의 상태를 나타내는 필드(변수)와 객체의 행동을 정의하는 메서드(함수)로 구성됨.
클래스는 데이터와 그 데이터를 조작하는 코드를 묶어놓은 컨테이너와 같음.
클래스 실습
클래스를 만드는 규칙
클래스는 대문자로 시작하는 것이 좋음.
파스칼 케이스 명명 규칙 사용하기
package ch05;
//클래스 파일 생성 - 클래스를 설계하는 코드 측
//2. 클래스는 객체를 만들기 위한 설계도면이다
//학생이라는 설계도를 만들어보자
public class Student {
String name;//이름
int grade;//학년
int age;//나이
double height;//키
double weight;//몸무게
}//end of class
// 위 코드는 학생을 프로그램 세상에 올리기 전 설계 도면이다.
// 현재는 상태(속성) 만 설계한 코드이다.
package ch05;
public class Book {
//클래스의 속성(필드) 선언
String title;
String author;
int publishYear;
int totalPage;
}
클래스를 인스턴스화시키기
package ch05;
public class StudentMainTest {
public static void main(String[] args) {
// 프로스램 세상에 존재할 수 있도록 메모리 올려보자.
//Student 클래스를 인트턴트화했다.(즉 클래스 메모리 올릴 때 new키워드 생성자()사용
int a = 10;
System.out.println("a(변수이름) : " + a);//값이 출력됨
Student s1 = new Student();
System.out.println("s1 (변수이름) : " + s1);//주소값이 출력 됨
//변수에 가장 큰 2가지 종류
//1. 기본 데이터 타입(상자에 값이 담긴다)
//2.참조타입(상자에 주소값이 담긴다)
}
}
package ch05;
public class BookMainTest {
public static void main(String[] args) {
//Heap 메모리에 올려 보자 (인스턴스화 한다)
//클래스는 여러번 사용할 수 있다.
Book b1 = new Book();//메모리에 올라가면 우리는 객체라 부룰 수 있다(인스턴스)
Book b2 = new Book();
Book b3 = new Book();
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
}//end of main
}// end of class
스택과 힙 개념
자바의 메모리 영역인 스택과 힙은 런타임 데이터 영역.
스택은 메서드 호출 시 지역변수와 기본형 데이터를 저장, 호출 종료 시 자동 해제.
힙은 new 연산자로 생성된 객체와 인스턴스 변수를 저장, 가비지 컬렉터에 관리되는 동적 메모리 공간.
프로그래밍이 실행되는 시점에 동작(Run Time)
주소가 가리키는 곳
객체에 값 할당
하나의 클래스 설계로 여러 개의 객체를 만들 수 있다.
package ch05;
//클래스를 설계하는 측 코드
public class Warrior {
String name;
int hp;
int attackPower;
int defensePower;
double height;
double weight;
String color;
}
package ch05;
//코드를 수행해 보는 측
public class WarriorMainTest {
//코드의 진입점
public static void main(String[] args) {
//new - 키워드, () - 생성자
Warrior w1 = new Warrior();
w1.name = "티모";
w1.height = 50;
w1.attackPower = 10;
Warrior w2 = new Warrior();
w2.name = "야스오";
w2.height = 100;
w2.attackPower = 100;
System.out.println("w1 에 name : " + w1.name);
System.out.println("w2 에 name : " + w2.name);
}//end of main
}//end of class
package ch05;
//클래스를 설계하는 측
public class Ork {
// 멤버 변수
//멤버 변수는 값을 할당하지 않으면
//기본 값으로 초기화 되어서 메모리에 올라간다.
//문자열에 값을 할당하지 않으면 기본값 null이 들어간다
String gender;
String color;
int power;
double height;
double weight;
String attackType;
}
package ch05;
//코드를 실행하는 측
public class OrkMainTest {
//메인함수
public static void main(String[] args) {
// a - 함수 영역 안에 있다고 해서
//지역 변수 라고 부를 수 있다.
int a = 10;
Ork o1 = new Ork();
o1.gender = "수컷";
o1.attackType = "근접전사";
o1.color = "초록색";
o1.height = 170;
o1.weight = 80;
o1.power = 50;
System.out.println("전투 스타일 : " + o1.attackType);
System.out.println("성별 : " + o1.gender);
System.out.println("키 : " + o1.height);
System.out.println("몸무게 : " + o1.weight);
System.out.println("힘 : " + o1.power);
// 객체에 접근 하려면 반드시 메모리에 올라가야한다. (.연산자)
}
}