제목: 자바 클래스/메서드/생성자/this/static 흐름 정리
핵심 용어
-반환 자료형(return type)
메서드가 “끝나고 돌려주는 값의 타입”
예) int, String, boolean, Person 등
돌려줄 값이 없으면 void
-메서드 이름(method name)
기능의 이름. 호출할 때 이 이름을 사용한다.
예) printName(), add(), login()
-매개변수(parameter)
메서드에 “입력으로 넣는 값”의 자리
예) add(int a, int b) 에서 a,b가 매개변수
정리
-반환값이 있으면: return 값; 이 있어야 한다
-반환값이 없으면: void 쓰고 return 생략 가능
2.new로 “객체(인스턴스)” 만든다 (객체화/인스턴스화)
Calculator calculator = new Calculator();
의미
-new Calculator() : 실제로 메모리에 Calculator 한 개를 만든다
-calculator 변수 : 그 객체를 가리키는 이름표(참조)
객체를 만들면
-그 객체만의 인스턴스 변수(필드)를 갖는다
-그 객체의 인스턴스 메서드를 실행할 수 있다
“Main에 다 쓰지 말고” 클래스에 기능을 넣는다
왜?
-Main은 실행 시작점(main 메서드)이라 테스트/실행만 담당하게 두는 게 깔끔하다
-실제 기능(계산, 출력, 검증 등)은 Calculator, Person 같은 클래스에 넣는 게 재사용/관리 쉬움
클래스 이름 규칙
-클래스는 첫 글자 대문자 (PascalCase)
예) Person, ChatService, UserRepository
생성자(constructor) 핵심
특징
-반환 자료형이 없다 (void도 안 붙음)
-이름이 클래스명과 완전히 같다
-여러 개 만들 수 있다(오버로딩)
역할
-new 할 때 “초기값 세팅(조립설명서)”을 강제/편하게 해준다
왜 this를 쓰나?
-this.name : “이 객체(personA/personB)의 name”
-name : “매개변수 name”
이름이 겹칠 때 구분하려고 this를 쓴다
추가로 중요한 포인트
-생성자를 직접 만들면(매개변수 있는 생성자 작성)
기본 생성자 Person() 은 자동 생성이 안 될 수 있다
그래서 필요하면 Person() {} 를 직접 만들어야 한다
게터/세터(초간단 감 잡기)
-getter: 필드 값을 꺼내는 메서드
예) getName() -> name 반환
-setter: 필드 값을 바꾸는 메서드(검증도 여기서 함)
예) setAge(int age) -> age가 0 이상일 때만 저장
왜 쓰나?
-필드에 직접 접근(p1.age = -100 같은 거) 막고
-값 검증/규칙을 한 곳에 모으려고
숨은 동작 느낌
-Integer.valueOf(10) 같은 게 내부적으로 자동 호출될 수 있음
정리
-래퍼 클래스는 “객체”라서 기능(메서드)을 쓸 수 있음
-기본형은 빠르고 단순하지만 기능이 없음
this 한 줄 정의
this는 “현재 실행 중인 객체 자기 자신”을 가리키는 키워드
인스턴스 변수 / 인스턴스 메서드 감 잡기
인스턴스 변수(필드)
-객체가 생성될 때마다 따로 생김
-p1.name 과 p2.name 은 서로 다른 저장공간
인스턴스 메서드
-객체를 통해 호출됨
-메서드 안에서 this로 “내 객체의 필드” 접근 가능
예) printName() 안에서 this.name 출력
예시 느낌
Person.population 처럼 “전체 인원 수” 같은 공유값에 적합
주의
-name 같은 걸 static으로 하면
모든 객체가 같은 name을 공유해서 덮어쓰기 문제가 생김