[객체지향] 클래스와 객체의 생성
클래스와 객체의 생성
자바 언어는 ‘객체지향’ 언어로, 객체를 생성할 때 함께 선언해줄 것이 여러가지 있다.
접근제어자 / (static) / (final) / 리턴타입 / 객체이름 {
}
괄호는 optional
1) 접근제어자
어디에서 접근이 가능한지 권한
1. public / 어디서든 접근 가능
2. protected / 패키지 및 상속받은 클래스에서 접근 가능
3. (default) / 패키지에서 접근 가능
4. private / 클래스에서 접근 가능
// 상속 클래스에서 사용하게 될 경우가 대부분일텐데, 이럴 때 setter, getter 메서드 활용
- Setter - Getter 메서드와 this
필드의 값을 저장, 반환할 때 사용하는 메서드이며, 그 때 변수명을 명확하게 하기 위해 this라는 키워드 사용.
[클래스]
class Dog {
private String name;
private int years;
//Setter-Getter 메서드
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getYears() {
return years;
}
void setYears(int years) {
this.years = years;
}
}
[같은 패키지의 사용클래스]
public class Main extends Dog {
public static void main(String[] args) {
Dog d = new Dog();
d.setName("야옹이");
d.setYears(1);
System.out.println(d.getName); // 야옹이
System.out.println(d.getYears); // 1
}
}
Q1. 왜 이렇게 쓰나?
A1. 변수에 조심스럽게 접근하게 하기 위해서
Q2. 왜 조심스럽게 접근해야 하나?
A2.
1) 잘못된 값이 들어가면 오류가 나거나, 원하는 대로 프로그램이 동작하지 않을 수 있으니. => 이를 위해 set 메서드에 유효성 검사를 할 수 있는 장치를 추가하면 마치 인터페이스처럼 사용이 가능함.
1) 누구나 접근하면 안되니까. => 동일 패키지에 다른 변수이름이 name인데, 거기서 값을 할당해버리면 큰일나기 때문.
2) (static)
정적 객체를 만들게 함. (=메모리에 올려놓고 사용한다는 뜻). 선택적이라 괄호로 표현.
- static이 아니면 인스턴스를 생성해야 접근이 가능함.
- static 변수는 ‘대문자’로 명명함.
- 메모리의 method Area > static zone에 할당이 됨.
1. static 클래스의 변수
: 객체를 생성하지 않아도 값이 할당 됨. 해당 클래스의 각 객체들이 값을 공유. => 메모리 측면에서 이득이 있음.
public class Circle {
public double radius; // 반지름 -> 비정적 필드. 즉, 객체마다 다르게 사용될 변수
public static double PI = 3.1415; // 파이값 -> 정적 필드. 해당 값은 어느 객체에도 동일하게 사용가능.
// 메모리에 한번만 올려두고 꺼내쓰는게 유리.
}
2. static 클래스의 메서드
: 객체를 생성하지 않고 호출. 메서드도 메모리에 할당이 되어 있으려면 메서드 안에서 사용되는 변수도 마찬가지로 static이어야 함.
3) (final)
변경 불가.
-
final 변수: 최초 초기화만 가능, 이후에는 할당 불가.
public class Circle { public double radius; public static final double PI = 3.1415; // 파이값 -> 변하지 않음. }
-
final 메서드: 최초 구현만 가능, 이후에는 오버라이드 불가(상속받은 자식클래스에서 마음대로 바꾸지 못하게 함)
4) 리턴타입
해당 객체가 뱉어내는 자료형. 없으면 void.
마지막 수정일시: 2022-05-31 17:32
댓글남기기