클래스의 정의 : 클래스란 객체를 정의해 놓은 것입니다.
클래스의 용도 : 클래스는 객체를 생성하는데 사용합니다.
클래스의 탄생 과정
1. 변수 : 하나의 데이터를 저장할 수 있는 공간
2. 배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체 : 서로 연관된 여러 데이터(종류 관계 X) 를 하나로 저장할 수 있는 공간
4. 클래스 : 데이터와 함수의 결합(구조체 + 함수)
객체의 정의 : 실제로 존재하는 것! , 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 속성과 기능에 따라 다릅니다.
객체와 인스턴스 용어 정리
- 객체 : 모든 인스턴스를 대표하는 일반적인 용어 (Tv 객체)
- 인스턴스 : 특정 클래스로부터 생성된 객체 (Tv 클래스를 사용해서 만든 Tv인스턴스)
- 인스턴스화 : 클래스 => 인스턴스(객체)
객체의 구성요소
객체 = 속성(변수) + 기능(메서드)
클래스명 변수명;
클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명;
생성된 객체의 주소를 참조변수에 저장
객체 생성 방법
Tv t;
Tv 클래스 타입의 참조변수 t를 선언
t = new Tv();
Tv인스턴스를 생성한 후
생성된 Tv인스턴스의 주소를 t에 저장
클래스 영역 : 클래스 변수
- 클래스가 메모리에 올라갈 때 생성됩니다.
- 객체 생성을 하지 않아도 생성되고 언제든지 사용 가능합니다.
- 접근 방법 : 클래스명.클래스변수명
클래스 영역 : 인스턴스 변수- 객체가 생성될 때 인스턴스 변수가 생성됩니다.
- 접근 방법 : 참조변수명.인스턴스변수명
메서드 영역 : 지역 변수- 메서드가 호출 되서 실행될 때 생성됩니다.
- 메서드가 종료되면 자동으로 제거됩니다.
반환타입 메서드이름 (타입 변수명, 타입 변수명, ... ) // (선언부)
{
// 메서드가 호출되면 수행할 코드(구현부)
}
장점
작성
실행 중인 메서드를 종료하고 호출한 곳으로 되돌아갑니다.
메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출 스택에 메모리가 할당, 종료되면 해제됩니다.
객체 생성 없이 '클래스이름.메서드이름()'으로 호출 : ex) Math.random()
인스턴스 멤버(인스턴스 변수, 인스턴스 메서드) 와 관련없는 작업을 하는 메서드
메서드 내에서 인스턴스 변수 사용 불가합니다.
인스턴스를 생성한 후, '참조변수.메서드이름()' 으로 호출
인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련된 작업을 하는 메서드
메서드 내에서 인스턴스 변수 사용가능합니다.
한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것입니다.
오버로딩의 성립 조건
1. 메서드 이름이 같아야 합니다.
2. 매개변수의 개수 또는 타입, 위치가 달라야 합니다.
3. 반환타입에는 영향을 받지 않습니다.
사용을 하는 목적
- 매개변수 즉, 입력하는 값이 다르지만 같은 기능을 수행하는 경우가 많을 때 사용성 및 효율을 높이기 위해 오버로딩을 사용합니다.
인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드' 입니다.
- 인스턴스 생성시 수행할 작업에 사용됩니다.
- 초기값이 필요한 인스턴스 변수의 값을 초기화 해줍니다.
생성 조건- 이름이 클래스 이름과 같아야 합니다.
- return 값이 없습니다.
- void는 붙이지 않습니다.
- 오버로딩 가능합니다.
기본 생성자- 매개변수가 없는 생성자를 의미합니다.
- 생성자를 하나도 선언되어 있지 않았을 때는 컴파일러가 자동으로 추가해 줍니다.
수동 / 자동 초기화
- 지역 변수는 수동으로 초기화 해야합니다.
- 지역 변수가 동작하는 스택 메모리는 재사용이 빈번하기 때문에 매번 초기화 해주면 성능이 떨어집니다.
- 그래서 그냥 해당 메모리에 있는 값으로 덮어 씌웁니다.
- 근데 해당 주소에 어떠한 값이 있는지 모르기 때문에 Java는 개발자에게 수동으로 초기화 하라고 요구합니다.
- C 언어에서는 이를 garbage value 라 부릅니다.(C언어와 Java의 차이를 비교하면 이해가 쉽습니다.)
- 멤버변수(인스턴스 변수, 클래스 변수)는 자동으로 초기화 됩니다.
멤버 변수의 초기화- 클래스 변수 : 클래스가 처음 로딩될 때 단 한번만 초기화 됩니다.
- 인스턴스 변수 : 인스턴스가 생성될 때 마다 초기화 됩니다.