도도한 개발자
[Java] #03. 클래스와 객체 본문
* 클래스는 상태(State)와 행위(Behavior)가 있어야 한다.
예를들어 핸드폰의 상태엔
- 밝기가 최대인 상태
- 배터리가 10% 남아있는 상태
- 폰트가 궁서체인 상태
등이 있고
핸드폰의 행위엔
- 밝기를 낮추는 행위
- 배터리를 충전하는 행위
- 폰트를 변경하는 행위
등이 있다.
이 내용을 자바로 표현해보자.
public class Phone {
public Phone() {
}
}
Phone 클래스 선언문 아래 메소드같이 생긴 것을 생성자(Constructor)이라고 부른다. Phone 클래스 객체를 생성할 때 필요한데, 이 클래스의 밝기 상태, 배터리 상태, 폰트 크기가 최소인 상태 등을 다음과 같은 변수로 나타낼 수 있다.
public class Phone {
public Phone() {
}
int brightness;
int battery;
String font;
}
만약 핸드폰의 밝기가 60이라면 brightness에 60을 지정해주면 된다. 배터리가 98%면 battery에 그 수치만큼 숫자로 지정하고 font에는 핸드폰의 글꼴 종류를 지정해주면 된다. 이렇게 변수를 지정함으로써 클래스의 상태를 정할 수 있다.
그렇다면 행위는 어떻게 지정할까?
public class Phone {
int brightness;
int battery;
String font;
public Phone() {
}
public void brighten() {
//생략
}
public void darken() {
//생략
}
}
이렇게 밝기를 높이는 brighten() 메소드와 밝기를 줄이는 darken() 메소드로 클래스의 상태를 변경하는 행위를 지정할 수 있다.
* 클래스와 객체 구분하기
위에서 만든 Phone 클래스는 말 그대로 클래스이다. "아이폰12"이 있더라도 나의 "아이폰12"과 내 친구의 "아이폰12"은 다르다. 밝기도 다르고 배터리도 다르고, 결정적으로 시리얼 넘버도 다르다. 그러면 나와 내 친구의 핸드폰을 나타내기 위해 별도의 클래스들을 만들어야 할까? 한 두개 정도는 괜찮겠지만 아이폰12를 쓰는 사람들은 어마어마하게 많을텐데 별도로 만드는 것은 바람직하지 않아보인다.
각각의 실제 사물을 나타내기 위한 것을 객체(Object) 혹은 인스턴스(Instance)라고 한다. 핸드폰을 관리하는 Phone이라는 클래스를 맨들고 그 안에 다음과 같이 main()메소드를 만들자.
public class Phone {
public static void main(String[] args) {
// main 코드
}
}
이 Phone 클래스에서 나와 내 친구의 핸드폰을 나타내기 위해선 Phone클래스를 이용하여 각각의 객체를 생성하면 된다.
Phone myPhone = new Phone();
Phone frienPhone = new Phone();
이렇게 해서 나의 핸드폰 myPhone 객체와 친구의 핸드폰 friendPhone 객체가 생성됐다.
여기서 "Phone()"이라고 하는 메소드 같이 생긴 것을 "생성자(Constructor)"이라고 부른다. 이는 객체를 생성하기 위한 거의 유일한 도구인데, 매개 변구가 없는 생성자를 "기본 생성자"라고 부른다.
* 실습
Profile 클래스에 String타입의 name과 int타입의 age라는 변수를 선언하여 다음과 같은 결과를 출력해보자.
My name is Kim
My age is 25
public class Profile {
String name;
int age;
public static void main(String[] args) {
Profile profile = new Profile();
profile.setName("Kim");
profile.setAge(25);
profile.printName();
profile.printAge();
}
public void setName(String str) {
name = str;
}
public void setAge(int val) {
age = val;
}
public void printName() {
System.out.println("My name is " + name);
}
public void printAge() {
System.out.println("My age is " + age);
}
}
그럼 이만.
'Backend > Java' 카테고리의 다른 글
[Java] #06. 자바의 제어문 (키워드 : 조건) (0) | 2022.03.10 |
---|---|
[Java] #05. 자바의 연산자 (0) | 2022.03.10 |
[Java] #04. 자바의 변수들 (0) | 2022.03.10 |
[Java] #02. Hello World! (Eclipse에 Git연동) (0) | 2022.03.08 |
[Java] #01. 프로그래밍이란? (0) | 2022.03.08 |