객체(1)

최지홍·2022년 1월 21일
0

매일 공부

목록 보기
5/40

객체

  • 우리 주변에 있는 모든 것으로, 프로그래밍의 대상(주체가 활용)
  • 주체가 아닌 것

객체지향 프로그래밍: 주변의 많은 것들을 객체화해서 프로그래밍 하는 것

  • 객체는 많을수록 좋음
  • 주체의 쉬운 사용
  • 자유로운 객체 교체
  • 블록 형태의 모듈화
  • 신뢰성 높은 프로그래밍
  • 추가 / 수정 / 삭제 용이
  • 재사용성 ↑
  1. 현실의 객체가 갖는 속성, 기능 👉 추상화 👉 클래스에 정의
  2. 클래스 👉 구체화 👉 객체(instance, object)가 됨
  • 속성, 상태: 필드, 멤버 변수
  • 동작: 멤버 메서드
  • 추상화하는 과정: 프로그래밍
  • 클래스: 객체의 설계도, 타입, 붕어빵 틀
    • 직접 사용할 수 없고 객체를 만들기 위한 틀 제공
  • 구체화하여 객체 생성. 객체는 메모리에 올려야 사용 가능
  • 클래스는 객체를 정의해 놓은 설계도
  • 객체는 클래스를 데이터 타입으로 메모리에 생성됨

자바의 메모리 구조

  • class area: 클래스 원형 로딩
    • Field 정보, Method 정보, 타입 정보, 상수 풀
  • method stack: 메서드 실행 공간. thread 별 존재, 호출 순서대로 쌓임
    • 메서드 프레임에 로컬변수도 쌓이는 구조
    • 로컬변수는 선언된 영역을 벗어나면 삭제
  • heap: 객체 저장 영역. thread에 의해 공유

변수

  • 멤버변수: 클래스 변수, 인스턴스 변수
  • 지역변수: 지역 변수, 파라미터

인스턴스 변수

  • 클래스 영역 내 위치
  • 객체 별 생성(heap)
  • GC에 의해 관리
  • 객체가 만들어질 때 객체 별로 생성
  • 타입 별 기본값으로 초기화
  • 객체 생성 후(메모리 적재) 객체 이름으로 접근
  • 객체를 만들 때마다 객체 별로 생성 👉 객체마다 고유한 상태 유지

클래스 변수

  • static 키워드
  • 정적. 클래스 영역에 클래스 로딩 시 메모리 등록
  • 개별 객체 생성과 무관
  • 모든 객체가 공유

로컬 변수

  • 명시적 초기화 필요
  • 쓰레드별 스택에 생성
  • 선언된 라인 실행 시 변수 생성

메서드: 동작을 프로그래밍화

클래스 멤버와 인스턴스 멤버간 참조와 호출

  • 메모리에 있으면 호출 가능
  • static member: 언제나 메모리에 있음
    • 클래스 로딩 시 자동 등록
  • instance member: 객체 생성 전에는 메모리에 없음
    • 객체 생성 시 메모리에 생성

오버로딩: 파라미터의 순서, 타입, 개수가 달라야함

  • 기억해야 할 메서드가 감소
  • 중복 코드 제거

생성자

  • 인스턴스 변수 초기화

this.

  • 참조 변수로 객체 자기 자신을 가리킴
  • this를 통해 자기 자신의 멤버에 접근 가능(명시적 호출)
  • 객체 참조이므로 static 영역에서는 사용 불가

this()

  • 생성자의 가장 첫줄에 위치
  • 다른 생성자 호출(오버로딩)
profile
백엔드 개발자가 되자!

0개의 댓글