TIL - 22.11.18(자바 복습 중)

자라나는 ㅇㅅㅇ개발자·2022년 11월 19일
0

TIL

목록 보기
15/126


6. 클래스와 객체 2


this 예약어

1. 생성된 인스턴스 스스로를 가리키는 예약어

  • 클래스 코드에서 사용하는 this는 생성된 인스턴스 자신을 가리키는 역할도 한다.

2. 생성자에서 다른 생성자를 호출

  • 클래스에 생성자가 여러 개 있을 때 다른 생성자에 코드가 이미 작성되어 있다면 this를 활용하여 다른 생성사즐 호출할 수 있다.
  • this를 사용하여 생성자를 호출하는 코드 이전에는 다른 코드를 넣을 수 없다. -> 오류가 발생한다.

3. 자신의 주소를 반환

  • 생성된 클래스 자신의 주소 값을 반환할 수 있다.
  • 인스턴스 주소 값을 반환할 때는 this를 사용하고 반환형은 클래스 자료형을 사용
  • 자주 사용되지 않음


예제를 통한 클래스 이해하기 - 1

class Calculation{                  // 새로운 Calculation 이라는 클래스를 만들어줌
    int add(int x, int y){          // 그 안에 add라는 메소드
        return x + y;
    }
    int subtract(int x, int y){     // subtract 라는 메소드
        return x - y;
    }
}                                   // 아직 생성자로 인스턴스를 만들어주지 않음

public class Main {
    public static void main(String[] args) {
        Calculation calculation = new Calculation();        // 생성자로 Calculation 클래스의 인스턴스를 만들어줌
        int addResult = calculation.add(1,2);         // Calculation에 있는 메소드를 빌려쓰기위해 x = 1, y = 2 값을 들고간다.
        int subtractResult = calculation.subtract(5,3); // subtractResult : 메소드의 이름

        System.out.println(addResult);
        System.out.println(subtractResult);
    }
}

예제 - 2

class Phone {
    String model;
    String color;
    int price;

    Phone (String model, String color, int price){	// 3가지 parameter를 세팅할 수 있는 constructor, class의 이름과 같아야한다.
        this.model = model;	// command + N 으로 자동 생성 가능
        this.color = color;
        this.price = price;
    }
}

public class Main {
    public static void main(String[] args) {
        Phone galaxy = new Phone("galaxy", "blue", 100);
			// 위에 3개짜리 parameter를 받는 constructor를 생성해주었으므로 ()에 값을 넣어줘야 작동한다.
        Phone iphone =new Phone("iphone10", "black", 120);

        System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " 색상을 " + galaxy.price + "만원에 샀다.");
        System.out.println("영희는 이번에 " + iphone.model + iphone.color + " 색상을 " + iphone.price + "만원에 샀다.");
    }
}

철수는 이번에 galaxyblue 색상을 100만원에 샀다.
영희는 이번에 iphone10black 색상을 120만원에 샀다.



CS 특강 - 프로세스, 스레드, 비동기


프로세스

정의

  • 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
  • 운영체제로부터 시스템 자원을 할당받은 작업의 단위
    시스템 자원 : 실행되기 위해 필요한 독립된 메모리 영역

특징

  • 프로세스는 독립된 메모리를 할당받는다.
  • 메모리를 관리해주는 '프로세스 주소 공간'은 Code, Data, Stack, Heap 으로 구성된다.
    Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
    Data : 전역병수, 정적변수 등
    Stack : 지역변수, 함수 매개변수, 리턴 값(임시 메모리 영역)
    Heap : 동적 할당 시 사용(new(), Malloc() 등)
  • 기본적으로 프로세스마다 최소 1개의 (메인)스레드를 갖는다.

스레드

정의

  • 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
  • 스레드를 일꾼 이라고 생각한다면 이해하기 편하다.

특징

  • 스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack영역을 각자 할당받는다.

멀티 프로세스

  • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것

멀티 스레드

  • 하나의 프로그램을 여러개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
  • 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다.

동기 vs 비동기 -> 함수의 작업 완료 여부에 관점

  • 동기 : 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 리턴값을 계속 확인하면서 신경 쓰는것
  • 비동기 : 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 작업 완료 여부는 신경 쓰지 않는 것

블로킹 vs 논블로킹

  • 블로킹 : 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값이 올 때까지 기다린 후 진행되는 것
    제어권을 넘겨주는 것
  • 논블로킹 : 함수 A가 함수 B를 호출한 뒤, 함수 B의 작업 완료 여부와 상관 없이 진행되는 것
    제어권을 넘겨주지 않는 것


오랜만에 일기..

점점 벨로그를 사용하는데에 익숙해져서 이것저것 별짓 다해보고있다...
사실 요즘에는 강의 진도 맞추거 때문에 내용 이해와 정리에 정신이 팔려있었지만,
점점 배워가고 복습할수록 내 지식이 쌓이고, 응용을 해나가는 경험을 하다보니 나의 레벨이 올라가고 있다는 생각도 들고있다.
하지만 아직 이해못한 부분들도, 응용을 할 수 있는 부분들도 많이 부족해서 강의 내용들의 이해가 안되는 부분들도 많음니아럼햐ㅗㅈ매랴ㅑ나....
이번 주말에는 자바 기초강의를 전부 복습하고, 클래스를 직접 만들어보는거까지
이게 내 목표이다!!!!!!!!!으야아아아아아앙

0개의 댓글