JAVA의 정석 | Chapter 6 : 객체지향프로그래밍 1 (1)

Yunny.Log ·2022년 6월 2일
0

JAVA

목록 보기
13/29
post-thumbnail
post-custom-banner

2. 클래스와 객체

2.1 클래스와 객체의 정의와 용도

  • 클래스로부터 객체 만드는 과정 == 클래스의 인스턴스화
  • 클래스로부터 만들어진 객체를 인스턴스라고 한다

2.3 객체의 구성요소

1) 속성 : 멤버변수, 특성, 필드, 상태
2) 기능 ) 메서드, 함수, 행위

  • 클래스를 선언하는 것은 단순히 설계도 만든 것에 불과, 실체 인스턴스를 생성해야 함

인스턴스를 생성하는 방법

1) 클래스명 변수명;

클래스 객체 참조하기 위한 참조변수 선언
메모리에 참조변수 T를 위한 공간이 마련되는 것
아직 인스턴스 생성은 X

2) 변수명 = new 클래스명ㄴ

  • 연산자 new에 의해 인스턴스가 메모리의 빈 공간에 생성

=> 1) 에서 선언한 참조변수가 2)에서 만들어진 인스턴스를 가리키는 구조

인스턴스는 참조 변수를 통해서만 다룰 수 있고,
참조변수의 타입은 인스턴스 타입과 일치해야해

  • 같은 클래스로부터 생성되더라도 각 인스턴스의 속성은 서로 다른 값 유지 가능

3. 변수와 메서드

3.1 선언위치에 따른 변수의 종류

변수의 종류
1) 클래스변수 - 멤버 변수, static 붙음
2) 인스턴스 변수 - 멤버 변수, statis 안 붙음
3) 지역변수 - 멤버 변수 제외한 나머지 변수

1) 클래스 변수 :

  • 인스턴스 마다 독립 공간 갖는 인스턴스 변수와는 달리 클래스 변수는 모든 인스턴스가 공통된 저장 공간 가지게 된다. 따라서 모두 공통된 값을 갖는 것이지
  • 따라서 인스턴스 생성하지 않고바로 클래스에 접근해서 사용이 가능

2) 인스턴스 변수 :

  • 클래스 영역 선언, 클래스의 인스턴스 생성 시 만들어짐
  • 독립적인 저장공간 가져서 서로 다른 값 가지기 가능

3) 지역변수

  • 메서드 내에서 선언 , 메서드 내에서만 사용 가능, 메서드 종료 시 함께 소멸

3.3 메서드

  • 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것

    메서드 사용 이유?
    1)높은 재사용성
    2) 중복 코드 제거
    3) 프로그램 구조화

3.4 메서드 선언과 구현

반환타입 메서드 이름 (타입 변수명, 타입 변수명 ... => 매개변수 선언 ) {
구현 몸통}

인자 (argument) vs 매개변수 (parameter)

1) 인자 : 메서드 호출할 때 괄호 안에 지정해준 값들
2) 매개변수 : 함수에 있던 들어와야 할 아이들

3.7 JVM 메모리구조

  • 응용 프로그램 실행 시 JVM은 시스템으로부터 프로그램 수행에 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나눠 관리

세가지 주요 영역

1) METHOD AREA

  • 프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스의 클래스파일을 읽어서 분석해 클래스에 대한 정보 (클래스 데이터) 저장,
  • 그 클래스의 클래스변수도 함께 저장

2) CALL STACK

  • 메서드의 작업에 필요한 메모리 공간 제공,
  • 메서드 호출 시 호출스택에 호출된 메서드를 위한 메모리 할당
  • 이 메모리는 작업을 수행하는 동안 지역변수들과 연산의 중간결과 등 저장하는데 사용
  • 메서드가 작업 마치면 할당된 메모리공간은 지워짐
  • 각메서드를 위한 작업 공간은 서로 구별
    • 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당
      - 메서드가 수행 마치면 사용했던 메모리 반환, 스택 제거
      • 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드
      • 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드

3) HEAP

  • 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳 생성
  • 즉 인스턴스 변수들이 저장

3.8 기본형 매개변수와 참조형 매개변수

  • 매개변수 타입이 기본형일 때는 기본형 값 복사

  • 매개변수 타입이 참조형 이면 인스턴스 주소 복사

  • 기본형 선언 => 단순 저장 값 읽어옴 (그 주소에서 값만 델꼬 오는 것)

  • 참조형 선언 => 값 변경 가능 (주소 자체를 불러오는 것, 주소 아니깐 주소 안에 살고있는 원본을 바꿀 수 있음)

기본형 매개변수 : 변수의 값 읽기만 가능
참조형 매개변수 : 변수의 값 읽고 변경 가능

3.11 클래스 메서드(STATIC)와 인스턴스 메서드

  • 인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는, 메소드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드

  • 인스턴스와 관계없는 (인스턴스 변수와 인스턴스 메서드 사용 않는) 메서드를 클래스 메서드(STATIC 메서드)로 정의

언제 STATIC을 사용하니?

  1. 클래스 설계 시 멤버변수 중 모든 인스턴스에 공통으로 사욯하는 것에 STATIC 붙이기
  2. 클래스 변수는 인스턴스 생성안해도 사용 가능
  3. 클래스 메서드는 인스턴스 변수 사용 불가
  4. 메서드 내에서 인스턴스 변수 사용안하면 STATIC 붙여도 ㄱㅊ을 지 고민하기
  • 클래스 멤버 변수 중 모든 인스턴스에 공통 값 유지해야 하는지 살펴보고 있으면 STATIC 붙여주기
  • 작성 메서드 중에서 인스턴스 변수나 인스턴스 메서드 사용 않는 메서드에 STATIC 붙일 것 고려
post-custom-banner

0개의 댓글