on
클래스와 인스턴스
클래스와 인스턴스
클래스 = 데이터 + 메소드
클래스 내에 위치한 변수 = 인스턴스 변수
클래스 내에 정의된 메소드 = 인스턴스 메소드
메소드 내에 위치한 변수 = 지역 변수
클래스가 정의되고 나서는 메모리상에 인스턴스라는 것을 찍어내야 사용 가능하다.
new BankAccount(); // 클래스 BankAccount의 인스턴스화
하지만 이렇게 인스턴스를 만들기만 해서는 사용할 수 없고, 만들어진 인스턴스를 참조할 수 있는 무엇인가가 필요한데, 이 무엇인가를 가리켜 참조변수라고 한다.
BankAccount myAcnt1; // 참조변수 선언 myAcnt1 = new BankAccount(); // 참조변수 myAcnt1가 새로 생성되는 인스턴스를 가리킴
위 와 같이 인스턴스를 생성하면 생성된 인스턴스의 주소값이 반환되는데, 즉 참조변수에는 생성된 인스턴스의 주솟값(참조값)이 저장되는 것이다. 이 참조변수를 통해 해당 인스턴스의 메소드를 호출하는 방법은 아래와 같다.
myAcnt1.deposit(1000); // myAcnt1이 참조하는 인스턴스의 deposit 호출
참조변수 또한 말그대로 변수이기 때문에 참조하는 인스턴스를 바꿀 수 도 있다. 또한 메소드의 인자로 인스턴스의 참조값을 전달받아서 사용하는 것도 가능하다.
public static void check(BankAccount acc){ // 매개변수(acc)를 통해 참조값을 인자로 받아들임 acc.checkBalance(); // acc가 참조하는 인스턴스의 메소드 호출 }
때로는 참조변수가 참조하는 인스턴스와 관계를 끊고 아무런 인스턴스도 참조하지 않도록 할 필요가 있는데, 이때는 참조변수에 null을 대입하면 된다.
+사실은 String또한 자바에서 제공하는 클래스의 이름이다.
이 인스턴스를 생성할 떄는 각각의 인스턴스를 구분할 수 있는 정보가 추가되어야 하는데, 이 인스턴스의 초기화를 위해 인스턴스 생성 시 반드시 한번 호출을 해서 초기화를 진행하는 일종의 메소드가 바로 생성자이다. 그렇기에 생성자를 생성자 메소드로 표현하는 경우도 있다. 하지만 생성자는 메소드와는 차이가 있다. 차이점은 아래 2가지와 같다.
생성자의 이름은 클래스의 이름과 동일해야 한다.
생성자는 값을 반환하지 않고, 반환형도 표시하지 않는다.
위의 두 조건을 모두 만족하면 자바 컴파일러에 의해 생성자로 인식된다. 예시는 아래와 간다.
class BankAccount{ String accNumber; String ssNumber; int balance; public BankAccount(String acc, String ss, int bal){ // 생성자 accNumber = acc; ssNumber = ss; balance = bal; } }
생성자를 정의해 주었으니 인스턴스의 생성 문장 또한 바뀌게 되었다.
BankAccount yoon = new BackAccount("12-34-90", "9834983-349387498", 1000);
소괄호 안에 값을 전달하고 있는데, 이 값들은 생성자가 호출될 때 생성자의 매개변수로 전달이 되며 인스턴스 변수를 초기화한다. 이렇게 되면 비로소 각각의 인스턴스를 구분할 수 있게 된다.
물론 이렇게 생성자를 직접 정의해 주지 않고도 인스턴스를 생성할 수도 있다. 만약 이럴 경우엔 자바 컴파일러가 디폴트 생성자를 클래스의 정의에 넣어준다.
class BankAccount{ int balance; public BackAccount(){} // default 생성자 (컴파일러에 의해 자동 삽입됨) }
이와 같이 인스턴스의 생성 규칙인 생성자의 호출은 유지가 되지만, 디폴트 생성자가 삽입이 되더라도 생성자는 아주 예외적인 상황이 아니라면 직접 정의해 주는 것이 좋다.
클래스의 이름 규칙
클래스의 가장 보편적으로 선택하는 이름 규칙을 가리켜 Camel Case모델 이라고 한다. (올록볼록 낙타의 등과 비슷)
클래스의 이름의 첫 문자는 대문자로 시작한다.
둘 이상의 단어가 묶여서 하나의 이름을 이룰 때, 새로 시작하는 단어는 대문자로 한다.
ex> Circle + Point = CirclePoint
메소드와 변수의 이름 규칙
클래스의 이름과 구분되는 변형된 Camel Case를 적용한다. 변형된 규칙에서는 첫 문자를 소문자로 한다.
ex > Your + Age = yourAge
상수의 이름 규칙
모두 대문자로 구성한다.
ex> final int COLOR = 9;
공유하기 글 요소 저작자표시
from http://sweet-smell.tistory.com/113 by ccl(A) rewrite - 2021-11-25 10:02:07