클래스는 변수와 함수를 가질 수 있으며 클래스 안에 있는 변수를 멤버변수라 하며 함수는 멤버함수라 한다.
클래스로 할 수 있는 일은?
1. 인스턴스 생성
2. 참조형 변수 선언
1. 인스턴스 생성
클래스로 인스턴스를 생성하는 방법은 다음과 같다.
클래스명 변수명 = new 클래스명();
(인스턴스를 생성할 때 어떤 생성자를 이용하느냐에 따라서 괄호안에 값이 여러가지가 들어갈 수 있다. 이 부분은 나중에 정리하도록 하자.)
Apple라는 클래스가 있고 그러한 틀을 가진 독자적인 객체를 생성하고자 할 때 다음과 같이 인스턴스를 생성하면 된다.
코드를 들여다 보면 Apple이라는 클래스는 price라는 멤버변수와 add라는 멤버함수를 갖는다.
Apple apple = new Apple(); 에서 apple이라는 독자적인 인스턴스가 생성 됐다.
apple은 생성될 때 0의 값을 갖는 price 변수와 두 int타입의 매개변수를 갖는 add 함수를 갖게 된다.
인스턴스에 .을 찍으면 멤버변수와 멤버함수에 접근할 수 있다.
즉 apple의 price는 초기에 값이 0이었으나 접근하여 변경해주었다.
또한 두 정수를 더한 값을 리턴하는 add함수를 호출했다.
그렇다면 Apple을 통해 인스턴스를 생성할 때 직접 price값을 정할 수 있을까?
이전 코드와 크게 달라진 두가지는 생성자와 this의 등장이다.
생성자를 만들 때 생성자의 이름은 반드시 클래스의 이름과 같아야한다.
this는 바로 자기 자신에 접근을 하는 것이다. 따라서 Apple클래스의 price에 접근한 것이 this.price코드다.
클래스에 생성자가 없었을 때 인스턴스를 생성한다면
Apple apple = new Apple(); 과 같이 특별한 의미가 없어 보이는 빈괄호를 사용했었다.
지금 부터 인스턴스를 생성하는 방법을 다시 정리 하겠다.
클래스명 변수명 = new 생성자;
즉 생성자가 없는 클래스에는 기본적으로 매개변수를 갖지 않는 생성자가 제공 됐기 때문에
이전 코드에서 Apple apple = new Apple();는 틀린 코드라고 할 수 없다.
이 코드에는 int의 매개변수를 갖는 생성자를 만들었기 때문에
Apple apple = new Apple(5);는 틀린 코드라고 할 수 없다.
생성자 내부에서는 매개변수로 들어온 값으로 price를 변경하기 때문에 새롭게 생성된 인스턴스의 price는
5를 출력하는 것이 맞다.
틀린 코드가 돼버린다. 에러메세지를 살펴보면 매개변수가 없는 생성자는 정의되지 않았다고 나온다.
결과적으로 생성자가 없는 클래스는 매개변수가 없는 생성자를 제공하지만, 매개변수가 있는 생성자를 만들었다면
매개변수가 없는 생성자를 재정의 해서 사용하거나 사용할 수 없다.
매개변수를 갖지 않는 생성자, 하나의 매개변수를 갖는 생성자, 두개의 매개변수를 갖는 생성자로 세가지 인스턴스를 생성했다.
매개변수를 갖지 않는 생성자의 price는 1을 갖게 만들었고
하나의 매개변수를 갖는 생성자는 price를 매개변수를 갖게 하였고
두개의 매개변수를 갖는 생성자는 price의 매개변수와 mult의 매개변수를 곱한 값을
매개변수로 갖게 했다.
따라서 차례대로 1,10,20을 출력하는 것은 맞는 것이다.
2. 참조형 변수 선언
앞서 변수 항목에서 다뤘듯이 변수는 참조형 변수와 자료형 변수 두가지로 분류할 수 있고
대표적인 참조형 변수는 String과 Integer가 있다고 했다.
참조형 변수선언은 자료형 변수 선언과 모양이 같다.
클래스명 변수명 = 값;
String은 문자열을 값으로 가질 수 있고 Integer는 정수를 값으로 가질 수 있다.
ex) String str = "hello"; 또는 Integer integer = 10;
클래스는 참조형 변수선언이 가능하다고 했으므로 String과 Integet는 int, char와 달리 클래스라고 할 수 있다.
그렇다면 String str = new String("hello"); 와 Integer integer= new Integer(10);은 맞는 코드라고 할 수 있을까?
그렇다. 다음과 같은 코드가 가능하다.
String 과 Integer는 클래스기 때문에 각각 문자열과 정수를 매개변수로 갖는 생성자를 통해 인스턴스를 생성할 수 있다.
또한 int 타입과 Integet클래스의 각각의 변수를 같이 계산해도 정상적으로 작동한다.
'JAVA 기초 정리' 카테고리의 다른 글
JAVA 객체지향과 은닉성 (0) | 2020.03.04 |
---|---|
JAVA 객체지향과 상속성 (0) | 2020.03.04 |
JAVA 반복문 사용하기 (0) | 2020.03.04 |
JAVA 변수란 무엇인가 (0) | 2020.03.04 |
HelloWorld 출력하기 (0) | 2020.03.03 |
댓글