TIL

2023.12.29 TIL(배운 내용 추가)

아리단길아조씨 2023. 12. 29. 20:59
728x90

오늘 배운 것들

1. 어제에 이은 자료형의 종류와 자료형 변환
- 숫자형(Number), 문자형(String), 논리형(Boolean)

1-1. 숫자형
- 정수, 실수(float, ex) 3.14), 지수형(exp, ex) 2.5e5 = 2.5 * 10^5),
 - NaN(Not A Number): 숫자가 아닌 것을 변환할 때 나타나는 현상이다.
 - 무한대, -무한대(infinity, -infinity)
무한대 ex) 

let num5 = 1 / 0;

-무한대 ex)

let num6 = -1 / 0;

1-2. 문자형
- 문자형은 String(문자열 = 문자의 나열)이라고 하며, 작은따옴표(' ')나 큰 따옴표(" ")로 감싸주면 문자형이 된다.

let str = "Hello World";

 - 문자열의 길이를 구하는 방법
'string.length' = 문자열의 길이를 구하고하는 문자열에 length 함수를 사용하여 문자열의 길이를 구할 수 있다.

let str = "Hello World";
console.log(str.length);

str 변수에 "Hello World" 라는 값으로 할당을 한 후 length 함수로 길이를 확인해 보면 띄어쓰기를 포함하여 문자열의 길이를 구해준다! str문자열의 길이는 11이 출력된다!

- 문자열을 결합하는 방법
문자열을 결합하고 싶을 때는 concat(concatenation) 함수를 사용한다!
concat 함수를 사용하여 문자열을 결합하는 방법

let str1 = "Hello, ";
let str2 = "World!";
let result = str1.concat(str2); // 붙이려는 변수를 concat( )의 괄호 안에 넣어준다!
console.log(result);

결합한 결과를 저장해 줄 result라는 변수를 새롭게 선언을 해주고 결합할 녀석을 concat함수의 괄호 안에 삽입시켜 준다.
=> result = Hello,. concat(World)라고 이해할 수 있을 것 같다.
결과는 당연 Hello, 뒤에 붙이고 싶은 녀석이 World였으니 Hello, World가 출력된다.

- 문자열을 자르는 방법 
1. substr(1, 2): 시작 위치에서 몇 개를 잘라줄까?(2번째 글자 포함해서 2개만 잘라줘~)

let str3 = "Hello, World";
console.log(str3.substr(1, 2));

str3에서 2번 째부터 2개만 잘라서 보여줘~ 하는 코드다.
결과는 e부터 시작해서 두 개만 자르고 싶다고 요청을 했으니 l까지 포함해서 el을 출력할 것이다. 
내가 World라는 단어를 자르고 싶다면?
str3.substr(7, 5)를 입력하면 될 것이다. 
(8번째 포함해서 5개 잘라줘~)

2. slice(1, 2) : 시작 위치부터 지정한 위치까지 통째로 잘라서 보여주는 친구임

let str3 = "Hello, World";
console.log(str3.slice(0, 5))

1번째 녀석부터 5개 잘라줘~
결과: Hello

아직 큰 차이도 모르겠고 용어들 자체도 생소하기 때문에 좀 더 공부가 필요한 녀석이다.
너무 깊게 파고들지 말고 나중에 사용하면서 더 익숙해져야 할 것 같다...

3. 문자열 검색하기(search)

let str4 = "Hello, World";
// console.log(str4.search("World")); // 찾고 싶은 문자열을 search(" ")에 넣어준다!
 

4. 문자열 대체하기(replace)
replace함수를 사용하여 바꾸고자 하는 친구를 써준 후 바꾸고 싶은 내용을 입력한다.

let str5 = "Hello, World";
let result01 = str5.replace("World", "JavaScript"); // .replace("바꿀 것 지정", "바꿀 내용 입력");

str5.replce("World", "JavaScript); => str5의 World를 JavaScript로 대체하겠다.

5. 문자열 분할하기(split)
split는 자르고 싶은 내용을 기준으로 문자열을 분할해서 배열로 만들어준다.

let str6 = "apple, banana, kiwi"
let result02 = str6.split(","); // .split(" ")안에 자를 것을 넣어준다.

 console.log를 사용하여 확인해 본 결과 = [ 'apple', ' banana', ' kiwi' ]

1-3. Boolean(논리형)
불리언은 true(참), false(거짓)을 나타내주는 자료형이다.
종류
1. true
2. falese
3. undefined

// undefined -> un: Not, define: 정의하다. => 정의 되지 않았음
let x;
 // 말 그대로 변수를 선언만 하고 값을 할당하지 않으면 undefined가 출력되는 것을 확인 할 수 있다.
 //실제로 undefined를 마주치게 되면 변수에 값이 할당 되지 않았다고 이해할 수 있게 됐다.

// console.log(x);


4. null

// null : 값이 존재 하지 않음을 '명시적'으로 나타내는 방법(일부러 이렇게 나타내게 했다.)
// null과 undefined는 다르다! null은 개발자가 의도적으로 값이 없다고 나타내기 위해 사용한것이고,
// undefined는 정의 되지 않은 값을 의미한다. (와... 이건 진짜 헷갈렸는데 좋다.)
let y = null;
// console.log(y);


1-4. 자료형 변환
형변환: 자료형을 변경한다.
형변환에는 '암시적 형변환(자동으로 바뀌는 형변형)'과 '명시적 형변환(개발자의 의도로 형 변환)'이 있다.

- 암시형 형변환
1. 문자열

let result1 = 1 + "2";
let result2 = "1" + true;


숫자형과 문자열, 문자열과 불리언이 더하기 연산자로 연결되어 있는데,
typeof를 사용하여 데이터 타입을 확인해 보면 "string"이라는 결과를 확인할 수 있다.
문자형과 다른 데이터 타입이 더하기 연산자로 묶이면 문자형이 우선시되어 문자형이 된다.

{}, null, undefiend + "1" => 문자열

2. 숫자

 
let result3 = 1 - "2";
// console.log(result3);
// console.log(typeof result3);

let result4 = "2" * "3";
// console.log(result4);
// console.log(typeof result4);

let a = "2" - null;
console.log(a);
console.log(typeof a);
// 문자열과 숫자열이 더하기 연산자를 통해 만나게 되면 문자열이 우선순위를 가져 문자열로 암묵적인 형 변환이 이뤄지지만,
// 나머지 연산자들을 통해서 만났을 경우에는 숫자형이 우선순위를 가지게 되어 숫자열로 암묵적인 형 변환이 이루어진다!

- 명시적 형변환
1. boolean으로 변환하는 방법: Boolean(형변환 할 녀석); 
Boolean(NaN); , Boolean(undefined); ->  boolean 타입으로 변형

2. 문자형으로 변환하는 방법: String(형변환 할 녀석);
String(true); , String(1); -> string 타입으로 변형

3. 숫자형으로 변환하는 방법: Number(형변환 할 녀석);
Number
("123") -> number 타입으로 변형
* 123에 큰 따옴표로 감싸놨기 때문에 문자형임! *


2. 연산자 종류
- 기본적인 사칙연산자( +, -, *, /, %)
주의! "문자열" + "문자열" 일 때 더하기 연산자는 더하는 게 아닌 문자열을 연결해 주는 역할을 수행한다!
%(나머지 연산자): a와 b를 나눈 값이 아닌 a와 b를 나눠서 남은 나머지 값을 출력한다.

- 할당 연산자(=, -=, +=, *=)
형태: x += 5; => x = x + 5; 의 형태와 같다. 나머지 할당 연산자도 같은 내용임.

- 비교 연산자(===,!==, <, >) : true 또는 false를 반환하는 연산자임.
1. ===(일치 연산자): 데이터 타입까지 일치를 해야 true를 반환해 줌

// console.log(2 === 2); // ture
// console.log("2" === 2); //false 데이터 타입(자료형)이 일치하지 않으므로 false를 반환


2.!==(불일치 연산자): 데이터 타입까지 일치를 해야 false를 반환해 줌

// console.log(2 !== 2); // false
// console.log("2" !== 2); //true


3. <, >, <=, >= (작다, 크다, 작거나 같다, 크거나 같다)

- 논리 연산자(&&, ||,!)
1. &&(논리 곱 연산자 and) : 값이 모두 true일 때만 true를 반환한다.

console.log(true && true); // true
console.log(false && false); // false
console.log(false && true); // false
console.log(true && false); // false

2. ||(논리 합 연산자 or): 값이 하나라도 true면 true를 반환한다.

console.log(true || true); // true
console.log(false || false); // false
console.log(false || true); // true
console.log(true || false); // true

3.!(논리 부정 연산자 not): 값을 반대로 바꾼다.

console.log(!true); //false


4. 삼항연산자: 항이 3개이고, 조건에 따라 값을 선택한다.

// 조건에 따라 값을 선택한다.
let x = 10;
let result = x > 5 ? "크다" : "작다";
console.log("----------");
console.log(result); // "크다"

console.log("----------");
// let y = 20;
// // 삼항 연산자를 이용해서 y가 10보다 작은 경우 작다를
// // console.log로 출력하시오.
// // 10보다 크다면 크다를 출력하시오.

let result1 = y > 20 ? "크다" : "작다";
console.log(result1)


5. 타입연자(typeof): 데이터 타입을 알려주는 친구

console.log(typeof 5); // Number



3. 함수 선언과 호출
함수: input과 output을 가지고 있는 기능의 단위이다.

- 함수 선언문

function add(x, y) {
    return x + y;
}

두 개의 숫자를 입력받아서 덧셈을 한 후 내보내는 함수
위 함수에서의 input, output
- input: 함수의 매개변수(매개체가 되는 변수 x, y)
-output: return문 뒤에 오는 반환 값

- 함수 표현식

let add2 = function(x, y) {
    return x + y;
}

- 함수 호출 방법: '함수 이름(매개변수)" add(2, 3)
함수를 호출한다 = 함수를 사용한다.

함수명() -> add(인수 = 입력 값)
// console.log(add(2, 3));


4. 스코프와 전역변수, 지역변수
- 스코프: 범위. 즉, 변수가 영향을 미칠 수 있는 범위를 뜻함.
- 전역변수: 전체 영역에서 영향을 끼칠 수 있는 변수.
- 지역변수: 함수 내부에서 선언되어 전체에는 영향을 줄 수 없고, 
함수 내부에서 영향을 끼칠 수 있는 변수.

5. 화살표 함수
원래의 함수

function add(x, y) {
    return x + y
}


- 기본적인 화살표 함수를 만드는 방법

let arrowFunc01 = (x, y) => {
    return x + y
};

- 한 줄로 표현 가능한 화살표 함수

let arrowFunc02 = (x, y) => x + y;

한줄로 표현이 가능할 때: 1. return문일 때 2. 중괄호를 생략할 수 있을 때
일반함수도 만들기 어려운데... 일반 함수 선언에 익숙해지고 나서 화살표 함수를 공부하는 게 좋을 것 같다...


6. 조건문
- if문 

if(x < 0) {
    // main logic
    console.log('x는 양수입니다.');
}

if(조건) { 실행할 로직} 조건에는 참, 거짓을 구분할 수 있어야 한다!

-if else문

// 조건이 true이면 1번 메인로직 실행
if(x > 0) {
    // main logic 1
    console.log("x는 양수입니다.")
    // true가 아닌 경우 2번 메인조직 실행
} else  {
    // main logic 2
    console.log("x는 음수입니다.")
}

조건에 충족했다면 첫 번째 if문에서 작성한 메인 로직이 실행이 되고,
중족 하지 못하면 else문에 있는 2번째 메인 로직이 실행된다.

- if  else if else문

if(x < 0) {
    // main logic #1
    console.log('1');
} else if(x >= 0 && x < 10) {
    // main logic #2
    console.log('2');
} else {
    //main logic #3
    console.log('3');
}

if else if else문은 if else문에서 조건이 하나 더 추가된 조건문이다.

- case문

let fruit = '바나나2';

switch(fruit) {
    // witch case break default는 세트메뉴
    case "사과" :
        console.log("사과입니다.");
        break;
    case "바나나" :
        console.log("바나나입니다.");
        break;
    case "키위" :
        console.log("키위입니다.");
        break;
    default :
        console.log("아무 것도 아닙니다.");
        break;
}

개인적으로 항상 까먹는 조건문이다... 처음이라 복잡하기도 하고...
내가 기억해야 할 것: switch문에는 항상 변수가 따라옴, switch-case-break-default는 한 세트이다!
break를 사용하지 않을 시 멈추지 않는 폭주 기관차로 변하여 결괏값을 'undefined'로 출력을 한다!
이번에 강의를 들으면서 처음 알게 된 default조건에 아무것도 해당되지 않는 녀석들을 위한 친구라는 것을 알게 되었다.


7. 조건문의 중첩
말 그대로 조건문에 조건문을 추가해서 쓸 수 있다는 내용인데 나름 신기했다.

let age = 15;
let gender = "남성";

// 미성년자 구분
if (age >= 18) {
    if (gender === "여성") {
        console.log("성인 여성입니다.");
    } else {
        console.log("성인 남성입니다.")
    }

} else {
    if (gender === "여성") {
        console.log("소녀입니다.");
    } else {
        console.log("소년입니다.");
    }
}

첫 번째 if문의 조건인 18이거나 18 이상이면 두 번째 if문에 들어가 다시 참 거짓을 가려낸 후 참이면
성인 여성을 출력하고, 아니라면 성인 남성이라는 결과 값을 출력한다! 
else문의 경우 첫 번째 if문에서 탈락한 친구들이 가는데 그중에서도 또 참이면 소녀를 출력, 아니라면 소년을 출력한다.

8. 조건부 실행
너무 신기한 친구이다. if문으로 조건문을 꼭 만들지 않아도 조건부 실행으로 조건문을 작성해 실행하는 효과를 볼 수 있다는 것을 알았다. 하지만 조건부 실행은 어떠한 특별한 경우에만 실행하거나 어떤 조건에 들어왔을 때 사용한다.
if문을 사용했을 때와 조건(논리연산자를 사용) 부 실행을 사용한 예시

let x = 10;

if(x > 0) {
    console.log("x는 양수입니다.");
}
(x > 0) && console.log("x는 양수입니다.");

if문에서 x가 0보다 크면 콘솔로그를 실행하게 작성을 했다. 결과는 당연 "x는 양수입니다."가 출력될 것이다.
하지만, 아래 조건부 실행에서 x가 0보다 크다는 조건을 적어주고 && 연산자를 사용하여 조건부 실행을 진행해도, 조건이 true이기 때문에 콘솔로그의 "x는 양수입니다." 가 출력될 것이다.

- OR 조건(||)

// or 조건 (||)
// 삼항 연산자와 단축평가
let y; // y에는 undefined
let z = y || 20; // y가 undefined라면 20으로 값을 지정해라

console.log(z);

y라는 변수를 할당하지 않고 선언을 하고, z라는 변수에 y 또는 20이라는 조건을 주어 y는 정의되지 않았으므로 undefined이므로 falsy하니... 20이라는 값을 y에 20을 준 게 아닐까 싶다...(아마도) 

9. falsy, truthy 한 값

//falsy한 값, truthy한 값

if (0) {
    // main logic
    console.log("Hello");
}

if ("") {
    // main logic
    console.log("Hello");
}

if (null) {
    // main logic
    console.log("Hello");
}

if (undefined) {
    // main logic
    console.log("Hello");
}

if (NaN) {
    // main logic
    console.log("Hello");
}

if (false) {
    // main logic
    console.log("Hello");
}

// 위의 모든 조건들은 falsy한 값이므로 조건문이 실행되지 않았다.

if(true) {
    console.log("Hello");
}

- falsy값: 0, 빈 문자열, null(값을 할당하지 않았음을 명시적으로 보여주는 친구), undefined(값이 없는 친구), NaN(Not A Number), false => 아예 false 값이거나 좀 이상한 친구들은 falsy 한 값이라고 일단은 습득을 해뒀다... 나중에 다시 개념정리를 하게 된다면 깨달음을 얻지 않을까?

10. 객체
- Object(객체)는 key - value가 단짝으로 항상 함께 하는 친구이며,
하나의 변수에 여러 개의 값을 넣을 수 있는 친구이다.

- 객체를 생성하는 방법
1. 기본적인 객체 생성 방법

let person = {
    name: "홍길동",
    age: 30,
    gender: "남자",
};

일반적으로 변수를 선언하는 것처럼 선언을 하지만 '중괄호' 안에 키와 값(key, value)이 쌍을 지어 있는 모습을 기억하자.

- 생성자 함수를 이용한 객체 생성

function Person(name, age, gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
}

let Person = new Person("홍길동", 30, "남자");
let Person = new Person("홍길순", 20, "여자");

말 그대로 함수라 함수를 선언하듯이 function 객체 이름(객체에 들어갈 key를 매개변수에 지정해 준다)
그리고... 왜인지 모르겠는데 this. 를 넣어준다고 튜터님이 설명을 해주셨다...(아직 배울 때가 아니라 하셨다.)
각설하고, 그 후 변수를 선언해서 객체를 만들어준다.(일단은 여기까지 밖에 모르겠다...)

- 객체에 접근하는 방법

//객체 이름을 적고 '.'을 통해서 해당 객체의 property(속성)에 접근할 수 있다.
console.log("1", person.name);
console.log("2", person.age);
console.log("3", person.gender);

그렇단다. 객체이름을 적고 온점(.)을 통해 해당 객체의 속성에 접근을 할 수 있다. 
person.name : person이라는 객체의 name이라는 키에 접근을 하겠다.라는 뜻임.
그럼 결과물로 '홍길동' 씨가 나옴.

- 객체의 메서드(객체가 가지고 있는 여러가지 기능들 Object.~~~)
1. Object.key(객체이름); : 객체의 키를 가져오는 메소드

let person = {
    name: "홍길동",
    age: 30,
    gender: "남자",
};

let keys = Object.keys(person);
console.log(keys);

person이라는 객체의 key값을 넣어 줄 새로운 변수를 선언한 후 console.log로 확인을 해보면
[ 'name', 'age', 'gender' ] 키 값만 들어있는 배열을 생성한다.

2. Object.values(객체이름); : 객체의 value를 가져오는 메소드

let values = Object.values(person);
console.log(values);

key를 가져오는 메소드 Object.key(); 와 같이 Object.values(객체이름);의 값을 넣어줄 변수를 선언하여 console.log로 확인을 해보면 [ '홍길동', 30, '남자' ] value값만 배열로 새롭게 만들어준다.

3. Object.entries(객체이름); : key와 value 값을 모두 가져와준다.

let entries = Object.entries(person);
console.log(entries);

Object.entries(person);을 실행해 보면
[ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]라는 이차원 배열을 통해 출력을 해준다.

4. 객체비교
이름이 다른 객체에 같은 값이 들어있다면 그것은 같은 객체라고 할까?
정답은 다른 객체이다.

변수 이름이 다르지만 같은 키, 벨류 값을 같는 객체는 false 값을 출력하며 서로 다른 객체라는 것을 알아냈다.
// 객체와 배열은 다른 데이터 타입에 비해서 크기가 상당히 크다. -> 메모리에 저장시 별도의 공간에 저장
// person1이 가지고 있는 값은 별도 공간에 대한 주소를 저장한다.
// 그렇다면 person2가 가지고 있는 값도 별도 공간에 대한 주소를 의미한다는 것.
// 즉, 서로 다른 주소 공간이 다르기 때문에 다른 값으로 보는 것.(변수가 직접적인 값을 가지고 있는게 아니라 저장 주소를 가지고 있는것.)





11. 배열

- 배열을 생성하는 방법
1. 기본 생성 방법

let fruits =['사과', '바나나', '오렌지'];

대괄호에 배열에 넣을 요소들을 넣어주고 변수 선언을 한다! 

2. 크기 지정

let numbers = new Array(5);

어... 잘 모르겠다. 요소 없는 새로운 배열을 만드는데 5개의 요소가 들어가는 빈 배열을 만든다는 뜻이다.

 - 배열의 요소에 접근하는 방법

// 2. 요소 접근(객체에서는 key로 접근했지만 배열에서는 idex로 접근한다!)
console.log(fruits[0]);
console.log(fruits[1]);
console.log(fruits[2]);

그렇단다 객체에서는 key로 접근을 하지만 배열에서는 index로 접근을 한다.
0 = 1번째, 1 = 2번째, 2 = 3번째에 접근을 한다는 뜻임.
주의! 배열이름을 쓰고 대괄호로 접근할 인덱스를 적어준다!

- 배열의 메서드(기능)

1. push(배열의 맨 끝에 요소를 집어넣는다.)

let fruits =['사과', '바나나'];
fruits.push('오렌지');
console.log(fruits);

사과, 바나나를 가지고 있는 fruits 배열에. push('오렌지');를 사용해 주면 fruits 배열의 맨 끝에 오렌지가 들어간다.
['사과', '바나나', '오렌지']

2. pop(배열의 맨 끝 요소를 제거한다.)

let fruits =['사과', '바나나'];
fruits.pop();
console.log(fruits);

push와 다르게 pop은 맨 마지막 요소를 제거하기 때문에 빈 괄호를 적어도 자연스럽게 마지막 요소가 제거된다.
console.log로 결과를 확인해 보면 '바나나'가 빠진 ['사과']만 fruits 배열에 남게 된다.

3. shift(배열의 맨 앞에 요소를 제거한다.)

let fruits = ['사과', '바나나', '키위'];
fruits.shift();
console.log(fruits);

shift는 pop과 같이 배열의 요소를 제거하지만 맨 앞의 요소를 제거하는 것이 차이점이다.
pop과 마찬가지로 괄호에 아무것도 적지 않아도 자동적으로 맨 앞 요소인 '사과'를 제거한 배열을 반환해 준다.
['바나나', '키위']

4. unshift(배열의 맨 앞에 요소를 추가한다.)

fruits.unshift('포도');
console.log(fruits);

위에 shift로 맨 앞 요소인 '사과'를 제거하고 새로운 요소를 넣어주고 싶을 때 사용하는 unshift이다.
['바나나', '키위']만 남은 배열에 unshift('포도'); 를 사용하면 ['포도', '바나나', '키위']를 가지는 fruits배열이 완성된다.

5. splice(위치를 지정한 후, 교체할 값을 적어준다.)
splice(시작 지점, 삭제할 개수, "교체할 값");

let fruits = ['사과', '바나나', '키위'];

나는 키위를 딱히 좋아하지 않기 때문에 키위를 삭제하고 복숭아로 교체해 보겠다.
fruits.splice(2, 1, "복숭아); => fruits 배열의 3번째에서 1개를 삭제하고, "복숭아"를 넣겠다.

fruits.splice(2, 1, "복숭아");
console.log(fruits);

console.log로 확인해 보면 키위가 사라지고 ['사과', '바나나', '복숭아'] 배열이 완성이 된다.

6. slice(선택한 요소들을 잘라내서 새로운 배열로 만들어준다.)
slice(시작 지점, 끝 지점); 원본 배열은 바뀌지 않는 복사이다.

slice를 사용해 복숭아만 남겨본다.

let fruits = ['사과', '바나나', '복숭아'];
let slicedFruits = fruits.slice(2,3);
console.log(slicedFruits);

위처럼 fruits.slice(2, 3);으로 복숭아만 새로운 배열로 복사했다.

나머지 기능들

// forEach, map, filter, find
// let numbers = [1, 2, 3, 4, 5];

//매개변수 자리에 함수를 넣어 주는 것 -> 콜백함수

// numbers.forEach(function(item) {
//     // 함수의 매개변수는 배열에 있는 각각의 요소가 한 개씩 들어가게 된다.
//     console.log("item입니다. => " + item)
// });

// (2) map : 항상 원본 배열의 길이만큼이 return 된다.
// 원래 있던 배열을 가공해서 새로운 배열을 만들어 내는 함수이기 때문에 새로운 변수가 필요.
// let newNumbers = numbers.map(function(item){

    // forEach와 다르게 map함수는 반드시 return문을 가져야한다.
//     return item * 2;
// });

// console.log(newNumbers);

// (3) filter
// map과 다르게 조건을 부여해서 조건에 맞는 것들을 새롭게 배열로 만든다.
// let numbers = [1, 2, 3, 4, 5];


// let filteredNumbers= numbers.filter(function(item) {

//     return item !== 5;
// });

// console.log(filteredNumbers);

// (4) find
// 조건을 충족하는 맨 처음 값을 새로운 배열로 리턴한다.

let numbers = [1, 2, 3, 4, 5];

let result = numbers.find(function(item) {
    return item > 3;
});

console.log(result);

사실 무슨 말이지 모르겠다. 아직 제대로 배열, 객체 등을 사용해보지 않았기 때문에 공부했던 내용을 그대로 일단 붙여본다. 내가 공부했으니까... 설명을 못하겠다.. 복습을 통해 내용을 숙지할 수 있게 해야겠다.....

오늘의 회고
힘겨웠던 미니프로젝트를 끝내고 새로운 조편성으로 새로운 사람들을 만났는데... 편치가 않다...
아무래도 처음 만나기도 하지만 분위기가 완전히 다르기 때문에 어떻게 해야 할지 모르겠다....
그래도 오늘 먼저 말문도 트려고 노력을 했고, 빠르게 팀 노션도 작성하고 많은 공부들을 했다...
너무 많은 내용들을 공부를 해서 사실 정리하기도 너무 힘들다.
나름 노력은 했지만... 그리고 오늘 반성할 것은 목표치를 달성하지 못했다.
전체적인 강의 시간은 그리 길지 않았지만 강의를 보면서 직접 타이핑을 해보면서 공부를 했기 때문에 공부 속도가 느리지 않았나 싶다.  하지만 이번 공부를 통해서 애매했던 개념을 다듬을 수 있는 좋은 기회였고, 새로운 내용들도 배울 수 있어서 너무 유익한 시간이 아니었나 싶다. 앞으로 세운 목표를 이룰 수 있게 더 노력을 해야겠다. 

'TIL' 카테고리의 다른 글

2024. 01. 02 TIL  (2) 2024.01.02
2024.01.01 TIL(미완)  (1) 2024.01.02
2023.12.28 TIL  (0) 2023.12.28
2023.12.27 TIL  (1) 2023.12.27
2023.12.26 TIL  (0) 2023.12.26