Lewis's Tech Keep
06/15 TIL (클래스와 개체) 본문
- 클래스
: 클래스와 개체 생성
: 상태 + 함수
: 왜 클래스 ? -> 자연 세계에서 생물 분류 중 class는 강이라고 부름
: 종, 과보다 상위 개념
: 어떤 개체든지 속한 클래스가 있음.
: 비슷한 속성과 동작을 공유한다는 것을 의미
: Blueprint, 붕어빵 틀, 주물
- OOP에서의 클래스
: 새로운 개체 만들 때 명세서
: 속성, 동작 등등등
- 클래스 선언
: this.age : 현재 개체가 호출된 곳의 위치를 의미
- 접근 제어자
: 멤버 변수, 멤버 함수 선언 시 앞에 붙는 접근 제어자
: 외부에서 클래스 내부에 담긴 상태/동작에 접근하는 것 (외부: 다른 패키지를 의미)
: public, protected, default, private 존재
- 상태를 칭하는 용어
: 멤버 변수, 필드, 속성(속성은 헷갈릴 수 있으므로 지양) 등등
- 동작을 칭하는 용어
: 멤버 함수(그냥 함수라고도 씀), 메서드, 메시지(반드시 함수 호출을 의미하지 않음)
- 개체 만들기
: 생성해서 만듦
: 자바 기본 자료형만 스택에 넣을 수 있음 (reference 형은 힙 메모리에 들어 감)
: Human h = new Human(); 선언 (새로운 휴먼을 만들어라)
: 동적 할당
* 자바 메모리 관리
- stack에 저장되는 것들
- heap 영역에 생성된 Object 데이터의 참조값(주소)
- 원시타입 데이터
- 스레드 수 당 1개의 스택 메모리
- heap에 저장되는 것들
- 긴 생명주기를 가지는 데이터
- stack에 있는 데이터 제외하고 다
- 모든 Object 타입
- 스레드 수에 관계 없이 heap 영역은 단 하나
- 인스턴스
: 개체를 부르는 다른 표현
: 개체의 한 예라는 의미 (어떤 한 사건, 이벤트, 사실과 같은 것들)
: instantiation : 인스턴스화 했다 -> 개체를 만들었다.
- 개체 사용법
: 포인터 vs 참조형
: 개체 생성 시 멤버 데이터 초기화
: .(dot) 연산자 의미
- 포인터 vs 참조형
: 자료형 : 사실상 포인터
: 포인터 = 메모리 주소를 저장하는 변수
: 참조형 = 기본 자료형 제외하면 모두 포인터 형
: 자바는 모든 것이 포인터다 라고 해도 될 정도
: 단 포인터 주소 바꾸는 연산은 안된다.
- .(dot) 연산자
: 원본을 바꾸는 참조형
: 개체의 멤버에 접근
- 멤버 변수 초기값
: 실수 방지를 위해 선언하지 않았을 경우 (0 or null과 같은 값들로 초기화됨)
- 멤버 함수 호출
: .(dot) 연산자를 통해서 호출
- 메모리 관리 && garbe collector
: C와 달리 JAVA는 알아서 가비지 콜렉터가 알아서 처리한다.
: 자동이기 때문에 대가가 있다.
: 자원이 한정적인 시스템에 적합하지 않음
: GC가 사용 여부 판단하는 것이 빠른 연산이 아님
: GC가 메모리 수집하는 시점을 알 수 없음
: 메모리 누수에서 100% 자유로울 수 없음 (아예 없는 건 아님)
- 생성자
: 생성된 개체가 유효하지 않은 값을 가지고 있을 때 이슈가 발생
: 개체를 생성했지만 무엇인가 없는 개체를 개체라 부를 수 있을까?
: 이것을 생성자로 할 수 있다.
: 생성자는 대문자로 시작한다.
: 개체를 만들어주는 자
: 개체 생성 시에 자동으로 호출되는 트굿한 함수
: 반환형이 없음
: 생성자 오버로딩에서 코드 중복 회피 = this(기본값, 기본값 ....)
: 아무것도 생성자를 만들지 않았을 경우에는 기본 생성자가 생김.
- 개체 생성 후 상태 설정 시 문제
: 공장에서 나온 물건의 속이 비어있다 -> 말이 될까?
: 후조건의 문제
: '개체의 상태는 개체 생성과 동시에 유효하다'
: 사용자를 고려 하지 않은 것 : 내가 만든 클래스를 사용하는 것은 지금은 나지만 타인이 될 수 있다.
: 어떤 값을 초기화 해야 할 지 타인은 모를 수 있음 (또는 미래의 나)
: 어떤 멤버 변수를 초기화 해야 할까? -> 내부에 미리 설정 돼 있는 것이 좋음
: 나중에 추가된 멤버 변수가 있을 때 대응이 필요
: 어떤 값으로 초기화 해야 할까? 타인 모를 수 있음
: 생성자는 개체를 만들어 주는 계약이다. (함수는 블랙박스다.)
'Java > 개체지향 프로그래밍 with JAVA' 카테고리의 다른 글
06/17, 19 TIL (개체 모델링~) (0) | 2021.06.17 |
---|---|
06/17 TIL (접근 제어자~ getter/setter) (0) | 2021.06.17 |
06/15 TIL (OOP 필요성) (0) | 2021.06.15 |
06/15 TIL (자바 문법 기본) (0) | 2021.06.15 |
[OOP] OOP 특성 (0) | 2021.05.18 |