9일차(객체지향 프로그래밍의 기초/클래스, 필드, 메서드)

Rina's·2023년 4월 21일

코드스테이츠

목록 보기
9/96

객체지향 프로그래밍의 기초

🍓클래스의 정의

인스턴스를 만드는 설계도
클래스명은 대문자로 시작하는 것이 관례

class 클래스명 {클래스 정의}

🍍필드

속성변수, iv가 갖게될 속성
접근지정자 타입 변수명;
cviv로 구성

클래스변수?
인스턴스가 생성과 관계없이 사용가능 클래스병.클래스변수명
static, 즉 고정되어 같은 클래스의 인스턴스끼리 공유(클래스영역)
A class로 생성된 인스턴스1의 static 변수1값을 바꾸면 인스턴스2의 static 변수1값도 바뀌게 된다.

인스턴스변수?
인스턴스 생성시 함께 생성
힙메모리의 각 인스턴스 내에 존재하여 고유한 개별성을 가짐

  • 정적영역 : 클래스영역
  • 동적영역 : 스택영역, 힙메모리영역

스텍메모리의 지역변수와 다르게 힙메모리의 필드변수는 직접 초기화하지 않아도 강제로 초기화 된다.
이는 클래스가 인스턴스화될 때, 각 필드는 해당 자료형의 기본값으로 자동 초기화된다는 말이다

🥝메서드

접근제어자 반환타입 메서드명 (매개변수) {실행문};

public static void int add(int x, int y) { // 메서드 시그니처
	int result = x + y;				 // 메서드 바디
	System.out.println(result);
}

메서드 명은 관례적으로 소문자로 표기
lv로 구성되며 static메서드의 경우 인스턴스 변수나 인스턴스 메서드를 사용할 수 없다
실행문에 return이 없을경우 반환타입 대신 void를 적는다
return값은 반드시 반환타입이 일치하거나 자동형변환이 가능해야 한다

포인트연산자 .를 사용하여 호출하며
클래스 내부 메서드끼리는 객체생성 없이 호출할 수 있다

printHello();
multiply(4, 4.0); 요런식으로

지역변수?
메서드 내 실행문{} 에서만 사용가능
스텍메모리에 저장되어 메서드 종료와 함께 소멸

생성자

객체를 생성

이너클래스

클래스 내부의 클래스

필드, 메서드, 이너클래스를 클래스맴버라 부른다
포인트 연산자.로 맴버에 접근한다

🍭객체(인스턴스)의 생성

클래스명 변수명 = new 클래스명();
new = 해당 객체를 힙 메모리에 넣어라
클래스명() = 생성자

🍮메서드 오버로딩

하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
매개변수개수 또는 타입이 다른 경우 가능

🍬객체 생성과정

Scanner s = new Scanner(System.in);

  1. 클래스 Scanner가 사용을 위해 import하여 class 영역(Method 영역)에 로드

  2. 참조변수 s가 스택 영역에 로드
    Scanner 객체 생성을 위해 매개변수 System.in 전달, 이 때 참조변수 s가 스택 영역에 로드, s는 생성된 객체를 가리킴.

  3. new가 heap 영역을 정리
    new가 객체 생성을 위해 heap 영역에서 메모리 공간을 할당.

  4. 생성자 호출하여 힙 영역에 객체 생성
    생성자를 호출하여 초기화, 객체의 상태를 설정

  5. 해당 객체의 주소값이 변수 s에 연결

요약
클래스가 클래스로 로드
참조변수가 스택으로 로드
new가 heap정리
생성자가 힙에 객체생성
스택의 참조변수가 힙 내의 객체 주소값을 가짐

🍬GC

참조변수가 없어 불러올수 없어진 객체를 저장하는 메모리 정리하는 녀석

🦀🦀🦀

과부하나서 뇌에 런타임 오류나겠다~~~!!
profile
갭린이 리나

0개의 댓글