클래스
클래스
클래스란?
‘객체를 정의해놓은 것’ 또는 ‘객체의 설계도 또는 틀’ 이라고 정의할 수 있다.
또는 데이터와 함수의 결합.
객체란?
‘실제로 존재하는 것’이라는 의미가 있지만 실제로는 사물이외에도 개념이나 논리와 같은 것들을 객체로 정의하여서 사용되어 진다.
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 ‘인스턴스화’라고 한다.
반대로 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
결국 객체와 인스턴스는 같은 의미이지만, 객체는 모든 인스턴스를 대표하는 포괄적 의미를 갖는다.
인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 가진다.
인스턴스화
클래스 ------------ > 인스턴스(객체)
클래스를 만드는 방법
class Human {
String name;
int age;
boolean sex;
void ageUp();
void changeName();
void isMan();
}
클래스는 객체의 모든 속성과 기능이 정의되어야 한다.
객체 만드는 방법
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장.
Human human = new Human();
//Human클래스의 참조변수 human을 생성하고 Human인스턴스를 생성한 후, 생성된 Human인스턴스 주소를 human참조변수에 저장.
객체는 new 키워드를 통해서 생성이 가능하다.
먼저 연산자 new에 의해 클래스의 인스턴스가 힙영역에 생성이 된다. 이때 생성자가 기본 생성자이므로 자료형의 기본값으로 생성이 된다.
이렇게 생성된 인스턴스는 클래스의 참조변수에 의해 접근이 가능하다.
위의 코드에서는 참조변수 human을 통해 Human클래스의 인스턴스 주소를 담아서 접근한다.
인스턴스는 참조변수를 통해서만 다룰수 있고, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
메소드
특정작업을 수행하는 일련의 문장들을 하나로 묶은 것.
-사용이유
1.높은 재사용성.
2.중복된 코드의 제거.
3.프로그램의 구조화.
메소드 사용방법
반환타입 메소드 이름 (타입 변수명, 타입 변수명...) {
//메소드 수행 코드
}
메소드 오버로딩
파라미터의 갯수나 타입이 다르다면 동일한 이름의 메소드명을 사용해 메소드를 정의할 수 있는 기법.
매개변수는 동일하고 리턴타입이 다른 경우에는 메소드 오버로딩이 성립하지 않는다.
메소드 오버라이딩
상위 클래스가 정의한 메소드를 가져와서 하위클래스에서 변경하거나 확장하는 기법이다.
생성자
인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.
-조건
1.생성자의 이름은 클래스의 이름과 같아야 한다.
2.생성자는 리턴값이 없다.
클래스명(타입변수명,타입변수명) {
//인스턴스 생성시 수행 코드.
}
연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.
생성자는 단지 인스턴스 변수들의 초기화에서만 사용되는 메서드 이다.
Human h = new Human();
1.연산자 new에 의해 힙영역에 Human클래스의 인스턴스가 생성된다.
2.생성자 Human()에 의해 초기화가 수행된다.
3.Human클래스 타입의 참조변수 h에 연산자 new의 결과로 생성된 인스턴스의 주소가 저장된다.
this
클래스가 인스턴스화 되었을때 자기 자신의 메모리 주소를 가지고 있다.
또한 클래스 내부의 필드이름과 메소드를 통해 넘어온 파라미터의 변수명이 동일한 경우 this키워드를 통해 클래스 내부의 필드이름과 파라미터 이름을 구분해 준다.
this()키워드는 생성자에서 다른 생성자를 호출 할때도 사용되어 진다.