inblog logo
|
Coding's note
    JAVA

    메모리 구조(큐,스택), 생성자, 기초/참조변수

    이소연's avatar
    이소연
    Aug 03, 2024
    메모리 구조(큐,스택), 생성자, 기초/참조변수
    Contents
    [연습]]기초변수/참조변수1차 개발/2차 개발(우리가 주로 하는 것)메서드 오버로딩생성자복습
    notion image
    notion image
    notion image
    14번의 m2의 실행 후 “m2”로 됨.
    notion image
    notion image
    notion image
    notion image
    notion image
    매개변수(동전 투입구)
    notion image
    인수(동전)
    notion image
    💡
    메서드는 호출할 때만 내부{ }가 실행된다.
    ex) 밑의 사진에서 m1 호출 전에는 빨간상자 열리지x
    메서드~~ 리턴 값이 호출문으로 바뀐다.
    notion image
    *메모리
    static : 1번 띄울 수 있음.
    시작 전 메모리에 띄우고 싶어(JVM이 , 우리가 못 함)
    new
    동적
     
    💡
    -매서드 안에 매서드는 못 넣음
    -자바는 모든 것들이 class안에 넣어야 함.
    💡
    scope
    notion image
    notion image
    BUT 생략가능 .같은 CLASS 내
    notion image
    static 붙어 있는 애들은 메인 전에 뜸
    n1은 아직 안떠서
    notion image
    같이 뜸(힙하면서 )
     
     
    *메서드가 열리면 큐가 열림
    *큐는 데이터저장공간은 아님
    notion image
    notion image
    notion image

    [연습]]

    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); } }
    1. 메모리 띄우기 전에 Stactic을 먼저 읽음 그리고 class 별로 구분하여 static 공간을 만듦
    notion image
    여기서 m1은 그냥 m1 이름만 뜨지 안에 { }실행되지는 않음
     
    → main 찾아 실행함
    main Queue & main stack 열림
    notion image
    (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.
     
    메서드 시행되면 큐와 스택 시작
    notion image
    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)
        ⇒ 같은 내부에서 접근 가능
         
         
     

    기초변수/참조변수

     
    1. 기초변수(Primitive variable)
      1. : 사이즈가 정해져 있는 것 ⇒ JVM이 땅을 미리 설계 가능하다.
        ex) int, float, char 등
        ex) 주민등록번호 → 사이즈가 13자리로 fix →미리 설계 가능
     
    1. 참조변수(reference variable)
      1. : 사이즈를 알 수 없을 때 ⇒ 그래서 메모리의 주소(Pointer)로 저장
        ex) 사람의 이름 → 이름이 2자,3자,4자 등 다양할 수 있음
     
    EX) 채팅 : 자료형 설계(채팅메세지)
    →(분석)하다 보니 자료들이 가장 긴 메세지가 10000자더라
    →(Primitive 자료형으로 하면) : char 10000개(20000byte) → 메세지의 길이에 따라 너무 공간이 낭비가 될 수 있고 어떤 경우 모자랄 수 있다.
    →(reference 자료형으로 하면) : n=*1000 → 1000번지에 값이 있다.
     
     
    💡
    tip) 자료가 가변적일 경우, 지하철 사물함을 떠올리면, 크기가 다른 것도 있지만 보통 크기가 정해져 있음 → 그렇지만 5000억을 그 곳에 저장한다고 하면 그 곳에 다 넣지 못함. 또한 가변적이라면? → 그래서 그 보관함에 대신 그 5000억이 있는 주소값을 넣어놓는 것. 예를 들어 강원도 정선 같이. 그러면 자료가 가변적이라도 다룰 수 있음.
    💡
    찾을 때 값이 바로 찾아지는 게 주소를 찾아지는 것보다 당연히 빠르다.
     
    notion image
     
     
     
    notion image
    notion image
    notion image
    sum을 바꾼다고 num이 바뀌지 않음.값이 넘어감.
    notion image
    notion image
    notion image
    파라메터도 스택에 실행 시 보임

    1차 개발/2차 개발(우리가 주로 하는 것)

    test 시에 최소 여러 번 해봐야 함. 여러 값들을 넣어봐야 함.
    notion image
     

    메서드 오버로딩

    notion image
     
    매개변수가 달라야 함.(개수나 변수가 다르거나.)-v
     

    생성자

    : 객체가 생성될 때 초기화하는 특수한 메소드
    1) 매개 변수 없는 생성자(기본 생성자)
    : 개발자가 선언x→ 자바컴파일러가 자동 만듦
    2) 매개 변수 있는 생성자
    💡
    생성자를 하나라도 선언하면, 컴파일러는 기본 생성자 추가x ex) 헬스장 수건
     
    notion image
    notion image
    this. ⇒ heap을 나타냄
     
    notion image
     
    💡
    alt + insert (이 공간에 들어오는 게 맞나 잘 보고 하기.)
    notion image
    notion image
     
     
    💡
    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); } }
    notion image
    💡
    push 전 commit 수정시 git commit --amend -m"생성자 공부”
     
    notion image
    ⇒ 자동완성하면 import가 뜸
     
    +) person2(); 생성자. 아무것도 안 적으면 디폴트,
    notion image

    복습

    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.접근제어자
    notion image
     
     
    *연습(bank app만들기)
    -비즈니스) 고객이 계좌이체를 할 수 있는 서비스를 만드는 것.
    notion image
    모든 오브젝트는 고유번호가 있으면 좋다. → heap에 띄었을 때 중복을 빠르게 피할 수있다.
    notion image
    notion image
    notion image
    notion image
    기본제어자 → 같은 패키지에서만 접근가능
    return; : 프로그램 종료. 메인의 큐, 메서드 종료 / return은 메서드를 종료시킴
    조건문은 걸러내기가 중요. 비정상적인 걸 넣어 걸러내는 게 코드가 깨끗해 짐.
     
    일의 최소단위 =트랜잭션 // 상대적
    하나라도 실패하면 프로그램이 실행되면 안되는 것
    ex) 아들 밥먹기. 설거지
    ex)출금 - 출금 // 입금 -입금 // 이체 - 출/입 둘 다
     
    메서드는 하나의 일만 한다.
     
    이 두 개는 한번에 일어나야 함. 따로 하면 실수할 확률 있음
    notion image
    상태변경 class 로직들 묶은 거 서비스(트랜잭션)-v
     
    하나의 트랜잭션
    notion image
     
     
    Share article
    Contents
    [연습]]기초변수/참조변수1차 개발/2차 개발(우리가 주로 하는 것)메서드 오버로딩생성자복습

    Coding's note

    RSS·Powered by Inblog