본문 바로가기

Programming language/Java

Java - 4 [Class, 접근제어자]

Class

자바의 클래스는 아래와 같은 구조를 갖는다.

public class Person {
    String name;
    int age;
    int cashAmount;
    // 은행 계좌?
}

변수와 메소드의 모둠이며 이것을 선언할 때는 일반 자료형과 같이 선언한다.

public class BankAccount {
    int balance;
    // 소유인?
}
public class Person {
    String name;
    int age;
    int cashAmount;
    BankAccount account;
}

클래스안에 다른 클래스를 선언하여 자료형처럼 사용이 가능하다.

 

Method

메소드의 형태는 다음과 같다.

- 메소드의 리턴 타입

- 메소드의 이름

- 파라미터

- 기능의 수행부분

 

Instance

클래스를 선언하고 이에 따라 객체들이 생성되었을 때 이러한 객체들을 인스턴스라고 한다.

예를 들면 클래스는 거푸집이고 인스턴스는 거푸집으로 찍어낸 결과물인것이다.

 

        //사람 선언
        Person p1 = new Person();
        p1.name = "김신의";
        p1.age = 28;
        p1.cash_amount = 30000;

        //은행계좌 생성
        BankAccount a1 = new BankAccount();
        a1.balance = 1000000;
        p1.account = a1;
        a1.owner = p1;

  

접근제어자

public class Person {
    private int age;

    public void setAge(int newAge) {
        if (newAge > 0) {
            age = newAge;
        }
    }

    public int getAge() {
        return age;
    }
}

public은 외부에서 접근을 허용해주는 접근제어자 이다.

즉, main 메소드에서 그냥 Person 객체를 설정하고 해당 인스턴스를 통해서 age를 접근해 통제할수 있다는 이야기이다.

 

Person p1 = new Person();

p1.age = -10;

이게 된다는 이야기이다. 그러면 매우 위험하다.

클래스를 통해서 수정가능해야하지 아무 곳에서나 수정이 가능하다면

객체의 독립성이 심하게 훼손되고 DB에서는 해킹의 위험이 항시 열려있게 되는 것이다.

 

고로 private라는 접근제어자를 설정해두면 age 변수는 클래스 안에서 setter와 getter

메소드로 제어가 가능하게 된다.

 

public class Driver {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setAge(28);
        p1.setAge(-10);
        System.out.println(p1.getAge());
    }
}

이러한 형식으로 접근이 가능하기 때문에 변수의 독립성이 완화 될수 있다.

'Programming language > Java' 카테고리의 다른 글

Java - 5 [생성자, this]  (0) 2020.10.16
Java - IntelliJ Live template  (0) 2020.10.14
Java - 3 [배열, for-each, 다중배열]  (0) 2020.10.12
Java - 2 [형변환, 조건문, 반복문]  (0) 2020.10.12
Java - 1 [변수, 연산자]  (0) 2020.10.12