상세 컨텐츠

본문 제목

생성자, 접근제어자, 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' 카테고리의 다른 글

클래스 빌더 패턴  (2) 2025.03.04
enum 매핑  (0) 2025.02.28
자바 클래스 정렬 기준 설정. PriorityQueue, sort. Comporable, Comporator (코테준비)  (0) 2024.10.20
Object Class, 불변객체, String  (0) 2024.03.30
상속, 다형성  (0) 2024.03.30

관련글 더보기