'4월 26일' 열 번째 기록 [TIL]

가은·2024년 4월 26일
0

I Learned [본 캠프]

목록 보기
11/135
post-thumbnail

👩‍🏫 오늘의 출석

❓열 번째, 9 to 9을 해 본 소감❓

오늘도 참 하루가 빨리 흘러갔다. 뭐 하나 제대로 끝내기 못 한 것 같은데 벌써 하루가 끝이 났고 한 주가 이렇게 금방 흘러갔다. 뭔가 엄청 금세 흘러간 5일인 것 같은데 막상 월요일을 생각해 보면 아주 멀게 느껴지는 이유는 뭘까.. 오늘은 뭐 하나를 완벽하게 끝내지 못하고 이리저리 우왕좌왕하다가 끝이 난 것 같다. 거기다 유큐브 강의 들은 내용 정리하고 나니 2시간이 이렇게 금방 흘러갔다. 그럼에도 아직 할 일이 산더미처럼 남아 있어서 아마 주말에도 열심히 공부를 해야 할 것 같다. 이번 주 내내 든 생각은 캠프가 더 빨리 시작 해야 했다는 생각이었다. 지난주에라도 강의받고 시작했으면 어땠을까 하는 생각이 든다. 그동안 열심히 논 나를 탓하며 열심히 앞으로의 시간을 살아가야지. 나의 목표는 이번주 주말 동안 자바 관련 지식을 열심히 머리에 저장해서 Level 2 개인 과제를 내 힘으로 잘 풀어내는 것이다! 제발, 이 목표를 잘 이뤄낼 수 있었으면 좋겠다.

📑오늘 학습한 내용

9시부터 10시까지는 알고리즘 심화 실시강 강의를 들으며 시작했다.
10시부터 11시까지는 코드카타를 진행했다.

🧩오늘의 알고리즘 : 숫자 비교하기🧩

/*java*/
class Solution {
    public int solution(int num1, int num2) {
        if (num1 == num2){
        return 1;
    } else{
        return -1;
    }  
   }
}
#python
def solution(num1, num2):
    if num1 == num2:
        return 1
    else:
        return -1

11시부터 12시까지는 5주차 강의를 반정도 들었다. 강의를 듣다보니 내가 지금 5주차 강의를 듣고 있을 때가 아닌 것 같다는 생각이 강하게 들었다. 내가 앞에 있는 내용들도 제대로 머리에 남아있지 않는데 지금 강의를 빨리 다 듣기만 하는게 무슨 소용인가 하는 생각에 반정도 듣던 강의를 멈추고 1주차 강의 내용부터 다시 보면서 노션에 정리를 하기 시작했다.
그렇게 1시부터 4시 30분까지 1주차부터 2주차까지 개념을 다시 훑어보고 정리했다. (노션에 정리해두었기 때문에 여기에는 따로 다시 적지 않을 예정.)
4시 30분부터는 개인 과제 Level 2를 풀어보려고 했는데 이 또한 내가 지금 가지고 있는 지식만으로는 진행할 수 없다고 판단했고 Level 2를 본격적으로 시작하기 전에 java에 대한 전체적인 지식을 내가 제대로 알고 있어야 사용할 수 있겠다고 판단했고 결국 유튜브 강의를 듣기로 결정했다.

💻자바의 정석 내용정리

클래스와 객체

=> 클래스 = 제품 설계도 / 객체 = 제품

  • 클래스의 정의 : 클래스란 객체를 정의해 놓은 것

  • 클래스의 용도 : 클래슨느 객체를 생성하는데 사용

  • 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념

  • 객체의 용도 : 객체가 가지고 있는 기능과 속서에 따라 다름

  • 객체의 구성요소 : 속성(변수) + 기능(메서드)

class Tv{
	/* 속성 [크기, 길이, 높이, 색상, 볼륨, 채널 등] */
	String color: //색깔
    boolean power; //전원상태
    int channel; //채널
    
    /* 기능 [켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등] */
    void power() {power = !power;}
    void channlUp() {channel++}
    void channlDown() {channel--;}
}

Q. 클래스가 필요한 이유? A. 객체를 생성하기 위해
Q. 객체가 필요한 이유? A. 객체를 사용하기 위해
Q. 객체를 사용한다는 것은? A. 객체가 가진 속성과 기능을 사용

객체와 인스턴스

객체 : 모든 인스턴스를 대표하는 일반적 용어
인스턴스 : 특정 클래스로부터 생성된 객체
클래스[설계도] --- 인스턴스화 ---> 인스턴스(객체) [제품]

객체 생성과 사용

  1. 객체 생성
    클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
    변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

Tv t; // Tv클래스 타입의 참조변수 t를 선언
t = new T; //Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

  1. 객체의 사용
    t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 함
    t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출
    System.out.ptintln("현재 채널은 " + t.channel + " 입니다.");

클래스 정의

클래스 == 데이터 + 함수
1. 변수 : 하나의 데이터를 저장할 수 있는 공간
2. 배열 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체 : 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
4. 클래스 : 데이터와 함수의 결합(구조체+함수)

선언위치에 따른 변수의 종류

class Variables{   // 클래스 영역
	int iv;				//인스턴스 변수
    static int cv;		// 클래스 변수(static 변수, 공유변수)
    
    void method() {     // 메서드 영역
    int lv = 0;   		// 지역 변수, 메서드 종료 시 자동 제거
    }
}
변수의 종류선언위치생성시기
클래스 변수클래스 영역클래스가 메모리에 올라갈 때
인스턴스 변수클래스 영역인스턴스가 생성되었을 때
지역변수클래스 영역 이외의 영역변연 선언문이 수행되었을 때
(메서드 생성자, 초기화 블럭 내부)

클래스 변수와 인스턴스 변수

Class Card{
	/*인스턴스 변수 (개별 속성)*/
	String kind;        // 무늬
    int number;			//  숫자
    
    /*클래스 변수 (공통 속성)*/
    static int width = 100;			// 폭
    static int height = 250;		// 높이
}

메서드

  1. 문장들을 묶어놓은 것 - 작업단위로 문장들을 묶어 이름 붙인 것, 명령문 집합
  2. 메서드는 클래스 영역에만 정의 가능
  3. 메서드 = 선언부 + 구현부
반환타입 메서드이름 (타입 변수명, 타입 변수명, ...)    //선언부
{
//메서드 호출시 수행될 코드 , 구현부
}

int add(int a, int b){    // 선언부
	int result = a + b;		
    return result;		  // 호출한 메서드로 결과를 반환한다.
}

호출 스택(call stack)

스택(stack) : 밑이 막힌 상자와 같음, 내용물이 그 위에 차곡차곡 쌓임

호출스택 : 메서드 수행에 필요한 메모리가 제공되는 공간

  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
  • 아래에 있는 메서드가 위의 메서드를 호출한 것
  • 맨 위의 메서드 하나만 실행 중, 나머지는 대기중

기본형 매개변수

기본형 매개변수 - 변수의 값을 읽기만 할 수 있음
참조형 매개변수 - 변수의 값을 읽고 변경할 수 있음

static 메서드와 인스턴스 메서드

  1. 인스턴스 메서드
  • 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용가능
  1. static 메서드(클래스 메서드)
  • 객체 생성 없이 '클래스이름.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용불가

static을 언제 사용해야 할까?

  1. 속성(멤버 변수) 중에서 공통 속성에 static을 붙임
  2. 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙임

메서드 간의 호출과 참조

static 메서드는 인스턴스 변수(iv)를 사용할 수 없음.

class TestClass2{
	int iv;					// 인스턴스 변수 (객체 생성 후 사용 가능)
    static int cv;			// 클래스 변수 (언제나 사용 가능)
    
    void instanceMethod(){			// 인스턴스 메서드 (객체 생성 후 호출 가능)
    	System.out.println(iv);		// 인스턴스 변수를 사용할 수 있음
        System.out.println(cv);		// 클래스 변수를 사용할 수 있음
    }
   static void staticMethod(){		// static 메서드 (객체 생성 없이 호출 (항상) 가능)
   		System.out.println(iv);		// 에러, 인스턴스 변수를 사용할 수 없음, 객체 생성 수 호출 가능 하기 때문
   	    System.out.println(cv);		// 클래스 변수 사용 가능
   }
}

static 메서드는 인스턴스 메서드(im)를 호출할 수 없음.

class TestClass {
	void instanceMethod() {}			// 인스턴스 메서드
    static void staticMethod() {}		// static 메서드
    
    void instanceMethod2() {			// 인스턴스 메서드
    		instacneMethod();			// 다른 인스턴스 메서드를 호출
            staticMethod();				// static 메서드를 호출
    }
    static voud staticMethod2() {		// static 메서드
    	instanceMethod();				// 에러, 인스턴스 메서드 호출 불가 (iv로 작업하는 메서드 => 객체 필요)
        staticMethod();					// static 메서드 호출 가능
    }
}
  • static 메서드는 static 메서드 호출 가능
  • static 메서드는 인스턴스 변수 사용이 불가능
  • static 메서드는 인스턴스 메서드 호출 불가능
  • static 메서드는 static 메서드 호출 시 객체(iv묶음)가 없을 수도 있기 때문에 인스턴스 멤버를 쓸 수 없음

0개의 댓글