아줌마의 국비학원생활

[7일차] 객체지향 프로그래밍 1

citygray 2023. 4. 25. 10:44

JVM의 동작 원리

클래스파일

  • 개발자가 만드는 혹은 이미 만들어진 프로그램
  • '.java'파일이 자바 컴파일러에서 컴파일되서 '.class'파일 생성

클래스 로더 서브 시스템

  • 자바클래스 파일은 OS에서 직접 동작하는 것이 아니라 JVM위에서 동작
  • JVM은 실행할 클래스 파일을 읽고 ,JVM메모리에 올려놓는 과정이 필요
  • 이 과정을 클래스 로딩이라 한다.
  • 동적로딩 : 프로그램을 실행하는 도중에 새로운 클래스를 로딩할 수 있음

실행 데이터 영역

  • 클래스로더로 부터 분석된 데이터를 저장하고 실행도중 필요한 테이터를 저장하는 영역
  • 데이터의 목적과 종류에 따라서 메모리를 효율적으로 관리하기 위해서 5개 영역으로 구분
  1. 메서드 영역(코드영역)
    • 클래스 로더의 의해서 로딩된 클래스가 저장되는 곳
    • JVM에서 클래스를 실행하면 메소드 영역에서 클래스 정보를 복사
    • static 메서드,static 변수
  2. 스택 영역
    • 호출된 메서드 정보가 저장되는 곳으로 실행이 끝나면 저장된 정보는 삭제
    • 메서드가 실핼될 때마다 저장되는 메서드 정보에는 매개변수, 지역변수
    • LIFO(Last In First Out)
  3. 힙 영역
    • new 명령문으로 인스턴스를 생성하면 메모리의 힙영역에 생성
    • 힙영역은 JVM에서 가장 중요한 데이터를 저장함과 동시에 세밀한 관리가 이루어지는 곳
    • 가비지컬렉터가 소멸
  4. 레지스터 영역(내부적)
    • 현재 JVM이 수행할 명령어의주소를 저장하는 메모리 공간
  5. 네이티브 메서드 영역(내부적)
    • OS의 시스템 정보, 리소스를 사용하거나 접근하기 위한 코드

객체지향 프로그래밍

구조적 개발 방법론 = 절차적 프로그래밍

  • 프로그램을 실행하는데 필요한 모든 테이터를 미리 준비하고, 준비된 테이터를 사용하여 순서대로 처리
  • C언어

객체 지향 개발 방법론

  • 기능별로 작업을 분리한 후 필요한 기능이 있다면 가져다 사용하는 방식
  • 느슨한 결합 : 객체간의 연관성 낮아야하고
  • 높은 응집 : 객체 내 요소(데이터와 기능) 간에 연관성이 높아야한다.

객체 지향 프로그래밍 순서

  1. 객체 모델링
    • 상태
    • 동작
  2. 클래스 다이어그램
    객체 모델링 클래스 다이어그램 설명
    객체 클래스 객체를 대표하는 클래스 이름 정의
    속성 필드(변수) 객체가 가진 고유한 특성을 정의
    동작 메서드 객체가 할 수 있는 동작을 정의
  3. 코드작성
    • 소스파일 생성: 클래스 이름.java(대소문자 주의)
    • 소스 파일당 하나의 클래스를 선언하는 것이 관례
    • 두 개 이상의클래스도 선언가능
    • 소스파일이름과 동일한 클래스만 public으로 선언가능
    • 선언한 개수(클래스수) 만큼 바이트 코드파일이 생성

객체

  • 데이터(속성) + 기능(메서드)
    클래스명 참조변수명 ; //리모컨용 참조 변수 선언 
    참조변수명 = new 클래스명; //클래스 객체 생성후, 참조변수에 저장

클래스의 정의

  1. 데이터와 함수의 결합
    변수(데이터 하나) -> 배열(같은 타입에 데이터 묶음) -> 구조체(다른타입 OK,데이터 묶음) -> 클래스(구조체+함수)
  2. 사용자 정의 타입 = 클래스

클래스 선언

  • 클래스 이름은 객체를 대표하는 이름
  • 자바 소스 파일 이름과 클래스 이름은 같아야 한다.
  • 대문자로 시작하는 것이 관례- PascalCase
접근제어자 class ClassName{
    //속성선언
    접근제어자 데이터타입 valName;

    //메서드선언;
    접근제어자 [제어자] 반환형 methodName(매개변수){};
}

속성 선언

  • 멤버변수 라 부른다.
  • 소문자로 시작 - calmelCase

변수의 종류

  • 클래스 영역
    • cv : 공통 속성, 클래스가 메모리에 올라갈 때 생성
    • iv : 개별 속성, 인스턴스가 생성될때 마다 생성
  • 메서드 영역
    • lv : {}블록 내부선언, 변수선언문이 수행될때 생성되며, 메서드 종료시 자동 제거됨

접근 제어자

제어자 같은 클래스 같은 패키지 (다른 패키지) 자손클래스만 전체
public O O O O
protected O O O  
(default) O O    
private O      

메서드

  • 하나의 메서드는 하나의 기능만 수행하도록 작성
  • 메서드 실행 흐름
    1. 객체 생성
    2. 메서드 호출
    3. 메서드 안 수행문 실행
    4. 호출한 곳으로 반환
      접근제한자 반환타입 메서드이름(타입 변수명, 타입 변수명..){  //선언부 
      //실행될 코드 
      //구현부
      }