1 분 소요

클래스와 객체의 생성

자바 언어는 ‘객체지향’ 언어로, 객체를 생성할 때 함께 선언해줄 것이 여러가지 있다.

접근제어자 / (static) / (final) / 리턴타입 / 객체이름 {

}

괄호는 optional


1) 접근제어자

어디에서 접근이 가능한지 권한

1. public    / 어디서든 접근 가능
2. protected / 패키지  상속받은 클래스에서 접근 가능
3. (default) / 패키지에서 접근 가능
4. private   / 클래스에서 접근 가능 
   // 상속 클래스에서 사용하게 될 경우가 대부분일텐데, 이럴 때 setter, getter 메서드 활용

access-modifier

- 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

카테고리:

업데이트:

댓글남기기