[자바 라이브 스터디] 5주차 - 클래스1. 클래스 정의하는 방법2. 객체 만드는 방법 (new 키워드 이해하기)3. 메소드 정의하는 방법4. 생성자 정의하는 방법5. this 키워드 이해하기
[자바 라이브 스터디] 5주차 - 클래스
- 목표) 자바가 제공하는 제어문을 학습합니다.
- 클래스는 공식 문서 보고 키워드 사용법 제대로 이해하고 새롭게 업데이트 된 부분 공부하는 데에 초점 맞추기
5주차 과제: 클래스
1. 클래스 정의하는 방법
- 정의) 객체를 생성하기 위한 틀
- 데이터와 함수의 결합
- 사용자 정의 타입
- 특징)
- 접근지정자
- 선언 위치에 따른 변수 종류
- 멤버 변수
- 인스턴스 변수
- 각 인스턴스마다 고유한 값 가짐
- 클래스(static) 변수
- 모든 인스턴스에 공통된 값 유지해야 한다면 static 붙여서 사용
- 클래스이름.클래스변수 형식으로 사용 (객체생성 전 사용 가능)
- 멤버 변수의 초기화
- 정의) 지역변수와 달리 초기화 안 한 채 사용해도 컴파일 에러 x
- 타입의 기본값으로 초기화됨
- 종류)
- 명시적 초기화 → 변수 선언과 동시에 초기화
- 생성자
- 초기화 블럭
- 클래스 초기화 블럭 → 클래스 변수의 복잡한 초기화에 사용됨
- 클래스가 메모리에 처음 로딩될 때 한번만 수행됨
- 인스턴스 초기화 블럭 → 인스턴스 변수의 복잡한 초기화에 사용됨
- 생성자와 같이 인스턴스 생성할 때마다 수행됨(생성자보다 먼저 수행됨)
- 사용)
- 모든 생성자에 공통으로 수행되어야 하는 문장들을 있을 때
- 배열이나 예외처리와 같이 복잡한 초기화 작업해야 할 때
- 장점) 재사용성 높이고 중복 제거함 → 객체지향프로그래밍적 요소
- 클래스 명명 규칙
ㅤ | 클래스 내부 | 동일 패키지 | 하위 클래스 | 그 외 영역 |
public | O | O | O | O |
protected | O | O | O | X |
default (생략 가능) | O | O | X | X |
private | O | X | X | X |
2. 객체 만드는 방법 (new 키워드 이해하기)
- 객체
- 방법)
- 객체 배열
- 방법 1)
- 방법 2)
3. 메소드 정의하는 방법
- 정의)
- 특징)
- 매개변수
- 기본형 매개변수 (read only) → 값 복사
- 참조형 매개변수 (read & write) → 주소 복사
- 반환타입
- 참조형 반환타입 →객체의 주소를 반환
- static(클래스) 메서드와 인스턴스 메서드
- 인스턴스 메서드
- 인스턴스 변수를 필요로 하는 메서드
- static 메서드
- 인스턴스와 관계 없는(인스턴스 변수나 메서드를 사용하지 않는) 메서드에 보통 사용함
- 예시) Math 클래스의 메서드는 모두 static 메서드임
- 특징)
- static 메서드는 static 변수처럼, 객체 생성하지 않고도
클래스이름.메서드이름(매개변수)꼴로 호출 가능 - 같은 클래스 내의 메서드끼리 서로 호출가능하지만, static 메서드는 같은 클래스 내의 인스턴스 메서드 호출 불가
- JVM 구조
- 메서드 호출되면, 스택 영역에 메서드를 위한 메모리 할당됨
- 메서드가 작업 수행하는 동안, 지역변수들과 연산 중간경로 등 저장함
- 메서드가 작업 마치면, 할당되었던 메모리 공간은 반환되어 비워짐
- 예시)
- a()를 실행하다 b()를 실행하면, 스택에서 a()의 작업 공간 바로 위해 b()의 작업 공간 생김
- b() 수행 마치면, 제공되었던 스택의 메모리 공간이 반환되고, a()가 다시 수행 계속 하게 됨
- 이때, b()의 반환값은 대기상태에 있던 a()한테 넘겨줌
- 오버로딩
- 정의) 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
- 이름 같아도 매개변수의 개수 또는 타입이 다르면 정의 가능
- 반환 타입은 아무 영향 x
- 특징)
- 이름 짓기 편하고 같은 기능 한단 거 예측하기 쉬움
- 가변인자
- 정의) 매개 변수 개수를 동적으로 지정하는 기능
타입… 변수명형태로 매개변수 중 가장 마지막에 선언
4. 생성자 정의하는 방법
- 정의) 인스턴스 (변수) 초기화 메서드
- 특징)
- 생성자가 호출되는 시점
- 연산자 new에 의해 메모리에 클래스의 인스턴스가 생성된 후,
- 생성자가 호출되어 실행되고,
- 연산자 new의 결과로 생성된 인스턴스의 주소가 반환되어 참조변수에 저장됨
- 기본 생성자가 추가되는 시점
- 컴파일할 때, 소스파일(
.java)의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러가 자동적으로 기본 생성자 추가해 컴파일함
5. this 키워드 이해하기
- this
- 정의) 인스턴스 자신을 가리키는 참조변수
- 인스턴스의 주소가 저장되어 있음
- 생성자 포함한 모든 인스턴스 메소드에 지역변수로 숨겨진채로 존재함
- 사용)
- 생성자의 매개변수로 선언된 변수 이름이 인스턴스 변수이름과 같은 경우 이름만으로 두 변수 서로 구별 안되기에 인스턴스 변수 앞에 this를 사용해 구별
- 특징)
- this를 사용할 수 있는 것은 인스턴스 멤버뿐.
- static 메서드에선 this 사용 불가
- this()
- 정의) 같은 클래스의 다른 생성자 호출할 때 사용하는 생성자
- 조건)
- 호출할 때 다른 생성자 이름으로 클래스이름 대신 this 사용
- 다른 생성자 호출은 반드시 첫 줄에서만 가능
- 다른 생성자에서 매개 변수 초기화하면 현재 생성자의 매개 변수 초기화가 의미 없어질 수 있어서
- 장점)
- 코드 더 간략하게 할 수 있음
- 서로 관계가 깊은 경우가 많아 유기적으로 연결해주면 더 좋은 코드 얻을 수 있음
- 수정 필요할 때 적은 코드만 변경하면 되어 유지보수 쉬움

![[백기선 자바] 클래스](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F301eb74c-edaf-492f-9dca-9be8a3bbf75e%2F%25EC%25BA%25A1%25EC%25B2%2598.jpg?table=block&id=b09d63ec-e1ec-47a9-9aa3-437bf68ccf05&cache=v2)