아줌마의 국비학원생활
[7일차] 객체지향 프로그래밍 1
citygray
2023. 4. 25. 10:44
- 잘못올라간 파일 내리기
https://sustainable-dev.tistory.com/125 - 이제 객체지향 시작이다 야호!
JVM의 동작 원리
클래스파일
- 개발자가 만드는 혹은 이미 만들어진 프로그램
- '.java'파일이 자바 컴파일러에서 컴파일되서 '.class'파일 생성
클래스 로더 서브 시스템
- 자바클래스 파일은 OS에서 직접 동작하는 것이 아니라 JVM위에서 동작
- JVM은 실행할 클래스 파일을 읽고 ,JVM메모리에 올려놓는 과정이 필요
- 이 과정을 클래스 로딩이라 한다.
- 동적로딩 : 프로그램을 실행하는 도중에 새로운 클래스를 로딩할 수 있음
실행 데이터 영역
- 클래스로더로 부터 분석된 데이터를 저장하고 실행도중 필요한 테이터를 저장하는 영역
- 데이터의 목적과 종류에 따라서 메모리를 효율적으로 관리하기 위해서 5개 영역으로 구분
- 메서드 영역(코드영역)
- 클래스 로더의 의해서 로딩된 클래스가 저장되는 곳
- JVM에서 클래스를 실행하면 메소드 영역에서 클래스 정보를 복사
- static 메서드,static 변수
- 스택 영역
- 호출된 메서드 정보가 저장되는 곳으로 실행이 끝나면 저장된 정보는 삭제
- 메서드가 실핼될 때마다 저장되는 메서드 정보에는 매개변수, 지역변수 등
- LIFO(Last In First Out)
- 힙 영역
- new 명령문으로 인스턴스를 생성하면 메모리의 힙영역에 생성
- 힙영역은 JVM에서 가장 중요한 데이터를 저장함과 동시에 세밀한 관리가 이루어지는 곳
- 가비지컬렉터가 소멸
- 레지스터 영역(내부적)
- 현재 JVM이 수행할 명령어의주소를 저장하는 메모리 공간
- 네이티브 메서드 영역(내부적)
- OS의 시스템 정보, 리소스를 사용하거나 접근하기 위한 코드
객체지향 프로그래밍
구조적 개발 방법론 = 절차적 프로그래밍
- 프로그램을 실행하는데 필요한 모든 테이터를 미리 준비하고, 준비된 테이터를 사용하여 순서대로 처리
- C언어
객체 지향 개발 방법론
- 기능별로 작업을 분리한 후 필요한 기능이 있다면 가져다 사용하는 방식
- 느슨한 결합 : 객체간의 연관성 낮아야하고
- 높은 응집 : 객체 내 요소(데이터와 기능) 간에 연관성이 높아야한다.
객체 지향 프로그래밍 순서
- 객체 모델링
- 상태
- 동작
- 클래스 다이어그램
객체 모델링 클래스 다이어그램 설명 객체 클래스 객체를 대표하는 클래스 이름 정의 속성 필드(변수) 객체가 가진 고유한 특성을 정의 동작 메서드 객체가 할 수 있는 동작을 정의 - 코드작성
- 소스파일 생성: 클래스 이름.java(대소문자 주의)
- 소스 파일당 하나의 클래스를 선언하는 것이 관례
- 두 개 이상의클래스도 선언가능
- 소스파일이름과 동일한 클래스만 public으로 선언가능
- 선언한 개수(클래스수) 만큼 바이트 코드파일이 생성
객체
- 데이터(속성) + 기능(메서드)
클래스명 참조변수명 ; //리모컨용 참조 변수 선언 참조변수명 = new 클래스명; //클래스 객체 생성후, 참조변수에 저장
클래스의 정의
- 데이터와 함수의 결합
변수(데이터 하나) -> 배열(같은 타입에 데이터 묶음) -> 구조체(다른타입 OK,데이터 묶음) -> 클래스(구조체+함수) - 사용자 정의 타입 = 클래스
클래스 선언
- 클래스 이름은 객체를 대표하는 이름
- 자바 소스 파일 이름과 클래스 이름은 같아야 한다.
- 대문자로 시작하는 것이 관례- PascalCase
접근제어자 class ClassName{
//속성선언
접근제어자 데이터타입 valName;
//메서드선언;
접근제어자 [제어자] 반환형 methodName(매개변수){};
}
속성 선언
- 멤버변수 라 부른다.
- 소문자로 시작 - calmelCase
변수의 종류
- 클래스 영역
- cv : 공통 속성, 클래스가 메모리에 올라갈 때 생성
- iv : 개별 속성, 인스턴스가 생성될때 마다 생성
- 메서드 영역
- lv : {}블록 내부선언, 변수선언문이 수행될때 생성되며, 메서드 종료시 자동 제거됨
접근 제어자
제어자 | 같은 클래스 | 같은 패키지 | (다른 패키지) 자손클래스만 | 전체 |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
메서드
- 하나의 메서드는 하나의 기능만 수행하도록 작성
- 메서드 실행 흐름
- 객체 생성
- 메서드 호출
- 메서드 안 수행문 실행
- 호출한 곳으로 반환
접근제한자 반환타입 메서드이름(타입 변수명, 타입 변수명..){ //선언부 //실행될 코드 //구현부 }