클래스란 객체를 정의해 놓은 것이며, 실생활에서 사용하는 개념을 코드로 표현하기 위한 수단이다.
클래스는 속성과 행위를 가지고 있다.
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며 클래스로부터 만들어진 객체를 클래스의 인스턴스라고 함.
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조 변수의 타입은 인스턴스의 타입과 일치해야한다.
메서드 앞에 static이 붙어 있으면 클래스 메서드이고, 안 붙어있으면 인스턴스 메서드이다.
클래스 메서드는 객체를 생성하지 않고도 호출이 가능하지만, 인스턴스 메서드는 반드시 객체를 생성해야만 호출이 가능하다.
생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
인스턴스 변수의 초기화 작업에 주로 사용된다.
클래스와 같은 이름으로 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다.
생성자도 오버로딩이 가능하기 때문에 하나의 클래스에 여러개의 생성자가 존재해도 된다.
그렇지만 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하지는 않는다.
클래스 내에 생성자가 하나도 없을 때만 컴파일러가 자동적으로 기본 생성자를 추가해준다.
생성자 간에도 생성자의 이름으로 클래스 이름 대신 this를 사용하고, 한 생성자에서 다른 생성자를 호출할 때 무조건 첫줄에서 호출을 할 때 서로 호출이 가능하다.
return의 의미반환타입이 void가 아닌 경우 중괄호안의 구현부에 return 반환값;이 반드시 포함되어야한다.
void인 경우 컴파일러가 메서드의 마지막에 return;를 자동으로 추가해서 아무 문제가 없다
작업을 수행한 결과인 반환값을 호출한 메서드로 전달하는데, 이 값은 반환타입과 일치하거나 적어도 자동 형변환이 가능해야한다.
-return문은 단 하나의 값만 반환할 수 있다.
this의 의미일단 먼저 this의 사용에 대해서 알아보자.
생성자의 매개 변수로 선언된 변수의 이름과 인스턴스 변수의 이름이 같은 경우, 두 변수가 서로 구별이 안되기 때문에 인스턴스 변수 앞에 this를 사용한다.
this는 참조 변수로 인스턴스 자신을 가리키는데, 인스턴스의 주소가 저장되어 있다.
this는 인스턴스 멤버만 사용이 가능하고, static 메서드에서는 사용할 수 없다.
또한 가장 첫줄에서 사용해야한다.
한 클래스 내에서 같은 이름의 메서드를 여러개 정의하는 것.
그렇지만 매개변수의 개수 또는 타입이 달라야한다.- 반환 타입은 아무런 영향을 주지 않는다.
대표 적인 예가 println 메서드!
오버로딩이 안된다면, 근본적으로는 같은 기능을 하는 메서드들이지만 이름을 다 다르게 붙여야하고, 사용할 때 이름을 일일이 구분해서 기억해야하기 때문에 부담스럽다. 그렇기 때문에 메서드의 이름을 절약할 수 있음