<TIL> 18. 클래스와 객체, 메서드, 생성자....

YUJIN LEE·2023년 2월 21일
0

개발log

목록 보기
14/149

클래스: 객체를 정의해 놓은 것 / 객체를 생성하는데 사용

  • 객체 : 모든 인스턴스를 대표하는 일반적인 용어(Tv 객체)
  • 인스턴스: 특정 클래스로부터 생성객체(Tv 클래스를 사용해서 만든 TV 인스턴스)
  • 인스턴스화: 클래스 => 인스턴스(객체)

객체의 구성요소

객체 = 속성(변수) + 기능(메서드)

객체의 생성과 배열

객체의 생성

클래스명 변수명;
* 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명;
* 생성된 객체의 주소를 참조변수에 저장

객체 생성 방법
* Tv t; -> Tv 클래스 타입의 참조변수 t를 선언
* t = new Tv(); -> Tv 인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

객체 배열

객체 배열 == 참조변수 배열
* Tv[] tvArr = new Tv[3];
여러 개의 객체를 담을 수 있는 배열

클래스의 정의

클래스 == 데이터 + 함수

클래스의 탄생 과정
1. 변수: 하나의 데이터를 저장할 수 있는 공간
2. 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체: 서로 연관된 여러 데이터(종류 관계 X)를 하나로 저장할 수 있는 공간
4. 클래스: 데이터와 함수의 결합(구조체 + 함수)

클래스 == 사용자 정의 타입 -> 원하는 타입을 직접 만들 수 있다.

변수의 종류

선언 위치에 따른 변수의 종류


클래스 영역: 클래스 변수

  • 클래스가 메모리에 올라갈 때 생성
  • 객체 생성을 하지 않아도 생성되고, 언제든지 사용 가능
  • 접근 방법: 클래스명, 클래스 변수명

클래스 영역: 인스턴스 변수

  • 객체가 생성될 때 인스턴스 변수가 생성
  • 접근 방법: 참조변수명, 인스턴스변수명

메서드 영역: 지역 변수

  • 메서드가 호출되서 실행될 때 생성
  • 메서드가 종료되면 자동 제거

메서드

반환타입 메서드이름(타입 변수명, 타입 변수명, ...) // (선언부)
{
(구현부) // 메서드가 호출되면 수행할 코드
}

메서드의 장점과 작성

장점

  • 중복 코드 제거
  • 관리 용이
  • 재사용 가능

작성

  • 반복적으로 수행되는 여러 문장 메서드로 작성
  • 하나의 메서드는 한 가지 기능만 수행하도록 작성

함수

값을 입력 받아서 처리하고, 결과를 반환

return

실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.

  • 반환타입이 void가 아닌 경우, 반드시 return문이 필요
  • void는 컴파일러가 자동으로 메서드 마지막에 return;을 추가

호출 스택(call stack)

메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출 스택에 메모리가 할당, 종료되면 해제

스택(stack): 밑이 막힌 상자. 위에 차곡차곡 쌓인다.

기본형 매개변수와 참조형 매개변수

기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.'

static 메서드와 인스턴스 메서드

static 메서드(클래스 메서드)

객체 생성 없이 '클래스이름.메서드이름()'으로 호출
인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련없는 작업을 하는 메서드
메서드 내에서 인스턴스 변수 사용 불가

인스턴스 메서드

인스턴스를 생성한 후, '참조변수.메서드이름()'으로 호출
인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련한 작업을 하는 메서드
메서드 내에서 인스턴스 변수 사용 가능

오버로딩

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

성립조건
1. 메서드 이름이 같아야한다.
2. 매개변수의 개수 or 타입, 위치가 달라야한다.
3. 반환타입에는 영향 받지 않는다.

사용목적

  • 매개변수 즉, 입력하는 값이 다르지만 같은 기능을 수행하는 경우가 많을 때 사용성 및 효율을 높이기 위해 오버로딩 사용

생성자

인스턴스가 생성될때마다 호출되는 '인스턴스 초기화 메서드'

  • 인스턴스 생성시 수행할 작업에 사용
    * 초기값이 필요한 인스턴스 변수의 값을 초기화

생성 조건

  • 이름이 클래스 이름과 같아야 함
  • return 값x
  • void 붙이지 않음
  • 오버로딩 가는ㅇ

기본생성자

  • 매개변수가 없는 생성자
  • 생성자를 하나도 선언되어 있지 않았을 때는 컴파일러가 자동 추가

this와 this()

this

  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스 메서드(생성자 포함)에서 사용 가능
  • 지역 변수와 인스턴스 변수 구별할 때 사용

this()

  • 생성자에서 다른 생성자를 호출할 때 사용
    - this()를 사용하지 않고 클래스명(); 이렇게 생성자를 호출하려 하면 error
  • 다른 생성자 호출 시 첫 줄에서 만 사용 가능

변수의 초기화

*수동 / 자동 초기화

  • 지역변수는 수동으로 초기화
    * 지역 변수가 동작하는 스택 메모리는 재사용이 빈번, 매번 초기화를 해주면 성능저하
    • 그래서 그냥 해당 메모리에 있는 값으로 덮어 씌움
    • 근데 해당 주소에 어떠한 값이 있는지 모르기 때문에 java 개발자에게 수동으로 초기화하라고 요구
    • C언어에서는 이를 garbage value라 부름
    • 멤버변수(인스턴스 변수, 클래스 변수)는 자동 초기화

*멤버 변수의 초기화

  • 클래스 변수: 클래스가 처음 로딩될 때 단 한번 초기화
  • 인스턴스 변수: 인스턴스가 생성될 때 마다 초기화
profile
인정받는 개발자가 되고싶습니다.

0개의 댓글