객체
1. 객체란 ?
주체가 아닌 것, 주체가 활용하는 것
2. 지향 ?
객체를 많이 만드는 것을 추천
3. 객체지향 프로그래밍의 장점
추가 수정 삭제가 용이
재사용성이 높다
Class와 Object
- 현실의 객체가 갖는 속성과 기능은 추상화되어 클래스에 정의
- 클래스는 구체화되어 프로그램의 객체가 됨
- 현실의 객체는 우리가 만지고 느낄 수 있는 것
- ex) 붕어빵틀(class) 붕어빵(object)
- 추상화한 결과가 class
- 이를 구체화하는 것이 바로 object(객체)
클래스
객체
객체 생성과 메모리
JVM의 메모리 구조
- meta-space
클래스 정보- stack
메서드들의 실행 공간- heap
객체를 저장하기 위한 영역
가비지 컬렉션으로 정리
상수풀
선언 위치에 따른 분류
1.멤버변수
인스턴스 멤버 변수의 특징
생성 : 객체가 만들어질 때
초기화 : 타입별로 기본값
접근 : 객체 생성 후 객체 이름으로 접근
소멸시점 : Garbage Collector에 의해 객체가 없어질 때 (명시적 x)
클래스 멤버 변수의 특징
- static 키워드가 핵심
- 변할 수 있지만 거의 변하지 않는 것
- 모든 객체가 공유
생성 : 클래스가 로딩될 때
초기화 : 타입 별로 기본값
접근 : 클래스 이름으로 접근
소멸시점 : 클래스가 언로드될 때
지역 변수와 파라미터 변수
- 클래스 영역의 {}이외의 모든 중괄호안
생성 : 선언된 라인이 실행
초기화 : 명시적 초기화
접근 : 외부에서 접근 불가
소멸 시점 : {}을 벗어날 때
메서드 정의, 필요성
1. 메서드 정의
- 현실의 객체가 하는 동작을 프로그래밍화
- 어떤 작업을 수행하는 명령문의 집합
- 필요성
- 중복 방지
- 코드의 길이를 줄이고, 유지보수
선언부
구현부
호출은 반드시 선언부에 맞춰서 호출
메서드도 변수와 마찬가지로 static or non static상태를 구분
static member -> 언제나 메모리에 있음
instance member -> 객체 생성 전에는 메모리에 없음
메서드는 스택의 구조로 실행
메서드 오버로딩
- 동일한 기능을 수행하는 메서드 추가 작성
- 예시로 println()
오버로딩의 장점- 기억해야할 매서드가 감소하고 중복 코드에 대한 효율적 관리 가능
오버로딩 방법- 메서드 이름은 동일
- 파라미터의 개수 또는 순서, 타입은 달라야 할 것
- 리턴 타입은 의미 없음
생성자
- 객체를 생성할 때 호출하는 메서드 비슷한 것
- 일반 멤버 변수위 초기화 및 객체 생성 시 실행돼야 하는 작업 정리
생성자의 종류
1. 기본생성자
- 파라미터가 없고, 구현부가 비어있는 형태
- 생성자 코드가 없으면 컴파일러가 기본 생성자 제공
- 파라미터가 있는 생성자
- 생성자 호출 시 값을 넘겨줘서 멤버 변수 초기화
- 파라미터가 있는 생성자를 만들면 기본 생성자는 추가되지 않는다 !
- 따라서 기본 생성자를 추가해줘야함.
this.