1. 클래스 (Class)
클래스 = 데이터 + 메소드
라고 쉽게 표현 하기도 한다.
클래스 내에 선언된 메소드를 인스턴스 메소드라 부른다.
인스턴스 변수는 멤버 변수 또는 필드 라 불리우기도 한다.
위 코드에서 메소드 내에서 선언된 result 변수와 달리 count 는 class 바로 하위에 위치해 있다.
이처럼 메소드 내에서 선언된 변수를 지역변수라 부르며 이런 지역 변수와 다르게 count 라 명명된 인스턴스 변수는
클래스 내에 위치한 메소드 내에서 접근이 가능하다.
클래스는 틀을 구성하는 것과 같다 라고 정의하는데 클래스를 이용하여 인서턴스를 찍어내듯이 사용하기 때문이다.
위 코드에서
new study();
와 같이 표현하여 클래스를 인스턴스화 하면 변수와 메소드를 담고있는 인스턴스가 만들어진다.
이는 한개 코드에서 여러개를 만들 수 있다.
이렇게 클래스를 정의하고 이를 기반으로 만들어진 인스턴스를 객체 라고도 표현한다.
그리고 이렇게 만들어진 인스턴스는 참조할수 있는 참조변수(Reference Variable) 가 필요하다.
참조변수의 선언은
study chapter1;
과 같이 참조변수 chapter1 로 선언한다.
그리고 이 참조변수가 인스턴스를 가리키게 할 수 있다.
study chapter1;
chapter1 = new study;
이와 같이 키워드 new 를 통해서 인스턴스를 생성하면 생성된 인스턴스의 주소값이 반환된다.
참조변수에 생성된 인스턴스의 주소값이 저장되는 것이다.
그리고 다음과 같이 참조변수의 선언과 인스턴스의 생성을 한 문장으로 묶을 수 있다.
study chapter1= new study;
그리고 나서 해당 인스턴스의 메소드를 호출하는 방법은 다음과 같다.
위의 코드와 같이 두개의 참조변수 chapter1 과 chapter2 가 가리키는 인스턴스가 서로 다름을 알 수 있다.
2. 참조변수의 특성
변수가 저장된 값을 바꿀 수 있는 것과 같이 참조변수도 참조한 인스턴스를 바꿀 수 있다.
그리고 하나의 인스턴스를 둘이상의 참조변수가 동시에 참조하는 것도 가능하다.
이전의 코드에서 line9 의 study1 chapter2 의 값을 chapter1 로 대입하여 chapter1 과 chapter2 가 하나의 인스턴스를 참조하고 있음을 볼 수 있다.
3. 참조 변수의 매개변수 선언
메소드를 호출하면서 인스턴스의 참조 값을 전달하는 것도 가능하다.
다음과 같이 14번 라인의 print_2의 input 을 매개변수로 받아 해당 메소드 내에서 aa 라는 참조변수가 참조하는 인스턴스의 메소드를 호출하였다.
따라서 메소드 내에서는 전달된 참조 값의 인스터스를 대상으로 메소드를 호출할 수 있다.
4. 참조 변수 끊기
참조변수가 참조하는 인스턴스와의 관계를 끊고 아무런 인스턴스를 참조하지 않도록 하기 위해서는 참조 변수에 null 을 입력하면 된다.
study1 chapter1 = new study1();
.
.
chapter1 = null;
로 선언하여 관계를 끊을 수 있다.
5. 생성자 (Constructor)
생성자는 인스턴스 생성 과정에서 초기화를 위해 자동으로 호출되는 일종의 메소드이다.
생성자의 특징은 다음과 같다.
ㄱ. 생성자의 이름은 클래스의 이름과 동일해야 한다.
ㄴ. 생성자는 값을 반환하지 않고 반환형도 표시하지 않는다.
위 2개의 조건을 모두 만족하면 자바 컴파일러에 의해 생성자로 인식된다.
위 코드의 21번 라인과 같이 클래스와 같은 이름으로 반환형을 표시하지 않은 메소드를 생성하였다.
이와 같이 생성자를 구성하여 인스턴스를 초기화 할 수 있다.
6. Default Constructor
생성자를 생략하여 클래스를 정의하게 되면 컴파일러는 default constructor 를 클래스의 정의에 넣어준다.
위의 코드를 예를 들면 보이지 않지만 컴파일러가
public study(){
}
라는 메소드를 생성하는 것이다.
이렇게 생성자는 내가 정의하지 않아도 자동으로 생성되어 아무것도 하지 않는다.
생성자 생성을 까먹더라도 생성자는 자동으로 생성되기 때문에 걱정할 필요가 없지만
코드를 작성할 때는 반드시 생성자를 기입하여 생성자에서 초기화를 진행해 주는 것이 좋다.
'JAVA' 카테고리의 다른 글
[JAVA] 접근 수준 지시자(Acess-level-Modifiers) (자바 독학하기10) (0) | 2021.06.22 |
---|---|
[JAVA] 패키지 (Package) (자바 독학하기9) (0) | 2021.06.21 |
[JAVA] 메소드 Method (자바 독학하기 7) (0) | 2021.06.08 |
[JAVA] 실행 흐름 컨트롤 (자바 독학하기 6) (0) | 2021.06.07 |
[JAVA] 연산자 (Operator) (자바 독학하기 5) (0) | 2021.06.03 |