변수의 자료형은 기본 자료형(int, float, double 등)과 참조 자료형(String, Date 등)으로 나뉜다.
참조 자료형은 클래스형으로 변수를 선언하며, 클래스에 따라 사용하는 메모리의 크기가 다르다. 또한 해당 변수에 대해 생성해야 사용할 수 있다.(String 클래스는 예외적으로 생성하지 않고 사용가능!!)
ex) Subject korea = new Subject(); [subject 클래스형으로 선언 / new 로 생성]
접근 제어 지시자(access modifier)는 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드이다.
- private : 같은 클래스 내부에서만 접근 가능
- 아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능 ( 상속 관계라도 패키지가 다르면 접근 불가)
- protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
- public : 클래스의 외부 어디서나 접근 할 수 있음
get() / set() 메서드 : private 으로 선언된 멤버 변수(필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공할 수 있다. get() 메서드만 제공 되는 경우 read-only 필드라고 하며, 이클립스에서 자동으로 생성된다. (오른쪽 마우스 클릭 수 source -> generate getters and setters 클릭하면 생성됨)
굳이 이렇게 변수를 private으로 설정하고 get set 메서드를 이용하는 이유는.. 예를 들어 아래와 같은 상황에서, 멤버 변수가 private이 아닌 경우에는 date라는 BirthDay 클래스형 변수를 생성했을 때 date.month = 30; 과 같이 값을 넣어버릴 수 있다. 하지만 private으로 설정하고 get set 메서드를 이용하는 경우 date.getMonth(30); 과 같이 사용해 변경해주어야 하므로 유효값 여부를 판단해서 값을 변경할 수 있게 된다. 즉 변수가 private 일때 각 변수에 대한 제한을 public 메서드에서 제어 할 수 있다!
객체 지향 프로그램에서 정보 은닉은 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 객체의 오류를 방지하여 클라이언트 객체가 더 효율적으로 객체를 활용할 수 있도록 해준다.
캡슐화(encapsulation)는 꼭 필요한 정보와 기능만 외부에 오픈하는 것이라 보면 된다. 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현 하게 하며 각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화 한다.
this라는 키워드는 인스턴스 자신의 메모리를 가리킨다. 생성자에서 또 다른 생성자를 호출 할 때 사용하며, 자신의 주소(참조값)을 반환 한다. 만약 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없다. (= this() 코드 이전에 다른 코드 작성 못 함!)
여러 인스턴스에서 공통으로 사용하는 변수를 선언할 땐 static 키워드를 사용한다. 여러 인스턴스가 공유하는 기준 값이 필요한 경우 사용하며, 학생마다 새로운 학번이 필요하거나, 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여하거나, 회사에 사원이 입사할때 마다 새로운 사번이 필요한 경우 등이 있겠다.
처음 프로그램이 메모리에 로딩될 때 메모리를 할당 받으며 static int serialNum; 와 같이 사용한다. 클래스 변수, 정적변수라고도 하며 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조하여 사용 가능하다.
(ex. Student.serialNum = 100; )
배열은 동일한 자료형의 순차적 자료 구조로, 아래와 같은 방법으로 선언할 수 있다. 배열은 선언과 동시에 자료형에 따라 초기화 된다. ( 정수는 0, 실수는 0.0, 객체는 null 값이 들어감!)
int[] arr1 = new int[10];
int arr2[] = new int[10];
배열을 순차적으로 순회할 때 for문을 이용해 아래와 같이 간단하게 사용할 수 있다.
for( 변수 : 배열) {
}
기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만, 객체 배열의 경우엔 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당되고 각 요소 객체는 생성하여 저장해야한다.
'etc... > 패스트캠퍼스 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 최종 후기 (0) | 2021.12.07 |
---|---|
패스트캠퍼스 챌린지 30일차 - Part1. Ch10 (0) | 2021.11.30 |
패스트캠퍼스 챌린지 29일차 - Part1. Ch10 (0) | 2021.11.29 |
패스트캠퍼스 챌린지 28일차 - Part1. Ch10 (0) | 2021.11.28 |
패스트캠퍼스 챌린지 27일차 - Part1. Ch9 (0) | 2021.11.27 |