java- 접근제어, 설정자, 생성자 오버로딩

OECDVP·2026년 6월 13일

java를 쉽게!

목록 보기
1/9

접근 제어

자바는 클래스안에 수많은 데이터를 담아두는데 변수를 마음대로 바꿔놓으면 곤란해진다. 접근 지정자는 publiic, private, protected, default가 있다.
1 public: 아무나 사용가능
2 protected: 가족중심인데 같은 패키지, 자식클래스(상속)이며 허용
3 default: 같은 패키지, 클래스에서만 가능
4 private: 오직 해당 클래스만!!!

getters(접근자), setters(설정자)

이 두개의 메서드를 사용하면 데이터 값을 수정하거나 꺼내올수 있다!!!
get의 뜻은 얻다 이고 객체의 private 필드값을 외부로 반환한다. setter는 필드 값을 변경, 저장한다.

//Getter: get(변수명), setter: set(변수명)]
public class Bank {
    private String sort;
    private int accountSecretNumber;

    // Getter
    public String getSort() { 
        return sort; 
    }
    // Setter (this.필드 = 매개변수)
    public void setSort(String sort) { 
        this.sort = sort; 
    }

    // 비밀번호 Getter
    public int getAccountSecretNumber() { 
        return accountSecretNumber; 
    }
    // 비밀번호 Setter
    public void setAccountSecretNumber(int accountSecretNumber) { 
        this.accountSecretNumber = accountSecretNumber; 
    }
    }

setter는 저장하고 나가는 느낌인데 void는 돌려줄거 없어라는 뜻이므로 꼭 사용해줘야한다.

생성자

객체가 생성할때 초기화를 시키는것이 생성자다.

public class Bank {
    int date;

    // 생성자: 클래스명과 동일하게 작성 (반환형 없음)
    public Bank() { 
        date = 12;
    } 
}

public class BankTest {
    public static void main(String args[]) {
        // 객체 생성 시 생성자가 자동으로 호출됨!
        Bank obj1 = new Bank();  
        Bank obj2 = new Bank();

        System.out.println("A의 계좌 생성날은 " + obj1.date); // A의 계좌 생성날은 12
        System.out.println("B의 계좌 생성날은 " + obj2.date); // B의 계좌 생성날은 12
    }
}

매개변수와 생성자

외부에서 전달되는 값은 매개변수에 저장된다.

class Student {
    String name;
    int grade;

    // 생성자가 매개변수(n, a)를 가짐
    Student(String n, int a) { 
        name = n; // 진짜 내 변수 name에 들어온 재료 n을 대입
        grade = a; 
    }
}

public class MidtermTest {
    public static void main(String[] args) {
        // 객체를 만들 때 생성자가 매개변수를 가져감 (문자열 리터럴은 큰따옴표 필수)
        Student test = new Student("timo", 1); 

        System.out.println("이름: " + test.name); // 이름: timo
        System.out.println("학년: " + test.grade); // 학년: 1
    }
}

생성자 오버로딩

메소드 오버로딩처럼 생산자가 여러개 있는것을 말한다. 단 매개변수는 다르게!!!!

public class Student {
    String name;
    int age;

    // 1번 생성자: 아무 재료도 없을 때
    Student() {
        name = "해리 포터";
        age = 20;
    }

    // 2번 생성자: 이름만 던져줄 때
    Student(String n) {
        name = n;
        age = 20; // 나이는 기본값 세팅
    }

    // 3번 생성자: 이름과 나이를 둘 다 던져줄 때
    Student(String n, int a) {
        name = n;
        age = a;
    }
}

public class OverloadingTest {
    public static void main(String[] args) {
        // 활용하면 각각 맞는 생성자가 알아서 호출된다!
        Student s1 = new Student();              // 1번 호출 -> 해리 포터, 20
        Student s2 = new Student("스네이프");       // 2번 호출 -> 스네이프, 20
        Student s3 = new Student("덤블도어", 150);  // 3번 호출 -> 덤블도어, 150
    }
}

this() 호출

매개변수의 이름과 필드의 이름이 같을때 사용한다. this.를 붙이면 필드가 된다.

class Student {
String name; //필드 
Student(String name) { //매개변수, student 생산자가 문자열 하나를 받는다 
name = name; }

생산자 안에서 name = name이 된다. 매개변수끼리만 왔다갔다하고 끝나서 name이라는 객체는 비어있다.

class Student {
String name;
Student(String name) {
this.name = name; //객체가 가지고 있는 이름, name은 생산자에 들어온 값
}
}

예를 들어 반에 A에게 저쪽 A에게(동명이인) 책을 가져다주라 하면 헷갈려서 구분하는거다.

0개의 댓글