


14번의 m2의 실행 후 “m2”로 됨.





매개변수(동전 투입구)

인수(동전)

메서드는 호출할 때만 내부{ }가 실행된다.
ex) 밑의 사진에서 m1 호출 전에는 빨간상자 열리지x
메서드~~ 리턴 값이 호출문으로 바뀐다.

*메모리
static : 1번 띄울 수 있음.
시작 전 메모리에 띄우고 싶어(JVM이 , 우리가 못 함)
new
동적
-매서드 안에 매서드는 못 넣음
-자바는 모든 것들이 class안에 넣어야 함.
scope


BUT 생략가능 .같은 CLASS 내

static 붙어 있는 애들은 메인 전에 뜸
n1은 아직 안떠서

같이 뜸(힙하면서 )
*메서드가 열리면 큐가 열림
*큐는 데이터저장공간은 아님



[연습]]
package ex04.test;
public class ScopeEx01 {
int n1 = 1;
static int n2 = 2;
static void m1(){
int n1 = 10;
System.out.println("m1 : " + n1);
}
void m2(){
System.out.println("m2 : " + n1);
}
//메인 시작전에 static에 n2변수와 m1 메서드가 로드 되어 있음.
public static void main(String[] args) {
System.out.println(1);
m1();
System.out.println(2);
}
}
- 메모리 띄우기 전에 Stactic을 먼저 읽음 그리고 class 별로 구분하여 static 공간을 만듦

여기서 m1은 그냥 m1 이름만 뜨지 안에 { }실행되지는 않음
→ main 찾아 실행함
main Queue & main stack 열림

(stack 안의 main stack과 m1 stack은 서로 접근 안되고 외부에서도 이 정보에 접근하지 못함.)
19번 라인의 System.out.println(1); pop(cpu에 던짐)되고
20번 라인의 m1(); pop되고
m1 Queue 에서
9번 라인의 int n1 = 10; pop되고
10번 라인의 System.out.println("m1 : " + n1);pop되고
21번 라인의 System.out.println(2); pop됨.
→ static 외의 것들 실행됨
stack에서 static 찾을 수 있음
그래서 static은 언제든 찾을 수 있지만 메모리를 많이 차지함.
생명주기
stack <heap < static
stack은 실행될 때만 생겼다가 실행 끝나면 끝!
(그리고 m1 stack은 m1에서만 찾을 수 있음)
같은 scope는 같은 변수x.
메서드 시행되면 큐와 스택 시작

heap static 언제든 찾을 수 있음-v
heap은 원할 때 호출 가능
static은
package ex04.test;
public class ScopeEx01 {
int n1 = 1;
static int n2 = 2;
static void m1(){
int n5 = 10;
System.out.println("m1 : " + n5);
}
void m2(){
System.out.println("m2 : " + n1);
}
//메인 시작전에 static에 n2변수와 m1 메서드가 로드 되어 있음.
public static void main(String[] args) {
System.out.println(1);
m1();
System.out.println(2);
ScopeEx01 sc = new ScopeEx01();
System.out.println(sc.n1);
sc.m2();
}
}
*Scope // 메모리 구조 // 위의 코드로 설명을 하자면…
ScopeEx01 (클래스)
- static (n2 =2, m1(), main) ~main 시작 전에 1번 뜸
⇒ 찾을 때는 클래스명. x (ex) ScopeEx01. n2)
⇒ 어디서든지 접근 가능하다.
- Heap (n1 = 1, m2( ))~static 안 붙은 거 // new할 때 뜸
⇒ Heap끼리는 같은 Scope여서 접근이 가능하다.
- Stack (n5 = 10)~ 메서드 안에 거, 메서드 실행 시에 뜸
⇒ 외부 접근 불가능(지역변수-v)
⇒ 같은 내부에서 접근 가능
기초변수/참조변수
- 기초변수(Primitive variable)
: 사이즈가 정해져 있는 것 ⇒ JVM이 땅을 미리 설계 가능하다.
ex) int, float, char 등
ex) 주민등록번호 → 사이즈가 13자리로 fix →미리 설계 가능
- 참조변수(reference variable)
: 사이즈를 알 수 없을 때 ⇒ 그래서 메모리의 주소(Pointer)로 저장
ex) 사람의 이름 → 이름이 2자,3자,4자 등 다양할 수 있음
EX) 채팅 : 자료형 설계(채팅메세지)
→(분석)하다 보니 자료들이 가장 긴 메세지가 10000자더라
→(Primitive 자료형으로 하면) : char 10000개(20000byte) → 메세지의 길이에 따라 너무 공간이 낭비가 될 수 있고 어떤 경우 모자랄 수 있다.
→(reference 자료형으로 하면) : n=*1000 → 1000번지에 값이 있다.
tip) 자료가 가변적일 경우,
지하철 사물함을 떠올리면, 크기가 다른 것도 있지만 보통 크기가 정해져 있음
→ 그렇지만 5000억을 그 곳에 저장한다고 하면 그 곳에 다 넣지 못함. 또한 가변적이라면? → 그래서 그 보관함에 대신 그 5000억이 있는 주소값을 넣어놓는 것. 예를 들어 강원도 정선 같이.
그러면 자료가 가변적이라도 다룰 수 있음.
찾을 때 값이 바로 찾아지는 게 주소를 찾아지는 것보다 당연히 빠르다.




sum을 바꾼다고 num이 바뀌지 않음.값이 넘어감.



파라메터도 스택에 실행 시 보임
1차 개발/2차 개발(우리가 주로 하는 것)
test 시에 최소 여러 번 해봐야 함. 여러 값들을 넣어봐야 함.

메서드 오버로딩

매개변수가 달라야 함.(개수나 변수가 다르거나.)-v
생성자
: 객체가 생성될 때 초기화하는 특수한 메소드
1) 매개 변수 없는 생성자(기본 생성자)
: 개발자가 선언x→ 자바컴파일러가 자동 만듦
2) 매개 변수 있는 생성자
생성자를 하나라도 선언하면, 컴파일러는 기본 생성자 추가x
ex) 헬스장 수건


this. ⇒ heap을 나타냄

alt + insert
(이 공간에 들어오는 게 맞나 잘 보고 하기.)


shift + 방향키 (블럭 선택)
package ex04;
//설계도
class People{
String name;
int power;
int hp;
//객체 초기화 - > 생성자
public People(String name, int power) {
this.name = name;
this.power = power;
this.hp = 100;
}
//행위 (메서드)-시간이 흐름에 따라 변하는 것-v
public void upgradePower(){
this.power++;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", power=" + power +
", hp=" + hp +
'}';
}
}
public class PersonEx01 {
public static void main(String[] args) {
People p1 = new People("티모",10);
System.out.println(p1);
p1.upgradePower();
System.out.println(p1);
}
}

push 전 commit 수정시
git commit --amend -m"생성자 공부”

⇒ 자동완성하면 import가 뜸
+) person2(); 생성자. 아무것도 안 적으면 디폴트,

복습
package ex04.test;
/**
* 1. 자료형
* 2. 조건문
* 3. 반복문
* 4. static, heap, stack
* 5. 클래스, 메서드
* 6. 생성자 오버로딩, 메서드 오버로딩
* 7. 접근제어자
*/
class Bird { // 클래스 , 오브젝트(가능성)
// 상태 : 무게, 색상
double weight;
String color;
Bird(double weight, String color) { // 파라미터
this.weight = weight;
this.color = color;
}
public void eat() {
this.weight++;
}
}
public class PracticeEx01 {
public static void main(String[] args) {
Bird b1 = new Bird(5.5, "빨강"); // 인스턴스, 오브젝트(객체)
Bird b2 = new Bird(5.0, "하얀");
b1.eat(); // 행위 (메서드)
System.out.println(b1.weight);
System.out.println(b2.weight);
}
}
* 그동안 배운 것들
1.자료형
1)완성형 표(한글 2바이트)?
: 완성된 표를 사용해서 더 추가할려면 시간 걸림 ex) 뷁
euc-kr
2) so. 그래서 utf-8 조합형으로 사용
-한글- 각(ㄱ 1b, ㅏ1b, ㄱ 1byte)
-a전송 ->1byte, 가 전송 ->3byte, 이모지-> 4byte
-문자에 따라 가변적
-마리아db
-int
-varchar(20)_가변-> 안녕 6byte
-> 14byte남으면 자동으로 줄임(사이즈를 딱 맞게 연산을 하여 줄임)
ex)채팅
~자바에서는 string 씀 -> 레퍼런스 자료
-char(20)_고정-> 안녕 6byte-> 14byte남으면 그대로 둠.(연산 하지않음-> 속도가 다름)
new가 가능한 모든 것 -오브젝트
클래스, 오브젝트(존재할 수 있는 것) >> new >> 오브젝트, 인스턴스(존재하고 있음)
2.조건문
3.반복문
4.static, heap, stack
5.클래스, 메서드
6.생성자 오버로딩, 메서드 오버로딩
7.접근제어자

*연습(bank app만들기)
-비즈니스) 고객이 계좌이체를 할 수 있는 서비스를 만드는 것.

모든 오브젝트는 고유번호가 있으면 좋다. → heap에 띄었을 때 중복을 빠르게 피할 수있다.




기본제어자 → 같은 패키지에서만 접근가능
return; : 프로그램 종료. 메인의 큐, 메서드 종료 / return은 메서드를 종료시킴
조건문은 걸러내기가 중요. 비정상적인 걸 넣어 걸러내는 게 코드가 깨끗해 짐.
일의 최소단위 =트랜잭션 // 상대적
하나라도 실패하면 프로그램이 실행되면 안되는 것
ex) 아들 밥먹기. 설거지
ex)출금 - 출금 // 입금 -입금 // 이체 - 출/입 둘 다
메서드는 하나의 일만 한다.
이 두 개는 한번에 일어나야 함. 따로 하면 실수할 확률 있음

상태변경 class
로직들 묶은 거 서비스(트랜잭션)-v
하나의 트랜잭션

Share article