클래스는 객체에 대한 설계도이다. 클래스는 아는 것(인스턴스 변수)와 하는 것(메서드)를 가지고 있다.
메서드에는 매개변수를 넘길 수 있다. 호출하는 쪽에서 넘기는 것은 인자. 메서드에서 받는 것은 매개변수이다. 메서드에서 매개변수를 받도록 선언했다면 그 메서드를 호출할 때 반드시 무언가를 전달해야한다.
메서드에서 특정 값을 리턴할 수도 있다. 사실은 자바는 리턴값의 사용 여부에 전혀 신경을 쓰지 않지만, 리턴 해주기로 했다면 반드시 뭔가 돌려주는 것이 좋다 …
메서드에 두개 이상의 인자를 전달할 수도 있다. 하지만 반환값은 리스트나 배열 등을 활용하지 않는 이상 하나만 돌려줄 수 있다.
자바가 값을 주고받을 때, 원본이 아닌 복사본으로 전달된다. 값으로 전달한다는 것은 복사본을 전달하는 것이다. 중요해서 두번씀
x라는 변수에 7을 담아서 매개변수 z에 대한 인자로 넘긴다면 넘어가는 것은 7의 복사본이라서 함수 내에서는 원본 변수인 x를 조작할 수 없다. (비교대조 : C++의 레퍼런스 변수)
함수의 대표적인 활용으로는 게터(접근자)와 세터(변경자)가 있다.
캡슈화는 인스턴스 변수는 private로, 게터와 세터는 public으로 열어서 점 연산자(.)로 원본 변수에 접근할 수 없도록 한다. 캡슐화를 하지 않으면 어떤 개발자가 코드를 사용하면서 접근하면 안되는 레퍼런스 변수에 점 연산자로 접근해서 맞지 않는 값으로 바꿀 수 있다 … 인스턴스 변수가 그냥 노출된 경우에는 이런 경우에 아무 것도 할 수 없지만 변수를 변경할때 반드시 세터를 거치게 하면 값의 유효성을 검증한 다음에 넣는 등 조치를 취할 수 있다. (키에 음수가 안들어가도록 한다던지)
인스턴스 변수를 선언할 때에는 이름과 타입을 지정해야하고, 동시에 변수를 초기화할 수 있다. 만약 레퍼런스변수가 초기화되지 않는다면, 자바가 기본값을 넣어준다.
| 타입 | 기본값 |
|---|---|
| 정수 | 0 |
| 부동소수점 수 | 0.0 |
| 불리언 | false |
| 레퍼런스 | null |
==연산자는 그 변수 값의 비트 패턴을 비교하는 연산자이므로 원시 타입 두 개를 비교하거나 레퍼런스가 같은 객체를 참조하고 있는지 (힙에 들어있는 똑같은 객체를 참조하는지) 확인할 때 쓴다.
서로 다른 두 객체가 같은지 확인할 때는 equals() 메서드를 사용한다. 객체의 동치(equality)의 기준은 객체의 타입에 따라 달라질 수 있다.