Lewis's Tech Keep

06/15 TIL (클래스와 개체) 본문

JAVA/개체지향 프로그래밍 with JAVA

06/15 TIL (클래스와 개체)

Lewis Seo 2021. 6. 15. 17:11

 - 클래스

 : 클래스와 개체 생성

 : 상태 + 함수

 : 왜 클래스 ? -> 자연 세계에서 생물 분류 중 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
Comments