객체지향 프로그래밍
-대표적인 객체지향 프로그래밍으론 우리가 현재 배우고 있는 자바
지역 변수(local variable)
-자바에서 지역 변수(local variable)는 메서드, 생성자, 블록 내에서 선언된 변수를 말합니다. 지역 변수는 선언된 블록 내에서만 유효하며, 해당 블록을 벗어나면 사용할 수 없습니다.
지역 변수는 선언된 블록 내에서만 접근할 수 있기 때문에 다른 메서드나 블록에서는 직접적으로 접근할 수 없습니다. 또한, 지역 변수는 해당 블록이 실행될 때 생성되고, 블록 실행이 끝나면 메모리에서 사라지게 됩니다.
지역 변수는 메서드나 생성자 내에서 임시적으로 값을 저장하거나 연산에 사용하는 등의 용도로 많이 활용됩니다. 메서드의 매개변수나 블록 내에서 선언된 변수들이 대부분 지역 변수입니다.
수업 내용 중 지역변수
//지역변수 -> 자원 관리, 문제의 범위를 지역으로 국한
함수 안에 내용은 함수 밖으로 나오면 무용지물
스코프(scope)는 프로그램에서 변수나 식별자(identifier)가 유효한 범위를 나타내는 개념입니다. 스코프는 변수에 접근하고 사용할 수 있는 범위를 제한하며, 변수의 생존 기간(lifetime)과 관련이 있습니다.
1.블록 스코프 (Block Scope): 중괄호 {}로 둘러싸인 블록 내에서 선언된 변수의 스코프는 해당 블록 내부로 제한됩니다. 블록은 메서드, 반복문, 조건문 등에 의해 생성될 수 있습니다.
2.메서드 스코프 (Method Scope): 메서드 내에서 선언된 변수의 스코프는 해당 메서드 전체로 제한됩니다. 메서드 매개변수와 메서드 내부에서 선언된 변수들이 이에 해당합니다.
3.클래스 스코프 (Class Scope): 클래스 내에서 선언된 변수나 메서드의 스코프는 해당 클래스 전체로 제한됩니다. 클래스 멤버 변수와 클래스 메서드가 이에 해당합니다.
스코프의 개념은 변수의 가시성(visibility)과 관련이 있습니다. 변수가 특정 스코프에 선언되면, 그 스코프 내에서만 변수에 접근하여 값을 읽거나 변경할 수 있습니다. 스코프 외부에서는 직접적인 접근이 불가능합니다. 이는 변수 이름이 동일한 경우에도 서로 다른 스코프에 속하는 변수들은 별개의 변수로 취급됨을 의미합니다.
객체와 클래스
애플리케이션은 어떻게 실행되는가?
-애플리케이션:일반 사용자가 사용할 기능을 제공하는, 컴퓨터가 실행할 수 있는 명령어들의 집합
-메모리:실행된 애플리케이션이 상주하는 곳
-CPU:명령어를 실행하는 주체(EX)인부라고 생각하면 됨
runtime(실행시간)
-CPU는 0과 1(이진법 또는 기계어)만 읽기 때문에 영어로 적은 코드들은 읽을 수가 없고, 중간에 컴파일러(번역기 역할)가
실행파일로(ex)exe,class) 머신(JVM)이 읽어서 CPU로
메모리 구조
-애플리케이션에 할당되는 메모리는 내부적으로 여러 영역으로 나뉨
-그 중에 stack 메모리와 heap 메모리가 있음
-stack 메모리: 함수나 메서드의 지역 변수(local variable)와 매개 변수(parameter)가 저장됨. 함수나 메서드가 호출될 때 마다 스택 프레임(stack frame)이 쌓임
-heap 메모리:객체가 저장됨
arr(배열) - 참조값,주소값
참조값과 주소값은 실제값과는 다르다.
할당값에 들어가기 때문
*stack :쌓인다는 뜻
자바에서 이름 짓는 법
1.카멜표기법(Camel Case) - 첫글자만 소문자
Ex)메서드, 변수
2.파스칼 표기법(Pascal Case) - 첫글자만 대문자
Ex)이름지을때
클래스와 객체의 상관관계
클래스(설계도) > 객체
> 객체
> 객체
Ex) Person (같은말 : 복사본,객체,인스턴스)
영상시청내용
<프로세스는 뭐고 스레드는 뭔가요?-얄팍한 코딩사전>
<[10분 테코톡] 무민의 JVM Stack & Heap >
-JVM?
태초에 문제가 있다
크로스 컴파일
-타겟 플랫폼에 맞춰 컴파일하는 것을 '크로스 컴파일'이라 한다.
JVM 으로 문제를 해결
-자바 바이트코드는 타겟 플랫폼에 상관 없이 JVM 위에서 동작한다.
-물론, JVM 은 타겟 플랫폼에 의존한다.
WORA(Write Once, Run Anywhere)
해석) 네가 짠 자바 코드를 컴파일해서 배포하면, 어떤 플랫폼이든 다시 컴파일할 필요 없이 실행시킬 수 있어! 근데 실행하려면 그 플랫폼에 맞는 JVM이 설치되어 있어야 해!
굳이 JVM?
-C/C++도 크로스 컴파일해서 배포하면 되는데, 굳이 JVM을 사용해야하나?
-자바는 네트워크에 연결된 모든 디바이스에서 작동하는 것이 목적이었다.
-디바이스마다 운영체제나 하드웨어가 다르기 때문에, 자연스럽게 플랫폼에 의존하지 않도록 언어를 설계했다.
그 결과가 Java Bytecode, JVM
컴파일러-프론트엔드,백엔드로 나눠짐
PC-Program Counter
각 스레드는 메서드를 실행하고 있고, pc는 그 메서드 안에서 몇 번째 줄을 실행해야 하는지 나타내는 역할
Stack
자바 스택은 스레드 별로 1개만 존재하고, 스펙 프레임은 메서드가 호출될 때마다 생성된다.
메서드 실행이 끝나면 스텍 프레임은 pop되어 스텍에서 제거된다.
Stack Frame
-스택 프레임은 메서드가 호출될 때마다 새로 생겨 스택에 push된다.
-스택 프레임은 Local variables array,Operand stack,Frame Data를 갖는다.
-Frame Data는 Constant Pool, 이전 스택 프레임에 대한 정보, 현재 메서드가 속한 클래스/객체에 대한 참조 등의 정보를 갖는다.
Native Method Stack
Local Variable Array