TIL

DY_DEV·2023년 2월 26일
0

TIL

목록 보기
3/17

2월 넷째 주 TIL 요약정리.

목차
1.클래스
2.객체
3.필드
4.static
5.메소드
6.메소드 오버로딩

클래스

클래스: 객체를 정의한 설계도, 또는 틀을 의미한다. 클래스는 객체를 생성하는데 사용되며 객체는 클래스에 정의되고 설계된 내용 그대로 생성된다.
- 클래스는 객체 그 자체가 아니다.
- 인스턴스: 클래스를 통해 생성된 객체
- 클래스의 요소: 필드, 메서드, 생성자, 이너클래스

(1) 필드 - 클래스의 속성을 나타내는 변수입니다. 자동차로 예를 들면 모델명, 컬러, 바퀴의 수 등이 포함될 수 있습니다.

(2) 메서드 - 클래스의 기능을 나타내는 함수입니다. 자동차를 예로 들면 시동하기, 가속하기, 정지하기 등이 포함될 수 있습니다.

(3) 생성자 - 클래스의 객체를 생성하는 역할을 합니다. 뒤의 내용에서 좀 더 자세히 학습하도록 합니다.

(4) 이너 클래스 - 클래스 내부의 클래스를 의미합니다.

객체

객체는 곧 인스턴스다.

  • 멤버: 필드, 메서드, 이너 클래스
  • 필드와 메서드는 각각 클래스가 가지는 속성과 기능을 대표한다.

참조변수란?
실제 데이터가 위치해 있는 힙 메모리의 주소를 저장하는 변수를 의미한다.
- new 생성자 : 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것.
- 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유한다.
- 생성된 객체에서 필드값은 실제 저장공간이 객체 내부에 있다는 것과 메서드는 다른 영역에 하나만 저장해놓고 공유한다.

참조 변수명.필드명 // 필드값 불러오기
 참조 변수명.메서드명() // 메서드 호출

필드

필드: 클래스에 포함된 변수, 객체의 속성을 정의할 때 사용된다.
(클래스 변수, 인스턴스 변수, 지역 변수 이렇게 세 가지가 존재한다.)

  • 필드의 구분
    • 클래스 변수 vs 인스턴스 변수
    • static 키워드의 유무 (static 키워드가 함께 선언된 것은 클래스 변수, 그렇지 않은 것은 인스턴스 변수)
    • 위 두 가지 변수 유형에 포함되지 않고 메서드 내에 포함된 모든 변수를 지역변수
      라 부릅니다.
class Example { // => 클래스 영역
	int instanceVariable; // 인스턴스 변수
	static int classVariable; // 클래스 변수(static 변수, 공유변수)

	void method() { // => 메서드 영역
		int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
	}
}
  • instanceVariable, classVariable 은 클래스 영역에 선언된 멤버변수다.
  • static키워드(이어지는 챕터에서 학습 예정)의 유무에 따라 classVariable변수가 클래스 변수, 그리고 키워드가 있지 않은 instanceVariable 변수가 인스턴스 변수가 됩니다.
  • 메서드 내부의 블럭에 선언되어있는 지역변수 localVariable

인스턴스 변수 : 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될 때 만들어집니다.

  • 클래스를 통해 만들어진 인스턴스는 힙 메모리의 독립적인 공간에 저장되고, 동일한 클래스로부터 생성되었지만 객체의 고유한 개별성을 가집니다.

클래스변수 : 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유

  • 한 클래스로부터 생성되는 모든 인스턴스 들이 특정한 값을 공유해야하는 경우에 주로 static 키워드를 사용하여 클래스 변수를 선언하게 됩니다.
  • 또한, 클래스 변수는 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명 을 통해 사용이 가능합니다.

지역변수: 지역변수는 메서드 내에 선언되며 메서드 내({} 블록)에서만 사용가능한 변수. 스택 메모리에 저장됨> 메소드 종료와 동시에 소멸됨

필드 변수와 지역변수의 차이점?

= 초기값
직접 초기화 하지 않으면 값을 출력할 때 오류가 발생하는 지역변수와는 다르게 필드 변수는 직접적으로 초기화를 실행하지 않더라도 강제로 초기화가 이뤄집니다.

static 키워드

static은 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드. static 키워드가 붙어있는 멤버를 정적멤버라 부른다.

static 키워드를 사용하면 모든 인스턴스에 공통적으로 적용되는 값을 공유할 수 있습니다.

  • static 키워드로 정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명만으로도 사용이 가능하다.
    • 이유: static 키워드로 선언된 정적 멤버는 클래스 내부에 저장 공간을 가지고 있기 때문에 객체 생성 없이 곧바로 사용할 수 있어서.
  • 먼저, 정적 필드는 객체 간 공유 변수의 성질이 있다. 이것은 메서드에도 동일하게 적용됩니다. 일반적인 메서드 앞에 static 키워드를 사용하면 해당 메서드는 정적 메서드가 됩니다. 정적 메서드도 정적 필드와 마찬가지로 클래스명만으로 바로 접근이 가능합니다.
  • 정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사용할 수 없다는 것입니다. 이 점은 잘 생각해보면, 사실 너무 당연한 이야기입니다. 정적 메서드는 인스턴스 생성 없이 호출이 가능하기 때문에 정적 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수 있기 때문입니다.

static 변수와 instance 변수

  • 자바에서는 모든 객체와 메모리를 공유할 때 정적(static)이라는 키워드를 사용한다.

  • 클래스메소드에서 클래스 변수 접근 가능

  • 클래스 메소드에서 인스턴스 변수 접근 불가

  • 인스턴스 메서드에서는 둘다 접근이 가능함

  • 참조를 하려면 메모리 어딘가에 인스턴스가 있어야 함

Car car = new Car();

메소드

특정 작업을 수행하는 일련의 명령문들의 집합

클래스의 기능에 해당

  • 메소드 시그니처 / 메소드 바디로 구분
자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처
	메서드 내용 // 메서드 바디
}
  • 메서드의 반환타입이 void가 아닌 경우에는 메서드 바디({} )안에 반드시 return 문이 존재해야 합니다.
  • 결과값은 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 합니다.
  • 메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야합니다. 그 후 포인트 연산자(.)를 통해 메서드를 호출할 수 있습니다. 반면, 클래스 내부에 있는 메서드끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있습니다.

메소드 오버로딩

하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것

메서드를 오버로딩하려면

- 메서드의 이름이 같아야 합니다.
- 매개변수의 개수 또는 타입이 달라야 합니다.

오버로딩의 장점?
하나의 메서드로 여러 경우의 수를 해결할 수 있다.

0개의 댓글