2월 넷째 주 TIL 요약정리.
목차
1.클래스
2.객체
3.필드
4.static
5.메소드
6.메소드 오버로딩
클래스: 객체를 정의한 설계도, 또는 틀을 의미한다. 클래스는 객체를 생성하는데 사용되며 객체는 클래스에 정의되고 설계된 내용 그대로 생성된다.
- 클래스는 객체 그 자체가 아니다.
- 인스턴스: 클래스를 통해 생성된 객체
- 클래스의 요소: 필드, 메서드, 생성자, 이너클래스
(1) 필드 - 클래스의 속성을 나타내는 변수입니다. 자동차로 예를 들면 모델명, 컬러, 바퀴의 수 등이 포함될 수 있습니다.
(2) 메서드 - 클래스의 기능을 나타내는 함수입니다. 자동차를 예로 들면 시동하기, 가속하기, 정지하기 등이 포함될 수 있습니다.
(3) 생성자 - 클래스의 객체를 생성하는 역할을 합니다. 뒤의 내용에서 좀 더 자세히 학습하도록 합니다.
(4) 이너 클래스 - 클래스 내부의 클래스를 의미합니다.
객체는 곧 인스턴스다.
- 멤버: 필드, 메서드, 이너 클래스
- 필드와 메서드는 각각 클래스가 가지는 속성과 기능을 대표한다.
참조변수란?
실제 데이터가 위치해 있는 힙 메모리의 주소를 저장하는 변수를 의미한다.
- new 생성자 : 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것.
- 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유한다.
- 생성된 객체에서 필드값은 실제 저장공간이 객체 내부에 있다는 것과 메서드는 다른 영역에 하나만 저장해놓고 공유한다.
참조 변수명.필드명 // 필드값 불러오기
참조 변수명.메서드명() // 메서드 호출
필드: 클래스에 포함된 변수, 객체의 속성을 정의할 때 사용된다.
(클래스 변수, 인스턴스 변수, 지역 변수 이렇게 세 가지가 존재한다.)
static
키워드가 함께 선언된 것은 클래스 변수, 그렇지 않은 것은 인스턴스 변수)class Example { // => 클래스 영역
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스 변수(static 변수, 공유변수)
void method() { // => 메서드 영역
int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
}
}
static
키워드(이어지는 챕터에서 학습 예정)의 유무에 따라 classVariable
변수가 클래스 변수, 그리고 키워드가 있지 않은 instanceVariable 변수가 인스턴스 변수가 됩니다.localVariable
인스턴스 변수 : 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자()
를 통해 인스턴스가 생성될 때 만들어집니다.
클래스변수 : 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유
static
키워드를 사용하여 클래스 변수를 선언하게 됩니다.클래스명.클래스변수명
을 통해 사용이 가능합니다.지역변수: 지역변수는 메서드 내에 선언되며 메서드 내({} 블록
)에서만 사용가능한 변수. 스택 메모리에 저장됨> 메소드 종료와 동시에 소멸됨
= 초기값
직접 초기화 하지 않으면 값을 출력할 때 오류가 발생하는 지역변수와는 다르게 필드 변수는 직접적으로 초기화를 실행하지 않더라도 강제로 초기화가 이뤄집니다.
static
은 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드. static 키워드가 붙어있는 멤버를 정적멤버라 부른다.
static 키워드를 사용하면 모든 인스턴스에 공통적으로 적용되는 값을 공유할 수 있습니다.
static
키워드로 정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명
만으로도 사용이 가능하다.static
키워드로 선언된 정적 멤버는 클래스 내부에 저장 공간을 가지고 있기 때문에 객체 생성 없이 곧바로 사용할 수 있어서.static
키워드를 사용하면 해당 메서드는 정적 메서드가 됩니다. 정적 메서드도 정적 필드와 마찬가지로 클래스명만으로 바로 접근이 가능합니다.static 변수와 instance 변수
자바에서는 모든 객체와 메모리를 공유할 때 정적(static)이라는 키워드를 사용한다.
클래스메소드에서 클래스 변수 접근 가능
클래스 메소드에서 인스턴스 변수 접근 불가
인스턴스 메서드에서는 둘다 접근이 가능함
참조를 하려면 메모리 어딘가에 인스턴스가 있어야 함
Car car = new Car();
특정 작업을 수행하는 일련의 명령문들의 집합
클래스의 기능에 해당
자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처
메서드 내용 // 메서드 바디
}
void
가 아닌 경우에는 메서드 바디({}
)안에 반드시 return
문이 존재해야 합니다..
)를 통해 메서드를 호출할 수 있습니다. 반면, 클래스 내부에 있는 메서드끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있습니다.하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
메서드를 오버로딩하려면
- 메서드의 이름이 같아야 합니다.
- 매개변수의 개수 또는 타입이 달라야 합니다.
오버로딩의 장점?
하나의 메서드로 여러 경우의 수를 해결할 수 있다.