[개체지향] oop에서 클래스
oop에서 클래스
새로운 개체를 만들 때 사용하는 명세서 개체는 반드시 클래스로부터 만들어야 함
- 속성(상태)
- 동작
- 등
public class Human{
public String name;
public int age;
public Sex sex;
public void walk(){
this.age += 1;
}
public void eat(){
this.age -= 1;
}
}
접근 제어자 public
멤버 함수 변수 앞에 외부에서 클래스 내부에 담긴 상태/동작에 접근하는 것을 허용
- 여기서 외부는 다른 패키지
//academy.pocu.character.Human.java
package academy.pocu.character;
public class Human{
int age;
...
}
//academy.pocu.engine.World.java
package academy.pocu.engin;
import academy.pocu.character.Human;
public class World{
public void SpawnNPC(){
Human npc = new Human();
npc.age = 20 //complie error
}
}
상태를 칭하는 용어
- 멤버 변수(member variable)
- 필드(field)
- 속성(attribute)
- 등
동작을 칭하는 용어
- 멤버 함수(member function)
- 메서드(method)
- 메시지(message)
개체 만들기
Human adam = new Human//C#과 동일
adam을 개체라 지칭
객체 vs 개체
- OOP에서 물체 생명체를 지칭 : 개체라고 번역하는게 더 나은 방법
인스턴스(instance) = 개체 = 객체 인스턴스화(instatiation): 클래스로부터 개체 하나를 만드는 행위
자바는 참조형
- C는 개체를 포인터 혹은 값으로 전달가능
- 자바는 무조건 포인터 전달
개체 생성시 멤버 데이터를 0에 준하는 값으로 초기화 해줌 참조형은 null로 0이 아닌 다른 값으로 초기화하고 싶다면 선언문에 대입 가능
public class Human{
public String name;
public int age = 20;
public Sex sex;
...
}
- .을 통해 멤버에 접근 * -> 없음
가비지 컬렉션 기능
- JVM에 내장되어있음
- 메모리 수집하는 시점을 알수없음
- 그럼에도 메모리 누수 존재
생성자
public class Human{
public String name;
public int age;
public Sex sex;
public Human(String name, int age, Sex sex){
this.name = name;
this.age = age ;
this.sex = sex;
}
}
...
Human adam = new Human("adam", 20, Sex.MALE);
- 반환형 없음(void아님)
- 개체 생성 시에 자동으로 호출되는 특수한 함수
- 함수명 클래스명과 동일
코드 중복을 피하는 법
- 매개변수 수가 적은 생성자에서 매개변수 수가 많은 생성자를 호출
- this()를 이용하면 다른 생성자를 호출할 수 있음
public Human(String name, Sex sex){
this(name, 0, sex)
}
매개변수를 받지 않는 생성자가 있어야 컴파일가능.
기본 생성자(default constructor)
- 프로그래머가 생성자를 제공하면 기본 생성자는 생기지 않음