상세 컨텐츠

본문 제목

생성자, 접근제어자, static

java

by nownow 2024. 3. 29. 21:18

본문

생성자

public class person{
    String name;
    int age;
    int id;
}

위와 같은 클래스가 존재한다면 기본 생성자 person()은 적지 않아도 기본적으로 작동한다.(각 필드의 기본값으로 할당)

 

생성자가 한가지라도 존재 한다면 기본 생성자가 생성되지 않으므로 따로 오버로딩하여 명시해주어야 한다.

public class person{
    String name;
    int age;
    int id;
    person(String name, int age,int id){
    	this.name = name;
        this.age=age;
        this.id=id;
    }
    person(){
    }
}

매개변수와 필드명이 같을경우. 호출시 가까운 매개변수가 우선권을 가져서 필드값에 접근하려면 this 키워드 사용

this를 통해 오버로딩된 생성자에서 다른 생성자를 호출할 수도 있다.(생성자의 맨 위에만 가능)

public class person{
    String name;
    int age;
    int id;
    person(String name, int age,int id){
    	this.name = name;
        this.age=age;
        this.id=id;
    }
    person(String name,int id){
    	this(name,0,id);
    }
}

나이를 입력하지 않은 경우 0으로.

 

생성제어자

 

public -> 다른 패키지에서도 사용가능

protected -> 같은 패키지에서 가능하고, 상속관계일 경우 다른 패키지여도 가능.

default(명시하지 않을 경우 기본값) -> 같은 패키지에서만 사용 가능

private -> 모든 외부 호출 막는다. (클래스 내부에서만)

 

클래스 접근제어자는 public 아니면 default

 

private 접근제어자로 캡슐화 하여 적절하게 숨기고 접근을 제약한다.

 

static

 

자바의 메모리구조로는 메서드, 스택, 힙 영역이 있다.

메서드 -> 클래스 정보가 저장됨,(공통 리터럴 상수와 static)

스택 -> 실행된 메서드 들이 저장되어있음

힙 -> 객체가 생성되는 영역 (new를 사용해 생성된 것들)

static 요소들은 메서드 영역에 저장됨. 프로그램이 시작될때 딱 하나만 생성됨.

 

같은 인스턴스를 여러개 생성하면, 각 멤버변수 값들은 다르지만 메서드는 동일하다.

메서드는 힙 영역이 아닌 메서드 영역에 남아있고 사용시 꺼내서 쓴다.

힙영역에 생성된 인스턴스를 스택 영역에서 아무것도 가리키고 있지 않다면 GC에 의해서 제거되어 메모리 관리.

public class person{
    static int count;
    String name;
    int age;
    int id;
    person(){
    	count++;
    }
}

static 멤버 변수를 사용해서 다른 참조를 추가 할 필요 없이  생성된 사람 인스턴스가 총 몇개인지 확인할 수 있다.

메서드 영역에 보관되기에 추가 관리가 필요없고 사라지지 않음. 

멤버 변수가 필요없이 기능만 구현된 메서드는 static 메서드로 구현 할 수 있다.

당연히 클래스 내부 기능을 사용하게 된다면 정적메서드나 정적변수만 사용 가능.

 

'java' 카테고리의 다른 글

Object Class, 불변객체, String  (0) 2024.03.30
상속, 다형성  (0) 2024.03.30

관련글 더보기