# data[].attributes.body
5주차도 완료

게시물을 올린 줄 알았는데..

지금까지 안 올리고 있었다니..

지금이라도 급하게 올려봅니다..

# data[].attributes.attachment_link.title
@levanter_lee on Instagram: "[혼공자] - 5주차
진도 - Chapter 08~09 ✔️
기본 숙제 - 클래스를 선언할 때 인터페이스는 어떻게 선언하는지 ✔️
추가 숙제 - p.443 확인문제 3번 ✔️"

# data[].attributes.attachment_link.description
0 likes, 0 comments - levanter_lee on February 23, 2025: "[혼공자] - 5주차
진도 - Chapter 08~09 ✔️
기본 숙제 - 클래스를 선언할 때 인터페이스는 어떻게 선언하는지 ✔️
추가 숙제 - p.443 확인문제 3번 ✔️". 

# data[].attributes.attachment_link.embed_code
View this post on Instagram

A post shared by @levanter_lee

# data[].attributes.body
늦었지만 꼭 끝내겠습니다,,,

# data[].attributes.body
취업준비를 하면서 공부를 하려니 쉬운 일이 아니네요 ㅎㅎㅎㅎ

프로그래밍은 용어가 어려워서 깊은 공부가 필요한 것 같습니다 ㅜㅜ

# data[].attributes.attachment_link.title
[혼공공부] 혼자 공부하는 자바스크립트 5주 : 네이버 블로그

# data[].attributes.body
늦은 공부, 이제야 올립니다.

# data[].attributes.attachment_link.title
[혼공프로] 5주차 : 네이버 블로그

# data[].attributes.body
이전 주차도 늦게나마 올려봅니다 … 🥲

3주차

https://velog.io/@taegyeong0225/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A03%EC%A3%BC%EC%B0%A8-%ED%95%99%EC%8A%B5%EB%82%B4%EC%9A%A9-nljpi8l9

4주차

https://velog.io/@taegyeong0225/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A04%EC%A3%BC%EC%B0%A8-%ED%95%99%EC%8A%B5%EB%82%B4%EC%9A%A9

# data[].attributes.attachment_link.title
[혼공머신]5주차 학습일지

# data[].attributes.headline
샤따 내렸어용. 제출 못하신 분은 6주차로 고

# data[].attributes.subject
샤따 내렸어용. 제출 못하신 분은 6주차로 고

# data[].attributes.body
6주차에 링크 같이 달아주세용

# data[].attributes.body
여러 사정으로 대박 늦어버렸습니다.... 죄송합니다...

제가 막차 포함일까요...?

아참 콜팝 메뉴 맛있었습니다. 사진이 이것 뿐이라

# data[].attributes.attachment_link.title
혼공학습단 13기- 혼자 공부하는 C언어 5주.. : 네이버블로그

# data[].attributes.body
제가 진짜 마지막입니다...ㅋㅋㅋㅋㅋ 벌써 6주차라니... 매번 지각이지만 그래도 나름 끝까지 안놓고 하고 있는거 같아서 스스로 다행이라고 생각중입니다 허허

# data[].attributes.body
마지막 주차는 막차 탑승 안하겠죠?

매번 다양하게 댓글 남기시는 혼공족장님의 아이디어는 어디에서 나오는걸까요?

# data[].attributes.attachment_link.readable_text
프로그램 실행에 필요한 요소를 시스템 자원 또는 자원이라고 함

운영체제는 메모리 내 커널영역에 적재됨

운영체제는 프로세스들이 사용할 자원에 접근하고 조작하는 것으로 필요한 자원을 할당함

운영체제가 프로세스에 대해 CPU 자원을 배분하는 것을 CPU 스케줄링이라 하고, 다양한 알고리즘들이 적용되지만 그중 다단계 피드백 큐 스케줄링이 가장 일반적임

12. 프로세스 동기화

12.1. 동기화란

- 동시다발적으로 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장하기 위해 동기화 되어야함
12.1.1. 동기화의 의미
- 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고 받으며, 협력하며 실행될 수 있음

- 협력적으로 실행되는 프로세스들은 올바른 실행을 위해 동기화가 필수임

- 프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것을 의미함
○ 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기

○ 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
12.1.2. 생산자와 소비자 문제
- 물건을 계속해서 생산하는 프로세스인 생산자와 물건을 계속해서 소비하는 프로세스인 소비자 로 이루어짐

- 생산자와 소비자는 동시에 실행되는 스레드가 될 수도 있음

- 코드 문맥상 정상적이어도, 동기화가 되지 않은 상태에서 접근해서는 안되는 자원에 동시에 접근하여 발생하여 문제 발생함
12.1.3. 공유 자원과 임계 구역
- 동시에 실행되는 프로세스들은 전역변수라는 공동 자원을 사용할 때, 이러한 자원을 공유 자원 이라고 함

- 공유 자원은 전역 변수, 파일, 입출력장치, 보조기억 장치가 될 수 있음

- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계 구역 이라고 함

1) 두 개 이상의 프로세스가 임계 구역에 진입하고자 하면, 둘 중 하나는 대기해야 함

2) 임계 구역에 먼저 진입한 프로세스의 작업이 마무리되면 그제서야 비로소 기다렸던 프로세스가 임계 구역에 진입함

- 잘못된 실행으로 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 생기는 것을 레이스 컨디션 이라고함

- 레이스 컨디션이 발생하면, 데이터의 일관성이 깨지는 문제가 발생함

- 상호 배제를 위한 동기화는 레이스 컨디션이 발생하지 않도록 두 개 이상의 프로세스가 임계 구역에 동시에 접근 불가하도록 함

- 운영체제는 임계 구역 문제를 3가지 원칙 하에 해결함

1) 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음

2) 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 함

3) 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 함

12.2. 동기화 기법
12.2.1. 뮤텍스 락
- 뮤텍스 락은 동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구 → 상호 배제를 위한 동기화 도구

- 뮤텍스 락의 단순한 형태는 하나의 전역 변수와 두 개의 함수로 구현할 수 있음

예시) - release 함수는 임계 구역에서 작업이 끝나고 호출하는 함수 → 현재 잠긴 임계 구역을 열어주는 함수
자물쇠 역할 : 프로세스들이 공유하는 전역변수 lock
임계 구역을 잠그는 역할 : acquire 함수
임계 구역의 잠금을 해제하는 역할 : release 함수
- acquire 함수는 프로세스가 임계 구역에 진입하기 전에 호출하는 함수
→ 임계 구역이 잠겨 있으면 임계 구역이 열릴 때까지 임계 구역을 반복적으로 확인하고, 임계 구역이 열려 있다면 임계 구역을 잠금

// 임계 구역, 프로세스 작업
release();

acquire();

- 이렇게 구현되면, acquire 함수는 락을 획득할 때까지 무작정 기다리다가 락을 획득하면 프로세스 작업하게 되고 작업 후 release 함수에서 락을 반환함

- acquire에서 쉴 새 없이 반복하여 확인하는데, 이러한 대기 방식을 바쁜 대기라고 함

12.2.2. 세마포

- 세마포는 뮤텍스 락과 비슷하지만, 조금 더 일반화된 방식의 동기화 도구임

- 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이지만, 세마포는 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구임

- 세마포에는 이진 세마포, 카운팅 세마포가 있지만 이진 세마포는 뮤텍스 락과 비슷하여 제외

- 세마포는 뮤텍스 락과 비슷하게 하나의 변수와 두 개의 함수로 단순하게 구현할 수 있음

예시)
- 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역변수 S
- 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 가도 된다고 신호를 주는 signal 함수

wait()
// 임계 구역, 프로세스 작업
signal()

○ wait 함수
- 임계 구역에 진입할 수 있는 프로세스 개수가 0개라면 실행하지 않음
- 사용할 수 있는 자원(S)가 있는지 확인하여, 있다면(S>0) S를 1 감소시키고 임계 구역 진입

○ signal 함수
- 임계 구역에서의 작업을 마친 뒤 S를 1 증가시킴

- 뮤텍스 락과 동일하게, 사용할 수 있는 공유 자원이 없는 경우 프로세스는 무한히 반복하며 S의 값을 확인해야 함

- 이렇게 바쁜 대기를 반복하는 것은 CPU 주기를 낭비를 초래함

- 세마포에서는 프로세스 상태를 대기 상태로 만들고, 프로세스의 PCB를 세마포를 위한 대기 큐에 넣음

→ 다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면, signal 함수는 대기 중인 프로세스를 대기 큐에서 제

→ 프로세스 상태를 준비 상태로 변경한 뒤 준비 큐로 옮김

- 세마포를 이용하여 동시에 실행되는 프로세스의 실행 순서도 마음대로 제어할 수 있음

- 세마포의 변수 S를 0으로 먼저 실행할 프로세스 뒤에 signal 함수, 다음 실행할 프로세스 앞에 wait 함수를 붙이면됨
12.2.3. 모니터
- 세마포는 훌륭한 프로세스 동기화 도구이지만, 사용하기가 조금 불편함 → 일일이 wait, signal 함수를 명시 해야되기에

- 최근에 등장한 도구가 모니터임 → 사용자가 사용하기에 훨씬 편리한 도구

1) 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리
2) 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근하도록 함

- 이를 위해 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 공유 자원을 이용

→ 인터페이스에 접근하기 위한 큐를 만들고, 모니터 안에 항상 하나의 프로세스만 들어오도록 함

→ 상호 배제를 위한 동기화를 제공

- 모니터는 세마포와 마찬가지로 실행 순서 제어를 위한 동기화도 제공함

- 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 위해 모니터는 조건 변수를 사용

- 조건 변수는 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수임, wait과 signal 연산 수행 가능

- 모니터 진입을 위한 wait과 다르게,
호출한 프로세스의 상태를 대기 상태로 변환 → 일시적으로 조건 변수에 대한 대기 큐에 삽입

- 모니터에 이미 진입한 프로세스의 실행 조건이 만족될 때까지 잠시 실행이 중단되어 기다리기 위해 만들어진 큐임 (360p)

- 모니터는 조건 변수를 이용하여 프로세스 실행 순서 제어를 위한 동기화를 제공

1) 특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단

2) 특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개

13. 교착 상태

13.1. 교착 상태란

- 두 개 이상의 프로세스가 각자 가지고 있는 자원을 무작정 기다리면, 어떠한 프로세스도 더이상 진행할 수 없는 교착 상태 가 됨
13.1.1. 식사하는 철학자 문제
- 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상을 교착 상태라고 함

- 교착 상태를 해결하기 위해서는
1) 교착 상태가 발생했을 때의 상황을 정확히 표현해 봄

2) 교착 상태가 일어나는 근본적인 이유에 대해서 알아야함

13.1.2. 자원 할당 그래프

- 교착 상태는 자원 할당 그래프를 통해 단순하게 표현할 수 있음

- 어떤 프로세스가 어떤 자원을 사용하고 있고, 다른 어떤 프로세스가 어떤 자원을 기다리고 있는지를 표현한 그래프임

- 아래의 조건을 통해 그래프를 그림

1

프로세스는 원으로 자원의 종류는 사각형으로 표현

2

사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현
ex) 하드 디스크가 세 개 있는 경우 자원의 종류는 하드 디스크 1개, 사용가능한 디스크는 3개

3

프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시

4

프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시

- 교착 상태가 발생하면, 자원 할당 그래프가 원의 형태를 가지게 됨
13.1.3. 교착 상태 발생 조건
- 상호 배제, 점유와 대기, 비선점, 원형 대기 조건에서 교착 상태가 발생하게 됨

- 4개의 조건 중 하나라도 만족하지 않는다면 교착 상태가 발생하지 않지만, 모두 만족될 때 교착 상태가 발생할 수 있음

1) 상호 배제

- 교착상태가 발생한 원인은 해당 자원을 한 번에 하나의 프로세스만 이용 가능했기 때문

- 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는, 상호 배제 상황에서 교착 상태가 발생할 수 있음

2) 점유와 대기

- 어떠한 자원을 할당받은 상태에서 다른 자원을 할당 받기를 기다린다면 교착 상태가 발생할 수 있음

- 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 점유와 대기 상태임

3) 비선점

- 비선점 자원은 그 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용할 수 있음

- 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못했기 때문에 교착 상태가 발생할 수 있음

4) 원형 대기

- 프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문

- 자원 할당 그래프가 원의 형태로 자원을 대기하는 것을 원형 대기라고 하며, 교착 상태가 발생할 수 있음

13.2. 교착 상태 해결 방법
13.2.1. 교착 상태 예방
- 교착 상태를 예방하는 방법은 상기 4가지 조건 중 하나라도 충족을 못시키게 하면 됨

1) 상호 배제 제거?

- 상호 배제를 제거하면 모든 자원을 공유하게 된다는 말과 동일 → 현실적으로 힘듦

2) 점유와 대기 제거?

- 점유와 대기를 없애면 운영체제는 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분

- 이론적으로 핵결가능하지만, 단점으로 자원의 활용률이 낮아질 우려가 있음

→ 당장 자원이 필요해도 기다릴수 밖에 없는 프로세스와 사용되지 않으면서 오랫동안 할당되는 자원을 다수 양산

- 점유와 대기를 금지하면 많은 자원을 사용하는 프로세스들이 불리해짐

→ 많은 자원을 사용할 타이밍을 확보하기 어렵기 때문

3) 비선점 조건 제거?

- 선점하여 사용할 수 있는 일부 자원에 대해서는 효과적임

- 하지만 모든 자원에 대해 선점 가능한 것이 아니며, 한 프로세스의 작업이 끝날 때까지 다른 프로세스가 기다려야 하는 자원도 있음

4) 원형 대기 조건 제거?

- 원형 대기를 없애기 위해, 모든 자원에 번호를 붙이고 오름차순으로 자원을 할당하면 원형 대기는 발생하지 않음

- 원형 대기를 제거하여 교착 상태를 예방하는 방식은 앞의 세가지 조건에 비해 현실적이고 실용적임

- 하지만, 시스템에 존재하는 모든 자원에 번호를 붙이는 것은 어렵고, 어떤 번호를 붙이는지에 따라 특정 자원의 활용율이 떨어짐
13.2.2. 교착 상태 회피
- 교착 상태 회피는 교착 상태가 발생하지 않을 정도만 조심 조심 자원을 할당하는 방식

- 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주함

- 프로세스들에 배분할 수 있는 자원의 양을 고려, 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분 → 교착 상태 회피

- 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태를 안전 상태라 함

- 교착 상태가 발생할 수도 있는 상황을 불안정 상태라고 함

- 안전 순서열은 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서를 의미

- 안전 순서열대로 프로세스들에 자원을 배분하여 교착 상태가 발생하지 않는 상태를 안전 상태라 함

- 불안전 상태는 안전 순서열이 없는 상황임

- 시스템이 불완전 상태에 놓이면 교착 상태가 발생할 수 있는 위험이 있음
13.2.3. 교착 상태 검출 후 회복
- 교착 상태 예방과 회피는 교착 상태 발생을 막기 위한 노력임

- 교착 상태 검출 후 회복은 교착 상태 발생을 인정하고 사후 조치하는 방식임

- 검출 후 회복 방식에서 운영체제는 프로세스의 자원을 요구할 때마다 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사함

1) 선점을 통한 회복

- 선점을 통한 회복은 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식임

2) 프로세스 강제 종료를 통한 회복

- 프로세스 강제 종료를 통한 회복은 가장 단순하면서 확실한 방식임

- 운영체제는 교착 상태에 놓인 프로세스를 모두 강제 종료 가능, 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료 가능

- 전자는 가장 확실한 방법이지만, 작업 내역을 잃게 될 가능성이 있음

- 후자는 작업 내역을 잃는 프로세스를 최소화 할 수 있지만 교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드를 야기

- 이외에 교착 상태를 아예 무시하는 방법으로 타조 알고리즘이 있음

- 완벽을 추구하는 과학자나 수학자 입장에서는 납득 할 수 없겠지만, 최대 효율을 추구하는 엔지니어들에게는 적합할 때도 있음

1. 뮤텍스 락과 세마포에 대한 설명으로 옳지 않는 것?

- 세마포를 이용하면 반드시 바쁜 대기를 해야한다 X → 반드시 바쁜 대기를 할 필요 없음

2. 임계 구역, 상호 배제 개념 정리

- 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음

# data[].attributes.attachment_link.title
혼공학습단 13기- 5주차

# data[].attributes.attachment_link.description
@ 4주차 Keyword 프로그램 실행에 필요한 요소를 시스템 자원 또는 자원이라고 함운영체제는 메모리 내 커널영역에 적재됨운영체제는 프로세스들이 사용할 자원에 접근하고 조작하는 것으로 필요한 자원을 할당함 운영체제가 프로세스에 대해 CPU 자원을 배분하는 것을 CPU 스케줄링이라 하고, 다양한 알고리즘들이 적용되지만 그중 다단계 피드백 큐 스케줄링이 가장 일반적임12. 프로세스 동기화12.1.

# data[].attributes.body
이번주에 아파서 공부를 못했더니 왕왕 밀려버렸네요잉... 큰일났습니다.....! 그치만 혼공족장님은 너그러우신 분이시기에,,, 포기하지 않코,,,,! 늦게 나마 제출!!! 후후후 족장님 건강 조심하십쇼... 아프시면 약 꼭 챙겨드십쇼.. 저는 안먹고 버티다가 그만.....후후후

# data[].attributes.attachment_link.description
혼공학습단 13기 필수과제혼자 공부하는 네트워크 p.271Q1. 도메인 네임과 네임 서버에 대한 설명으로 옳지 않은 것을 골라 보세요. ① 8.8.8.8은 대표적인 공개 DNS 서버로, 구글이 관리합니다.② 도메인 네임은 호스트를 특정할 수 있는 문자열 형태의 정보입니다.③ DNS는 계층적이고 분산된 도메인 네임에 대한 관리 체계이자 이를 관리하는 프로토콜입니다.④ www.example.com에서 루트 도메인은 com에 해당합니다. A. ④ 도메인 네임 서버 관리 방법 점(.)을 기준으로 계층적으로 분류루트 도메인은 대부분 생략되어 보이지 않지만 www.example.com. 과 같이 검색해도 사이트에 접속된다.모든 도메인 네임은 이 루트 도메인으로부터 파생된다.여기서 부르는 루트 도메인은 ’DNS…

# data[].attributes.body
안녕하세욯ㅎ...3,4주차 추노했었는데...다시 올려도 될지....모르겠지만 조심스레 올려봅니다....죄송합니다 사랑합니다!!

# data[].attributes.attachment_link.readable_text
배열 : 동일한 자료형이 여러 개일 때 메모리에 연속적으로 저장해 놓고 쪼개서 사용하는 방법

배열의 선언 : int ary[5]; 자료형 배열명[요소개수];

배열의 사용 : 대괄호 속 [ ] 숫자가 몇 번째 배열인지 의미. int ary[5];자료형 배열명[배열에서의 위치, 첨자];

배열 초기화 int ary[5] = {1, 2, 3, 4, 5}

널 문자란 : 초기화한 문자의 남는 배열 요소에는 자동으로 0이 채워진다. 이 때 char형 배열에 저장된 0을 널 문자라고 한다.

널 문자의 용도 : 문자열의 끝을 표시.

Chap 8 배열

많은 양의 데이터를 메모리에 저장하는 배열 생성 방법
배열을 사용하는 방법과 배열이 문자열을 저장하는 방법

8-1 배열의 선언과 사용

배열 array : 같은 형태의 많은 데이터를 반복문으로 처리하기 위해 메모리에 연속적으로 저장해 놓고 쪼개서 사용하는 방법

동일한 자료형이 여러 개일 때 배열로 묶어서 처리

배열의 선언

배열 또한 다른 자료형처럼 선언을 통해서 저장 공간을 확보.

int형 변수 5개를 하나씩 선언하는 것과 전체 저장 공간의 크기는 같음.

그러나 메모리에 할당되는 방식에 차이가 있음.

변수를 선언하면 각 변수는 독립적인 저장 공간을 가지며 각각의 이름을 사용.

반면에 배열은 저장 공간이 연속으로 할당, 배열명이 전체 공간의 이름이 됨.

배열의 나누어진 조각을 배열 요소라고 하는데, 각각의 배열 요소는 int형 변수와 똑같이 사용함.

첨자 속 의미
배열 선언할 때 : 배열 요소 전체 개수
사용할 때 : 각 요소가 배열에서 몇 번째에 있는지, 첨자라고 함.

배열 초기화

배열도 변수와 마찬가지로 최초 할당된 저장 공간에 쓰레기 값이 저장되어 있음.

그러므로 배열도 원하는 값을 가지려면 선언과 동시에 초기화해야 함.

1. (기본) 배열은 중괄호 { } 로 묶어 초기화.
int ary[5] = {1, 2, 3, 4, 5};
2. 초깃값이 배열 요소의 개수보다 적은 경우
int ary[5] = {1, 2, 3};
이때는 왼쪽부터 차례로 초기화하고 남은 배열 요소는 모두 0으로 채움.

3. 자동 초기화 기능
int ary[1000] = {0};
4. 배열 요소 개수 생략

이 경우 컴파일러는 초깃값 개수만큼 배열 요소 개수 정하고 저장 공간 할당함.

5. double형 배열과 char 배열 선언하고 초기화

각각의 자료형에 맞게 double형 배열은 실수 값으로 초기화되고, char형 배열은 문자로 초기화.
double ary[5] = {1.0, 2.1, 3.2, 4.3, 5.4};
char ary[5] = {'a', 'p', 'p', 'l', 'e'};
배열의 초기화는 선언 시 최초 한 번만 가능.
그 이후에는 배열 요소에 일일이 값을 대입해야 하며, 초기화 때처럼 중괄호 { } 를 사용한 대입 연산으로 한 번에 값을 바꾸는 것은 불가능.

배열과 반복문

연속된 배열 요소를 일일이 변수처럼 하나씩 떼어서 사용 -> 효율적이지 못함.

sizeof 연산자를 활용한 배열 처리

보통 많은 양의 데이터를 처리하므로 배열을 다룰 때는 반복문 사용이 필수. 배열 요소의 개수가 바뀌면 배열을 처리하는 반복문을 모두 수정해야 하는 부담이 있다.

이 문제의 해결책으로 배열 요소의 개수를 직접 계싼해 반복문에 사용하는 방법이 있다.
확인 문제
배열 요소의 개수 : sizeof(배열명) / sizeof(배열 요소)

이렇게 구한 배열 요소의 개수를 각 반복문의 반복횟수로 사용하면, 나중에 배열 선언문에서 요소의 개수를 바꾸더라도 나머지 코드를 수정할 필요가 없음.

1. 다음 설명에 따라 배열을 선언하세요.

//1번 int ary_1[5]; //2번 double ary_2[10]; //3번 int ary_3[3]; //4번 char ary_4[5]; // 널 종료 문자 \0을 포함하기 때문에 4가 아니라 5

2. 다음 그림과 일치하도록 배열을 선언하고 초기화하세요.

int ary[6] = {1, 2, 3};

3. 다음과 같이 초기화된 A 배열의 값을 복사해 B배열을 채운 후 출력하는 프로그램을 작성하세요.

8-2 문자를 저장하는 배열

char형 배열의 선언과 초기화

저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야 함. 널 문자를 저장하기 위해서.

char형 배열은 배열 요소의 형태가 char일 뿐 int형 배열이나 double형 배열과 다르지 않다.

따라서 초기화도 중괄호를 사용해 문자를 차례로 나열해도 됨.

그러나 문자 상수로 초기화하는 방법은 쉽지 않으므로, 문자열 상수로 초가화하는 방법 많이 씀.

널 문자 : char형 배열의 남는 배열 요소에는 자동으로 0이 채워짐.

모든 문자는 아스키 코드 값으로 저장되므로 결국 널 문자는 아스키 코드 값이 0인 문자를 말하며 문자 상수로는 \0 으로 표현됨.

널 문자는 문자열의 끝을 표시하는 용도로 쓰임.

printf함수는 char형 배열에서 널 문자가 나올 때까지만 출력하도록 만들어졌다.

이런 규칙은 문자열을 처리하는 모든 함수에 적용됨.

scanf 함수로 문자열을 입력받을 때도 어김없이 널 문자가 사용됨.

grape 뒤에 널 문자를 추가해 문자열의 끝을 표시해서 grape가 출력된 것.

배열 요소에 문자를 직접 대입하는 경우, 마지막 문자 다음에는 널 문자 대입해야 함.

char형 배열 선언 시 주의할 점

1. 배열의 크기는 최대한 넉넉하게 선언하기

2. 배열 요소의 개수는 최소한 '문자열 길이+1'이어야 함.

문자열 대입

char형 배열이 문자열을 저장하는 변수의 역할을 하므로 초기화된 이후에도 새로운 문자열을 저장할 수 있다.

단, 문자열의 길이가 다를 수 있으므로 일반 변수처럼 대입 연산자를 사용하는 것은 불가능함.

이때는 strcpy 함수를 사용함.
strcpy(저장된 배열명, 저장할 문자열)
strcpy 함수는 char형 배열에 새로운 문자열을 저장하는 함수.

저장할 문자열의 길이를 파악해 딱 그 길이 만큼 char형 배열에 문자열을 복사함. (널 문자도 자동으로 붙임.)

문자열 전용 입출력 함수 : gets, puts

scanf 함수는 char형 배열에 문자열을 입력할 수 있으나 중간에 빈칸이 있는 경우 빈칸 전까지만 입력.

따라서 빈칸을 포함해서 문자열을 입력할 수 있는 새로운 방식이 필요.
빈칸을 포함해 문자열을 입력하는 gets 함수
get 함수는 빈칸을 포함해 한 줄 전체를 문자열로 입력함.

또한 이 함수와 짝을 이뤄 문자열을 출력하는 puts 함수도 있음.

인수로 char형 배열의 배열명 준다.

문자열 입력 중간에 빈칸이나 탭 문자 사용 가능
gets와 짝을 이뤄 문자열을 출력하는 puts 함수
엔터를 누르기 전까지 전체를 하나의 문자열로 배열에 저장

입력할 배열의 크기를 검사하지 않으므로, 배열의 크기보다 긴 문자열을 입력하면 배열을 벗어난 메모리 영역을 침범할 수 있으므로 주의. ( 이 문제는 scanf 함수, strcpy 함수도 해당되며 컴파일러에 따라 안정성 문제 때문에 컴파일 제한하기도 함.)
확인 문제
puts 함수는 문자열 상수나 char형 배열의 배열명을 주면 문자열을 화면에 출력함.

printf 함수와 문자열 출력 기능 같으나 자동으로 줄을 바꿈.

1. 다음 중 char형 배열이 바르게 초기화된 것은 O, 그렇지 않은 것은 X를 표시하세요.

① O : 남는 배열 요소에는 자동으로 널 문자 채워짐.
② O : 문자열의 끝의 널 문자를 포함해 9개의 배열요소 할당됨.
③ X : 널 문자 저장할 공간이 없음.
④ X : 배열 크기 작음. 중괄호 없이 하나의 문자열만 초기화 가능.

2. 다음 중 널 문자의 상수 표현법으로 옳은 것을 고르세요.

A : ④

3. 다음 코드는 2개의 문자열을 입력받아 위치를 바꾼 후에 출력합니다. 빈칸을 채워 프로그램을 완성하세요.

# data[].attributes.attachment_link.description
배열 : 동일한 자료형이 여러 개일 때 메모리에 연속적으로 저장해 놓고 쪼개서 사용하는 방법배열의 선언 : int ary[5]; 자료형 배열명[요소개수];배열의 사용 : 대괄호 속 [ ] 숫자가 몇 번째 배열인지 의미. int ary[5]; 자료형 배열명[배열에서의 위치, 첨자];배열 초기화 int ary[5] = {1, 2, 3, 4, 5}널 문자란 : 초기화한 문자의 남는 배열 요소에는 자동으로 0이 채워진다.

# data[].attributes.body
반복문이랑 섞이니까 좀 헷갈리네요 ㅜㅜㅜ

3주차 공부 내용 찾아가면서 했습니다.. 이럴 땐 귀찮지만 벨로그에 꼼꼼히 적어 놓은 과거의 나 자신 고맙다....

족장님 혹시 혼공학습단 13기가 끝난 이후에도 디스코드.. 방..?은 유지되는 걸까요..?

사실 제가 학생이라 방학을 맞이하여 코딩스터디 혹은 동아리에 가입해보고 싶었는데 마땅히 적절한 스터디를 못 찾아서... 운 좋게 혼공학습단을 하게 됐는데 너무 좋은 시간이 되어서요!

그래서 추후에 혼공학습단 분들 중에 저와 뜻이 맞는 분이 계시다면 같이 스터디 혹은 동아리.. 를 같이 할 수 있는 기회가 될 수 있을까 싶어서요..!! 그래서 요런 의견을.... 디스코드에 물어볼까 하구 여쭤봅니다..

# data[].attributes.attachment_link.readable_text
; 프로그램 실행 전에 발생하는 오류
SyntaxError : 구문에 문제가 있어 프로그램이 실행 조차 불가한 오류

; 프로그램 실행 중에 발생하는 오류

예외 상황을 파악하고 해결할 것.

isdigit()함수

; 숫자로만 구성된 글자인지 확인하는 함수

try except

; 예외가 발생할 가능성이 있는 코드를 모두 try 구문에 넣고 예외가 발생했을 때 실행할 코드를 모두 expect 구문에 넣기

try except pass

왜 float(item)쓰는지 모르겠다

fwd-i-search 이게 왜 뜨지

# data[].attributes.attachment_link.description
프로그램 실행 전에 발생하는 오류SyntaxError : 구문에 문제가 있어 프로그램이 실행 조차 불가한 오류; 프로그램 실행 중에 발생하는 오류

# data[].attributes.body
수퍼 지각생 인사 드립니다..... 죄송합니다.....

숙제 검사 다 하셔서 지금 내는게 의미가 없을것 같은데.... ㅠㅠ

# data[].attributes.attachment_link.readable_text
5주차 과제

5주차 기본 과제 구문 오류와 예외의 차이 설명하기(p.379 1번 문제)

프로그래밍하다 보면 오류가 생길때가 존재하는데 크게 두가지 종류로 설명할수 있다

1.프로그램 실행전에 발생하는 오류

>> 구문오류 (syntax error)

2.프로그램 실행중에 발생하는 오류

>> 예외 (exception) 또는 런타임 오류 (runtime error)

로 설명이 가능한데 각각을 추가로 설명하면

구문 오류 예시

창에 Synyax error 라고 뜨면서 실행이 안 되는데 이때 Synyax error는 구문에 문제가 있어서 프로그램이 실행조차 되지 않는 오류라는 뜻이다 !

위 예시 같은 경우 닫는 따옴표가 없어서 생기는 오류임으로 다시 넣고 실행하면 잘 실행되는걸 볼수 있다

2. 예외 또는 런타임 오류

p362 예제

예제 실행 결과

구문 오류와 달리 실행 도중에 발생하는 오류를 의미합니다.

해결 방법은 구문 오류와 다르지 않습니다. 문제가 있는 코드를 제대로 고쳐주기만 하면 됩니다.

위 예제 같은 경우 오류는 list_a 가 정의 되지 않았다는 점이 오류의 원인이고 정의 해주면 정상적인 실행이 가능합니다.

하지만 간단한 구문에서는 수정을 해서 실행하면 되지만 프로그램을 만들다 보면 복잡한 방법들로 처리해야 하는 경우가 있습니다

예외를 해결하는 모든 것을 예외 처리라고 합니다.

기본 예외 처리

1. 조건문을 사용하는 방법

조건문을 사용하여 예외적인 상황까지 고려하여 문제가 생길수 있는 상황의 조건을 만들어 주는 방식으로 처리 가능합니다

2. try구문을 사용하는 방법

1) try except 구문

try:

예외가 발생할 가능성이 있는 코드

except:

예외가 발생했을 때 실행할 코드

추가

강제 종료되는 것부터 막자는 목적으로 사용시

pass 키워드가 넣어서 처리

해당 코드가 딱히 중요한 부분이 아니라면 pass 사용해서 해결하기도 함

2) try except else 구문

try:

예외가 발생할 가능성이 있는 코드

except:

예외가 발생했을 때 실행할 코드

else:

예외가 발생하지 않았을 때 실행할 코드

예외처리에 else 구문이 있는 프로그래밍 언어는 소수입니다 소수라는 의미는 꼭이 이렇게 처리 하지 않아도 문제는 없지만 의미는 알아 둘 필요가 있습니다.

3) finally 구문

try:

예외가 발생할 가능성이 있는 코드

except:

예외가 발생했을 때 실행할 코드

else:

예외가 발생하지 않았을 때 실행할 코드

finally:

무조건 실행할 코드

finally 구문 : 예외가 발생 유무와 관련 없이 실행되는 코드

try, except, finally 구문의 조합

1. try구문은 단독 사용 불가능 , except,finally구문와 함께 사용해야 한다

이유는 예외를 어떻게 처리 할지를 결정하지 않으면 try구문을 사용하는 의미가 없기 때문

2. else구문은 반드시 except구문 뒤에 사용해야 한다

# data[].attributes.attachment_link.description
5주차 기본 과제 구문 오류와 예외의 차이 설명하기(p.379 1번 문제)프로그래밍하다 보면 오류가 생길때가 존재하는데 크게 두가지 종류로 설명할수 있다 1.프로그램 실행전에 발생하는 오류 >> 구문오류 (syntax error)2.프로그램 실행중에 발생하는 오류 >> 예외 (exception) 또는 런타임 오류 (runtime error)로 설명이 가능한데 각각을 추가로 설명하면 1.

# data[].attributes.body
정말,, 늦지 않겠다는 약,,속은 못하겠습니다,, 그래도 늦어도 꼬옥 공부하고 올리겠다는 약속은 기필코 지키겠습니다..!! ㅠㅅㅠ 이번주 공부하며 느낀점은 타조가 되지 말자,,! 입니다 ㅎㅎ

# data[].attributes.attachment_link.description
* ‘혼자서 공부하는’ 컴퓨터구조+운영체제 이지만, 혼자보단 여럿이하면 더 좋으니 혼공 학습단 13기와 함께합니다 :) [5주차 학습목록] (’•̀ ▽ •́ )✎Ch12. 프로세스 동기화01. 동기화란02. 동기화 기법 Ch13. 교착 상태01. 교착 상태란02. 교착상태 해결방법 Ch12. 프로세스 동기화12-1. 동기화란동기화동시다발적으로 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장하기 위해서 반드시 동기화 되어야 한다!그렇다면 동기화(synchronization)란 무엇인가?동기화란, 특정 자원에 접근할 대 한 개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하게 하는 것을 의미한다! 그러면 프로세스 동기화는 무엇일까?프로세스 동기화란, 프로세스들 사이의 수행 시기를…

# data[].attributes.body
운영체제 들어와서 해이해졌다.. 다음주가 마지막인 만큼 다음주는 정말 빡세게 공부해야겠다!!

# data[].attributes.attachment_link.description
Chapter 12. 프로세스 동기화12-1. 동기화란프로세스 동기화 : 프로세스들 사이의 수행시기를 맞추는 것실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기임계 구역 : 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역레이스 컨디션 : 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우임계 구역 3가지 원칙상호 배제진행유한 대기12-2. 동기화 기법뮤텍스 락 : 상호 배제를 위한 동기화 도구바쁜 대기(busy wait)세마포 : 공유 자원이 여러개 있는 상황에도 적용이 가능한 동기화 도구모니터 : 세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건변수를 사용한다.Chapt…

# data[].attributes.body
항상 감사드립니다. 모두 응원합니다

# data[].attributes.attachment_link.readable_text
정의: 시스템을 동시에 작동시키기 위해 사건들을 조화시키는 것

여러 도메인에 걸쳐 상당히 자주 등장하는 개념이다.

프로세스의 동기화 정의: 여러 다른 프로세스들 간 사이의 동작을 올바르게 맞추기 위한 여러 방법

스레드의 동기화: 한 프로세스 내에 여러 스레드들 사이의 동작을 올바르게 맞추는 것

프로세스 동기화를 통해서 하려는 일: 실행 순서 제어, 상호 배제

실행 순서 제어: 프로세스가 동시에 실행되는 것 처럼 보이게끔 스케쥴링하는 것.

상호 배제: 이때 동시에 접근해서는 안되는 자원에는 접근 제한을 거는 것

결국 동시에 여러 프로세스를 굴리기 위해서는 <- 실행 순서 제어와 상호 배제를 구현해야하고 <- 그것들을 구현하는 방법이 == 프로세스 동기화 <- 그리고 그 동기화의 방법으로는 뮤텍스, 세마포어, 모니터 등이 있는 것.

총합이란 변수가 존재하고, 소비하다() 함수는 1을 빼고 총합을 갱신, 생상하다() 함수는 1을 더하고 총합을 갱신하는 간단한 로직이 있다 할때, 공유자원을 건드리는 임계구역이라는 개념을 가지고 있지 않으면 똑같이 반복문 100번 돌려 놓으면 총합은 10일거라고 착각 하게 된다. but 결과는 천차만별이다.

생산하다 소비하다를 각각 호출할때 아직 총합의 갱신이 이루어지지 않은채로 막 지가 알아서 지 멋대로 값을 갱신을 하다보면 마이너스까지 내려가기도, 혹은 +100 온전히 다 받아들일 수도 있기 때문이다.

공유자원은 이렇게 공동으로 사용하는 총합 같은 것이 공유 자원이고, 임계구역은 이런 공유자원을 건드리는 코드 영역을 임계구역이라고 함.

이런 경우 흔히 상호 배제를 구현하여 해결한다.
상호 배제 mutual exclusion: 어떤 프로세스가 임계구역을 실행중일땐 다른 모든 프로세스는 임계구역을 실행할 수 없다.
진행 progress: 임계구역을 아무도 실행중이지 않다면 프로세스는 진행할 수 있어야 한다.
유한 대기 bounded waiting: 상호 배제는 유한하게 유지되고 언젠가는 진행상태로 올수 있게 해야한다. (설사 앞선 프로세스가 다 마치지 못했다 하더라도 무한대기는 안된다.)

( )를 위한 동기화: 프로세스를 올바른 순서대로 실행하기

더 보기

( )를 위한 동기화: 동시에 접근해서는 안되는 자원에...

더 보기

1. 임계 구역에서 여러 프로세스 동시 실행 무방

2. 임계 구역에서 여러 프로세스 동시에 실행할 경우 레이스 컨디션 발생

3. 임계 구역에서 실행중인 프로세스 있다면, 다른 프로세스 기다림

4. 운영체제는 임계 구역 관리

더 보기
1번 임계 구역일 수록 여러 프로세스 동시 실행 위험

뮤텍스 락 Mutex lock: Mutual Exclusion lock

lock변수, acquire(), release() 총 세 개의 핵심 동작으로 상호배재락을 구현

// mutual exclusion lock의 간단한 구성 조건 ... static boolean lock = false; ... static void acquire(){ while(lock==true){ //대기 } lock = true; //종료 } static void release(){ lock= false; } ... //공유 자원을 사용하고 자 하는 매서드: acquire와 release()로 감싸는게 포인트 acquire(); //lock을 얻은 프로세스만 탈출 useSharedResource();//임계구역 사용하는 코드 release(); //임계구역을 성공적으로 사용했다면 lock=false로 반납 ...

결국 임계구역을 동시에 접근하는 것을 막기 위한 하나의 수단이고 이 방법은 뮤텍스락과 크게 다르지 않지만, 몇가지 유의미한 차이가 있다.

그 전에 세마포를 이루는 개념 3가지. count변수(S변수), wait, signal

count : 동시에 접근 가능한 프로세스를 몇 개를 둘 지를 결정한다. 최소 값은 0 최대 값은 설정값이다. 만약 1이라면 뮤텍스락과 유사한, 동시에 한 작업만 가능한 자원으로 상호배제를 만족하게 되는거고, 2이상이라면 여러 작업이 사용해도 되는 자원이라는 의미

세마포에 대하여 구체적인 내용은 Operating Systems Concepts라는 심도 있는 책을 통해 보강할 예정이다. 현 책에 있는 내용으로는 의문점을 해결하지 못하였다.

동기화 툴의 향상된 개념이다. 공유자원을 사용하는 모든 연산에 인터페이스를 묶어서 관리한다. 공유자원 사용을 위한 대기 큐에 넣어놓고, 사용 할 수 있는 조건이 되었을때 poll하여 공유자원 상호배제를 수행함.

모니터 역시 나중에 더 심화를 다뤄야 겠다. 부족하다 소스가

1️⃣ 뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것

1. 뮤텍스락은 임계 구역을 잠근 뒤 진입. 상호 배제를 위한 동기화

2. 세마포는 공유 자원이 여러 개 있는 상황에서도 이용 가능

3. 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화 가능

4. 세마포를 이용하면 반드시 바쁜 대기를 해야 한다.

더 보기
2️⃣ 조건 변수 x와 y가 있다. 스레드 A는 실행 과정에서 x.wait을 호출. 스레드 B는 y.wait을 호출. 스레드 C가 y.signal을 호출하면 재개되는 스레드 명은?

더 보기

세마포를 이용하면 동시에 실행되는 프로세스 혹은 스레드 간에 ()를 위한 동기화와 ()를 위한 동기화를 할 수 있다.

더 보기

공용자원과 프로세스가 있을때 프로세스A를 수행하기 위해 공용자원 A, B가 필요하고 프로세스B를 수행하기 위해 공용자원 A,B가 필요할때 각각 하나씩 나누어서 집어들은 상태에서 무한 대기 상태가 걸려 아무것도 못하는 상태가 교착 상태.

아래 4가지 중 하나라도 조건에서 해제 된다면 교착 상태를 풀 수 있다.

1. 상호 배제: 공유 자원 동시에 사용 못하게

2. 점유와 대기: 자원을 점유한 채 할당 받을때까지 대기 하는 방식

3. 비선점: 다른 프로세스가 아직 자원을 사용중이라면, 자원을 뺐을 수 없게 함.

4. 원형 대기: 결국 최악의 경우는 수천 개의 스레드 및 수백개의 스레드가 일말의 예외 없이 전부 자원 대기 상태에 걸린 원형 대기 상태라면 교착은 무조건 발생.

1. 교착 상태는 다양한 상황에서 발생

2. 교착 상태는 자원 할당 그래프로 표현 가능

3. 교착 상태는 일어나지 않을 사건 기다리며 무한히 대기하는 현상

4. 식사하는 철학자 문제에서 단 한 명의 철학자가 식사를 하더라도 교착 상태는 발생

더 보기
2️⃣ 교착 상태 발생 조건 4가지 서술

더 보기

3️⃣ 교착 상태가 발생할 위험이 있는 그래프의 특징

더 보기

1. 상호 배제: 동기화 방법을 통해 기껏 만든 상호 배제 때문에 교착 상태가 발생될 수 있다면, 그냥 애라 모르겠다. 아무렇게나 자원 동시에 막쓰게 풀어버리자. 그럼 교착 상태는 해방가능

2. 점유와 대기: 프로세스를 진행할때 자원을 점유하고 나머지 자원이 도착할때까지 기다리는 상황이 점유와 대기인데, 점유와 대기를 하지 않게끔. 즉 프로세스가 자원을 사용할때 온전히 사용하게 하는 형태. 이렇게 되면 문제가 프로세스를 잘게 쪼개어 여러 프로세스가 동시에 동작하게끔 하는게 안된다. 점유와 대기가 안일어나면 즉 효율은 떨어진다. 또 자원 이용시간이 길어질 경우 자원 점유후 바로 해제해야하므로 영영 굶는 기아 상태에 빠질 수 있음

3. 비선점: 선점을 아무나 막 할 수 있게 해버리면 크리티컬한 문제가 발생 할 수 있다. 예를들어 프린터기가 있을 수 있다. 프린터기 자원이 필요한 프로세스가 자신의 작업을 막 수행하려 할때마다 선점해서 사용해버리니 이상한 출력물이 나올 가능성이 매우 높다.

4. 원형대기: 현실적인 예방 방법이다. 순환이 발생하는 구조를 차단시켜버린다. -> 즉 시작과 끝의 값을 매겨서 항상 번호가 앞순위의 자원만 추가로 대기할 수 있게 혹은 후순위의 자원만 추가로 대기할 수 있게 설정하는 방법

문제는 그 방법 자체가 굉장히 비효율적이다. 모든 자원에 번호를 매긴다는 점 자체가 비효율적. 번호를 매기지 않으면 끝과 끝을 구별할 수 없기 때문.

결국 prevention은 해결 방법중에서 가장 비효율적인 해결 방법이다.

교착 상태의 원흉: 한정된 자원 + 너무 많은 프로세스가 동시에 사용하려고 함.

회피: 프로세스들이 아무리 많아지더라도 한정된 자원을 안전하게 제공하자 -> 조심히 교착 상태에 빠지지 않게, 그러면서 동시에 최대한 효율적이고 균등하게 배분할 수 있도록 하자 -> 프로세스 요구 자원량에 대한 계산이 미리 필요

프로세스는 나는 어느정도 자원을 사용할거에요 미리 알려줘야하고,
운영체제는 프로세스가 표시한 자원량을 스캔하여 현재 스케쥴링된 프로세스들을 어떻게 관리하여 실행시킬지 데드락이 안걸리게 할지 생각을 해야함.

프로세스의 최대 자원 사용량 정보가 저장되는 장소: 운영체제 리소스 매니저
해당 정보들을 이용하여 데드락 회피 알고리즘을 계산 하는 주체: 운영체제 리소스 매니저
회피 알고리즘의 결과를 토대로 프로세스 스케쥴링을 결정하는 주체: 운영체제 스케쥴러

회피만으로 백프로 데드락을 방지 할 수 있는가? -> NO 왜냐하면, 사용량 정보보다 실제 사용량이 더 많아지는 경우 자체가 있을 수 있으며, 빡빡한 자원속에서 데드락 조건이 발생할 가능성은 충분히 있음

탐지 및 회복 detection and recovery

일단 탐지 알고리즘에 대한 내용은 고급과정이라서 설명을 안하고 넘어간다

2가지 방식으로 교착 상태를 회복한다. 물론 현재 내용을 복구 하기 위한 체크포인트 개념도 있다고 하는데 설명하지 않고 넘어간다

1. 교착 상태 조건 중 하나를 충족하지 않게 하면 예방 가능

2. 교착 상태는 회복 할 수 없다

3. 안전 상태를 유지할 수 있는 경우에만 자원을 할당하면 교착 회피 가능

4. 교착 상태 검출 및 회피 방식에서 주기적으로 교착 발생 여부를 검사

더 보기
2️⃣ 아래 표 상태에서 P2에 자원 2개 나누어 줬다. 프로세스 P2가 실행 올바르게 종료한뒤 자원 반납 하면 남은자원은?

남은 자원 = 할당 가능 자원 - 할당한 자원 = 12 - 7 = 5

3️⃣ 교착 상태에 대한 대처 방법 중 타조 알고리즘 설명

더 보기

4️⃣ 교착 상태 예방에 대한 설명으로 옳지 않은 것은?

# data[].attributes.attachment_link.description
정의: 시스템을 동시에 작동시키기 위해 사건들을 조화시키는 것여러 도메인에 걸쳐 상당히 자주 등장하는 개념이다.현재 도메인은 프로세스.프로세스의 동기화 정의: 여러 다른 프로세스들 간 사이의 동작을 올바르게 맞추기 위한 여러 방법스레드의 동기화: 한 프로세스 내에 여러

# data[].attributes.body
허겁지겁 3,4,5주차 해왔습니다.

https://nownow.tistory.com/248

https://nownow.tistory.com/252

번거로우실수 있으니 두개 링크도 같이 남겨유

어느정도 써놓고 안올린 부분들이 있어서 살았네요

이번에는 포스트에 음악 링크도 남기고갑니당..

# data[].attributes.headline
[혼공컴운] 5주차_김지인

# data[].attributes.subject
[혼공컴운] 5주차_김지인

# data[].attributes.body
추가 숙제의 임계구역과 상호배제는 정리 내용에 포함 되어있어서 스킵했습니다. 개인적으로 교착 상태 해결 방법을 재밌게 공부했습니다. (컴퓨터 재부팅하면 기적처럼 정상이 된다는 점이라던지...) 꼭 운영체제 자원할당에만 해당되는 내용이 아닌 것 같아요. 이제 마지막 1회만 남았네요. 끝까지 화이팅입니다.

# data[].attributes.attachment_link.title
[혼공컴운] 5주차 - 동기화와 교착 상태

# data[].attributes.attachment_link.description
※혼자 공부하는 컴퓨터구조 +운영체제 개인 공부 정리 내용입니다.※진도는 하단의 혼공단 13기 커리큘럼을 참고해 주세요. 진도 동기화 동기화 - 작업들 사이의 수행 시기를 맞추는 것실행 순서 제어 - 올바른 순서대로 실행하기 위해 사용 상호 배제 - 공유 불가능한 자원의 동시 사용을피하기 위해 사용 공유자원과 임계구역 공유자원 - 두 개 이상의 프로세스가 동시에 실행하면 문제가 발생하는 자원임계구역 - 공유 자원에 접근하는 코드 영역공유자원은 변수, 파일, 입출력 장치 등이 될 수 있다.프로세스가 공유자원을 써서 임계 구역에 들어가면 다른 프로세스는 접근이 불가능해야하는데,이게 바로 상호배제 이다.만약 잘못된 실행으로 동시 다발적으로 공유자원에 접근이 되서자원의 일관성이 깨지는 문제를 레이스 컨디션 이…

# data[].attributes.body
늦어서 죄송합니다.

# data[].attributes.attachment_link.title
[혼공파13기] 5주차 : 네이버 블로그

# data[].attributes.body
블로그 링크

06-1 군집 알고리즘

06-2 k-평균

06-3 주성분 분석

개강이 다가올수록 마음은 조급해져 가고 해야할 것은 자꾸만 생각나고 점점 바빠집니다... 하지만 먹고 살기 위해서는 어쩔 수 없이 해야겠지요..? 수강신청은 올클 했지만, 지옥의 사망년이기에 교양 따위는 사치입니다... 다음 학기가 벌써 4학년이라니 말하는 감자로서는 믿을 수가 없답니다. 6전공은 무리인 것 같아 5전공을 했지만 그것도 학부연구생과 함께 할 수 있을지 세미나를 할수록 자신이 없어집니다... 일단 하고 보면 되겠죠 ㅎㅎㅎ

# data[].attributes.attachment_link.title
[혼공머신] 5주차 06-1 군집 알고리즘

# data[].attributes.attachment_link.description
본 게시글은 한빛미디어의 혼자 공부하는 머신러닝+딥러닝을 바탕으로 작성되었습니다.

# data[].attributes.headline
[혼공머신]5주차_이*이

# data[].attributes.subject
[혼공머신]5주차_이*이

# data[].attributes.body
드디어 5주차까지왔네요 ㅎㅎ

지각제출이라 머쓱하지만 슬쩍 제출해봅니당

야근 이슈로 아직 전 챕터를 다 공부하지는 못했지만 짬내서 꼭 마무리해보겠습니다..!!

# data[].attributes.body
아주 당당하게 지각스 ... :(

# data[].attributes.body
5주차 제출 합니다!!

# data[].attributes.body
늦어서 죄송합니다. 자꾸 월요일에 생각이 나요.. .제가 마지막인 거 같네요 ㅋㅋㅋㅋ ㅠ;; 그래도 혼공S덕분에 끝까지 공부하고, 완주할 수 있을 거 같아서 다행이에요. 감사합니다 ~~!

# data[].attributes.attachment_link.title
[혼공s] 5주차 : 네이버 블로그

# data[].attributes.body
2.6% 극악의 확률을 이기고 그로킹 알고리즘에 당첨된 영광의 주인공입니다.😎

# data[].attributes.body
지각...

내가 지각이라니...

이게 무슨 소리야...

지각이라니... 수치다.

# data[].attributes.attachment_link.description
과제를 위한 지식 INDEX에 대한 기초 INDEX 생성 및 제거 구문 질문 : INDEX 를 생성하고 k…

# data[].attributes.body
오늘도 화이팅 !!!!

# data[].attributes.body
https://blog.naver.com/ida714/223762963575

04-1은 예전에 워드에서 공부했던 내용이어서

오!!고급편 할 만 한데!!했다가

04-3에서 좌절했어요;;

이제 1주 남았네요!!

전공책도 아닌데 책이 약간 너덜너덜해져서 신기해요.

화이팅!!

# data[].attributes.attachment_link.title
[혼공얄코]5주차 : 네이버 블로그

# data[].attributes.body
벌써 5주차인데 쉽지 않네요... 어려운 내용이 점점 많아지니까 버거웠지만 남은 주도 홧팅하겠습니다!

# data[].attributes.attachment_link.readable_text
동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구, 다시 말해 상호 배제를 위한 동기화 도구 이다. 임계 구역에 진입하는 프로세스는 '내가 지금 임계 구역에 있음'을 알리기 위해 뮤텍스 락을 이용해 임계 구역에 자물쇠를 걸어둘 수 있고, 다른 프로세스는 임계 구역이 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입할 수 있다.

acquire 함수
프로세스가 임계 구역에 진입하기 전에 호출하는 함수이다. 만일 임계 구역이 잠겨 있다면 임계 구역이 열릴 때까지 임계 구역을 반복적으로 확인하고, 임계 구역이 열려 있다면 임계 구역을 잠그는 함수이다.

release 함수
임계 구역에서의 작업이 끝나고 호출하는 함수이다.
세마포
공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구이다.
모니터터
세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용한다.

📌확인문제
1. 뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.
① 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룬다.
②세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있다.
③ 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있다.
④ 세마포를 이용하면 반드시 바쁜 대기를 해야 한다.

❗정답❗
1.④ 세마포를 이용하면 반드시 바쁜 대기를 해야 한다.
해설 - 세마포는 wait 함수와 signal 연산을 사용하여 공유 자원의 접근을 제어하는 동기화 기법이다.
바쁜 대기(busy waiting)는 특정 조건을 만족할 때까지 CPU가 루프를 도는 방식인데, 세마포는 바쁜 대기를 반드시 요구하지 않는다.

# data[].attributes.attachment_link.title
[혼공컴운] Ch 12 프로세스 동기화

# data[].attributes.attachment_link.description
Chapter 12프로세스 동기화12-2 동기화 기법뮤텍스 락동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구, 다시 말해 상호 배제를 위한 동기화 도구이다. 임계 구역에 진입하는 프로세스는 '내가 지금 임계 구역에 있음'을 알리기 위해 뮤텍스 락을 이용해 임계 구역에 자물쇠를 걸어둘 수 있고, 다른 프로세스는 임계 구역이 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입할 수 있다.

# data[].attributes.body
과제 제출합니다!

이번주 균형트리... 아주 어려웠습니다. 하지만 일단 읽어는 봤다에 의의를 둡니다ㅠㅠ

저번주에 받은 기프티콘도 야무지게 사용했어요! 감사합니다

# data[].attributes.attachment_link.title
[혼공S][혼공학습단]13기 5주차 인덱스 : 네이버 블로그

# data[].attributes.body
기본숙제: https://velog.io/@iddadda/혼공자week5-Day15

추가숙제: https://velog.io/@iddadda/혼공자week5-Day17

4주차 내용 어려워서 완벽 이해 못 했는데.. 그 상태에서 이번주 범위는 너무너무너무너무 헷갈리고 어렵네요ㅠㅡㅠ

복습의 중요성 한 번 더 느끼고... 다음주는 제주 가야 돼서 공부할 시간이 없는데 큰일이에요 0_0

그치만 파이팅!

# data[].attributes.attachment_link.description
벌써 5주차이제 슬슬 앞 내용이 잊혀지기 시작했다복습은 언제 하려나인터페이스개발 코드와 객체가 서로 통신하는 접점 역할개발 코드 -> 인터페이스 메소드 호출인터페이스 -> 객체 메소드 호출즉, 개발코드는 인터페이스 메소드만 알고 있으면 됨인터페이스 선언 시 interf

# data[].attributes.body
날이 따수워지니까 약속이 점차 많아지네요ㅠ..조오금 늦었습니다요..

# data[].attributes.attachment_link.title
[혼공컴운]5주차_프로세스 동기화와 교착상태 : 네이버 블로그

# data[].attributes.body
얼마남지 않았네요.. 그리고 제 개강도요...

# data[].attributes.attachment_link.title
이진 : 네이버 블로그

# data[].attributes.body
늦어서 죄송합니다.

# data[].attributes.attachment_link.title
지니31 님의블로그 : 네이버 블로그

# data[].attributes.body
바닐라 라떼 감사합니다~

# data[].attributes.attachment_link.title
혼공학습단 13기 혼공스 5주차 : 네이버 블로그

# data[].attributes.body
K-평균 군집화 알고리즘 K개의 중심점을 임의의 위치로 잡고 줌심점을 기준으로 가까이 있는 데이터를 확인한 뒤 그들의 평균지점을 중심점을 이동 가장 많이 사용하고 있는 군집화 알고리즘이지만 클러스터의 개수인 K를 직점 지정해야 함 -몇 개의 클러스터로 데이터를 구분할 것인지를 결정하는 K값에 따라 모형 성능이 달라짐 -일반적으로 K가 클수록 모형의 정확도는 개선되지만, K값이 너무 커지면 결국 데이터를 하나 하나 구분하는 것과 같아짐 데이터 간의 유성성을 측정하는 기준 -각 클러스터의 중심까지의 거리 이용 알고리즘이 자동으로 평균을 계산하여 중심전을 만드러 거리 계산 -클러스터 중심 또는 센터로이드 -K개의 중심점을 임의의 위치로 잡고 중심점을 기준으로 가까이 있는 데이터를 확인한 뒤 그들의 거리의 평균 지점을 중심점을 이동 -다른 클러스터 간에 서로 완전히 구분하기 위해 일정 거리이상 떨어져야 함

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
우와.. 우와...

혼공머신 책을 골라서 보기 시작한 이유가 비지도학습이었는데...

이 부분을 공부하게 되다니!!

혼공학습단 아니었으면 챕터5까지 오지도 못했을거에요

감격스럽...

# data[].attributes.attachment_link.readable_text
$\color{#3B88C3}\rule{675px}{2px}$ K-평균 알고리즘 작동 방식 설명하기

06-2 k-평균

k-평균(k-means)군집 알고리즘의
평균값 = 클러스터 중심(cluster center) = 센트로이드(centroid)

k-평균 알고리즘 작동 방식

① 무작위로 k개의 클러스터 중심을 정한다

② 각 샘플에서 가장 가까운 클러스터 중심을 해당 클러스터의 샘플로 지정한다

③ 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경한다

④ 클러스터 중심에 변화가 없을 때까지 ②부터 반복

*** 비지도 학습 이기 때문에 fit() 사용 x ***

$\color{#3B88C3}\rule{675px}{2px}$ 06-3 확인 문제 풀고, 풀이 과정 정리하기
https://colab.research.google.com/drive/1zt8o4E-HPKh9Zo-tXLXeIyWZUG2ZGpz3?usp=sharing
확인문제

1. 특성이 20개인 대량의 데이터셋이 있다. 이 데이터셋에서 찾을 수 있는 주성분의 개수는?

② 20개

→ 주성분 벡터의 원소 개수는 원본 데이터셋의 특성 개수와 같음

2. 샘플개수가 1000개이고 특성개수는 100개인 데이터셋이 있다. ( 데이터셋의 크기는 (1000,100)), 이 데이터셋을 사이킷럿읜 PCA클래스로 10개의 주성분으로 변환했을 때, 변환된 데이터셋의 크기는?

① (1000,10)

→ 10개의 주성분=10개의 특성, 10개의 특성을 가진 1000개의 샘플이므로 변환된 데이터셋은 (1000,10)의 크기

3. 2번 문제에서 설명된 분산이 가장 큰 주성분은 몇 번째?

① 첫 번째 주성분

→ 원본 데이터의 분산이 큰 방향으로 데이터를 변환하고 설명된 분산은 각 주성분이 원본의 데이터를 잘 나타내는 비율을 기록하므로 첫 번재 주성분의 분산이 가장 크다.

# data[].attributes.body
국비교육에 프로젝트에 이력서 자소서 준비까지 하려니 개인 공부 시간이 잘 안나네요 ㅠ.. 그래도 마지막 주 까지 최선을 다 해보겠습니다.

# data[].attributes.attachment_link.title
[혼공파] 5주차_객체, 속성, 메서드

# data[].attributes.attachment_link.description
이 카테고리는 한빛미디어의 혼자 공부하는 자바스크립트 교재를 학습하는 내용을 정리하는 공간입니다. 1. 객체 속성 (Properties)객체 속성은 객체 안에 포함된 값들을 의미한다. 객체 속성은 문자열, 숫자, 배열, 함수 등 다양한 값을 가질 수 있다. 객체 속성에 접근하거나 수정하려면 두 가지 방법을 사용할 수 있다.1.1. 객체 속성 접근객체의 속성에 접근하는 방법은 두 가지가 있다.점 표기법 (Dot Notation): 속성 이름을 점으로 구분하여 접근하는 방법이다. 주로 속성 이름이 변수나 상수로 지정되어 있을 때 사용한다.const person = { name: ‘Alice’, age: 30 }; console.log(person.name); // Alice console.log(person…

# data[].attributes.body
이번 네트워크 학습을 하면서 매번 배운 내용들이지만, 시간이 갈수록 새롭게 느껴지는 부분이 많았습니다. 그만큼 전공 서적을 병행하면서 깊이 있게 공부하려고 노력했는데, 시간이 두 배로 걸린다는 걸 실감하고 있네요... 그래도 제대로 이해하고, 깔끔하게 정리하려는 그 과정이 중요하다는 걸 느꼈습니다. 이런 준비가 나중에 큰 도움이 될 거라고 믿고 계속해서 학습하고 있어요!

종이책과 손글씨를 선호하기는 하지만, 블로그에 작성한 글들은 이동 중에도 볼 수 있어서 정말 좋은 것 같아요. 혼공학습단 아니였으면, 계속 노트 들고다녔을지도 ㅎㅎ 족장님이 남겨주시는 댓글과 간식들 덕분에 힘을 얻어, 이번 13기도 마지막을 향해 달려갈 수 있었습니다. 모두들 끝까지 화이팅!

# data[].attributes.body
늦어서 죄송합니다~ ㅠㅠ

# data[].attributes.attachment_link.title
[혼공파] 5주차_구문오류, 예외, 표준모듈

# data[].attributes.body
5주차 제출 완료했습니다. 마지막으로 아슬아슬하게 제출했네요 ㅠㅠ

# data[].attributes.attachment_link.readable_text
배열(array) : 같은 형태의 데이터를 반복문으로 처리하기 위해 메모리에 연속적으로 저장해 놓고 쪼개 사용. 배열의 나누어진 조각을 배열 요소(element)라 함.

배열의 선언 : 다른 자료형처럼 선언을 통해서 저장공간 확보. 하나의 이름으로 한꺼번에 확보함. -> 한 번에 변수를 여러 개 선언.

자료형 배열명[요소개수];

배열 요소를 선언할 때와 사용할 때 대괄호[]속의 의미가 다름. 선언할 때는 전체 개수를 표시하고, 사용할 때는 각 요소가 몇 번째에 있는지 의미. 이 값이 첨자(배열에서의 위치)며, 배열의 첨자는 0부터 시작하므로 최대 '배열요소 -1'까지만 사용 가능. 즉, 배열 요소가 5개면 첨자는 0~4까지만 사용 가능.

배열 요소는 값을 대입하거나 연산할 때 마치 하나의 변수처럼 사용됨.

배열 초기화 : 배열도 원하는 값을 가지려면 선언과 동시에 초기화해야 함. 왜냐면 최초 할당된 저장공간에는 쓰레기 값이 저장되어 있기 때문. 배열은 {} 중괄호로 묶어 초기화.

- 초기값이 배열의 요소 개수보다 적은 경우 남은 요소는 0으로 채워짐.

- 배열에 {0};을 넣어줌으로써 자동으로 배열 요소가 0으로 초기화됨.

- 초기값 넣어주면 배열 요소의 개수를 넣지 않아도 사용 가능함. -> 컴파일러가 초기값의 개수만큼 배열 요소 개수를 정하고 저장공간을 할당함.

- double형 배열은 실수값으로 초기화되고, char형 배열은 문자로 초기화됨.

char형 배열은 주로 문자열을 저장하는 용도로 사용.

ex) double ary[3] = {1.0, 2.1};

double ary[3] = {'a', 'b'};

배열의 초기화는 선언 시 최초 한 번만 가능. 그 이후에는 배열 요소에 일일이 값을 대입해야 하고, 초기화 때처럼 중괄호{}를 사용한 대입 연산으로 한 번에 값을 바꾸는 것은 불가능.

배열과 반복문

제어변수를 배열의 첨자를 사용해 반복문을 만든다면 반복과정에서 모든 배열 요소에 값 입력 가능.

sizeof 연산자를 활용한 배열 처리

많은 양의 데이터를 처리하는 배열은 반복문 사용이 필수적임. 하지만 배열 요소의 개수가 바뀌면 일일이 수정해야 하는 번거로움이 있음. 이 번거로움을 해결할 수 있는 방법이 sizeof 연산자를 이용해 배열 크기가 바뀌더라도 자연스레 사용이 가능함. 배열 요소의 개수를 각 반복문의 반복 횟수로 사용하면 코드 수정 필요 x.

배열 요소의 개수 구하는 방법 : sizeof(배열명) / sizeof(배열 요소)

sizeof 연산자를 배열명에 사용하면 배열 전체의 크기를 바이트 단위로 계산. 이 값을 배열 요소 하나의 크기로 나누면 배열 요소의 개수를 구할 수 있음.

- 실행화면

선언만 하고 초기화하지 않아서 따로 입력하지 않은 ary[4]의 경우 쓰레기 값이 들어가 있어 쓰레기 값이 출력됨.

그래서 선언과 동시에 초기화해 쓰레기 값이 나오지 않게 만들어 주었음.

제어변수를 사용해 반복문 처리한 경우

sizeof연산자를 이용해 배열 요소의 개수를 계산한 값을 저장한 변수를 따로 두어 그 변수를 이용한 반복문

8 - 2 문자를 저장하는 배열

char형 배열은 문자들은 메모리에 연속된 공간에 저장할 수 있으므로 주로 문자열 저장에 사용. 알파벳은 1byte로 충분히 표현 가능함

char형 배열은 저장할 문자열의 길이보다 하나 이상 크게 저장해야 함.

why? 널 문자(￦0)를 저장할 공간을 비워두기 위함. 널 문자는 문자의 끝을 나타내는 용도로 쓰임.

초기화 방법 1) 문자 상수로 하나씩 초기화

char str[6] = { 'a', 'p', 'p', 'l', 'e'};

2) 문자열 상수로 한 번에 초기화

char str[6] = "apple";

널 문자 : 초기화된 문자는 배열의 처음부터 차례로 저장되어 문자열을 만드는데 남은 공간(=배열요소) 자동으로 0으로 채워짐. 이렇게 배열에 저장된 0을 특별히 널문자라고 부름. 모든 문자는 아스키코드 값으로 저장됨. 결국 널 문자는 아스키코드값이 0인 문자를 말하며 문자 상수로는 ￦0으로 표현. 널 문자는 문자열의 끝을 표시.

printf함수가 배열의크기 상관없이 초기화된 문자열을 정확히 출력하는 이유도 널 문자가 있기 때문. printf함수는 char형 배열에서 널 문자가 나올 때까지만 출력하도록 만들어짐. 이런 규칙은 문자열을 처리하는 모든 함수에 적용.

scanf함수로 문자열을 입력받을 때도 어김없이 널 문자가 사용됨. 사용자가 입력한 문자열 다음에 자동으로 널 문자를 추가해 문자열의 끝을 표시.

char형 배열 선언 시 초기화하면 남는 배열요소는 자동으로 0으로 채워지므로 문자열의 끝에 널문자가 자동 저장되지만, 초기화 하지 않은 상태에서 배열 요소에 직접 대입한다면 반드시 마지막 문자 다음에는 널 문자를 대입해야 함.

char형 배열 선언 시 주의할 점

1. 배열의 크기는 최대한 넉넉히 선언. -> 문자열의 길이가 일정하지 않은 경우 예상 가능한 가장 긴 문자열도 저장할 수 있도록 넉넉히 선언해야 함.

2. 배열 요소의 개수는 최소한 '문자열의 길이 + 1'. -> 널 문자로 그 끝을 표시하므로 최소한 널문자까지 저장할 수 있도록 배열 요소 개수를 저장해야 함.

char형 배열이 변수처럼 문자열 저장하는 역할을 하므로 초기화 이후 새로운 문자열 저장 가능하지만, 일반 변수처럼 대입해서 사용하는 것은 불가능. 문자열의 길이가 다를 수 있어서!

그래서 strcpy함수를 사용해 char형 변수에 새로운 문자열을 저장한다.

저장할 문자열의길이를 파악해 딱 그 길이만큼만 char형 변수에 문자열을 복사함. 물론 널문자도 자동으로 추가됨.

string.h헤더파일은 strcpy함수와 같은 문자열을 다루는 함수들의 원형을 모아놓은 것.

strcpy함수 사용법 : strcpy(저장될 배열명, 저장할 문자열);

저장될 배열명인 첫번째 인수는 문자열을 모두 저장할 수 있도록 커야 함. 문자열 상수 사용 못 함 왜? 상수는 바뀌지 않는 고정값이니까

배열에 대입 연산자를 사용하지 못하는 이유?

대입 연산자 왼쪽에 사용한 배열명이 컴파일 과정에서 배열이 할당된 메모리 주소값으로 바뀌기 때문.

strcpy함수를 사용가능한 이뉴는 strcpy함수가 메모리 주소값의 위치로 이동해 메모리 공간을 사용하도록 구현되어 있기 때문.

char형 배열에 문자열 대입 : strcpy함수

문자열 전용 입출력 함수 : gets(입력 함수), puts(출력 함수)

scanf함수는 char형 배열에 문자열을 입력할 수 있으나 중간에 빈칸이 있는 경우 빈칸 전까지만 입력함. 그래서 빈칸을 포함해 문자열을 입력할 수 있는 방식이 필요.

gets함수 : 빈칸을 포함해 한 줄 전체를 문자열로 입력.

gets함수 사용법인 인수로 char형 배열의 배열명을 넣어줌. gets(char형 배열명);

gets함수는 문자열 입력 중간에 빈칸이나 탭 문자 사용가능. enter를 누르기 전까지 전체를 하나의 문자열로 배열에 저장. ㅇ물론 마지막에 널문자를 붙여 문자열의 끝을 표시함.

주의할 점 : 입력할 때 항상 배열의 크기 고려하기. 입력할 때 배열의 크기를 검사하지 않기 때문에 배열의 크기보다 긴 문자열을 컴파일러에 따라 시스템 안정성 문제 때문에 컴파일 제한하기도 함.

gets함수와 짝을 이뤄 문자열을 출력하는 함수 puts

puts함수 : 문자열 상수나 char형 배열의 배열명을 주면 문자열을 화면에 출력. printf함수의 문자열 출력 기능과 같지만, 문자열 출력 후 자동 줄 바꿈의 차이가 있음. 그래서 문자열 출력 후 바로 이어서 입력하는 것은 불가능.

도전 실전 예제

# data[].attributes.attachment_link.description
Doctor! Doctor!아티스트ZEROBASEONE (제로베이스원)앨범Doctor! Doctor!발매일2025.01.195주차(2/10 ~ 2/16)Chapter 08배열의 개념 정리하고 공유하기널 문자의 정의, 용도와 표기법 공유하기 - 숙제배열(array) : 같은 형태의 데이터를 반복문으로 처리하기 위해 메모리에 연속적으로 저장해 놓고 쪼개 사용. 배열의 나누어진 조각을 배열 요소(element)라 함.배열의 선언 : 다른 자료형처럼 선언을 통해서 저장공간 확보. 하나의 이름으로 한꺼번에 확보함.

# data[].attributes.body
과제 제출합니다! 모두 고생많으셨어요

링크 : 5주차 과제

# data[].attributes.body
상속과 인터페이스에 대해서 힘들어했는데... 역시 이번에 공부하면서도 굉장히 힘들었던 것 같습니다 ㅠㅠㅠ 다른 분들 굉장히 빠르게 내주셨는데 정말 존경스럽네요

# data[].attributes.attachment_link.title
[혼공자] 5주차 자바의 인터페이스와 중첩

# data[].attributes.attachment_link.description
자바의 인터페이스와 중첩에 대해 학습했습니다.

# data[].attributes.body
벌써 5주차.. (💧또르륵)

지각할뻔.. 큐ㅜㅜ

# data[].attributes.attachment_link.description
호에.. 벌써 5주차..!과거의 나 대단한걸.. 객체typeof ([])> “odject” 속성과 메소드const object = {	number: 273, string: ‘구름’ boolean: true, array: [52, 273, 103, 32], method: function () { }} 속성과 메소드 구분하기 메소드 내부에서 this 키워드 사용하기 동적으로 객체 속성 추가/제거동적으로 객체 속성 추가하기 동적으로 속성 제거하기 메소드 간단 선언 구문 객체 자료형> const a = []undefined> a.sample = 1010> a.sample10// 함수> function b () {}undefined> b.sample = 1010> b.sample10…

# data[].attributes.body
시간 진짜 금방이네요..!

# data[].attributes.attachment_link.description
기본 미션객체, 속성, 메소드가 무엇인지 설명하기 const isLeapYear = function (year) { return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);};선택미션p. 288 확인 문제 3번 풀고, 풀이 과정 설명하기 논리연산자 &&를 통해 3가지 조건에 일치하는 값을 필터링 하도록 했다. filter 메서드는 비파괴적처리를 하기 때문에 result라는 새로운 변수에 필터링된 결과값을 할당했고,console.log에는 결과값이 할당된 result 변수를 출력했다.// 변수를 선언합니다.let numbers = [273, 25, 75, 52, 103, 32, 57, 24, 76]// 처리합니다.let result = num…

# data[].attributes.body
5주차 제출합니다.

마지막 주도 파이팅!!!

# data[].attributes.body
프로젝트 하다가 공부 하려니 시간이 왜 이렇게 부족한지 ㅠ ㅠ 그래도 책보자!

# data[].attributes.attachment_link.description
k 평균 알고리즘 작동 방식 clustering 비지도 학습 기법주어진 데이터 포인트를 K개의 클러스터로 나누는 방식 1. 무작위로 K 개의 클러스터 중심을 정함 2. 각 샘플에서 가장 가까운 클러스터 중심을 찾아서 해당 클러스터의 샘플로 정함 3. 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경함 4. 클러스 중심에 변화가 없을 때까지, 2번으로 돌아가서 계속 반복함 간단하고 효율적이지만,초기 중심선택에 따라 결과가 달라질 수 있음클러스터의 형태가 원형일 때 잘 작동함사전에 K값을 정해야 하는 단점이 있음 초기화 - 클러스터 할당 - 중심 업데이트 - 수렴검사(반복) -결과

# data[].attributes.body
이번주는 출력값이 이미지가 많아서 뭔가 재밌었던 것 같기도 하네요 ㅋㅋㅋ 벌써 마지막을 앞두고 있네요! 방학을 알차게 보낸 것 같아 뿌듯합니닷. ㅎㅎ

# data[].attributes.attachment_link.title
[혼공머신] 5주차_군집 알고리즘 / k-평균, 이너셔 / 주성분 분석

# data[].attributes.attachment_link.description
5주차Ch. 06 비지도 학습 ㄴ 06-1 군집 알고리즘 ㄴ 06-2 k-평균 ㄴ 06-3 주성분 분석06-1 군집 알고리즘드디어..! 드디어 비지도 학습이다 우하하사실 모든 데이터에 타깃이 있진 않잖아요..?내가 머라고하지 않아도. 스스로. 알아서. 자기주도학습을 하다니정말 awesome한 모델이잖아...🫰이번엔 과일 사진 데이터를 사용하는데,왼쪽의 넘파이 배열이 오른쪽의 사과를 저장한 것이라는 점....일단 난 사진을 배열로 저장한다는 것부터 몰.랐.어. (...)✅맷플롯립의 imshow() : 넘파이 배열로 저장된 이미지 출력> cmap : ‘gray’ → 흑백 이미지 cmap : ‘gray_r’ → 흑백 반전⚠️넘파이 배열에 저장될 때에는 반전되어 저장됨> gray_r로…

# data[].attributes.body
페이지가 4주차로 계속 뜨네요ㅠㅠ

토익에 컴운에 sqld까지..ㅎ

이번 방학의 주제는 공부로 마무리 되겠네요🤣🤣

그래도 남은 주도 파이팅 해보겠습니다!

# data[].attributes.attachment_link.title
기록 저장소 : 네이버 블로그

# data[].attributes.body
다음 주가 6주차라니...! 이번 주도 다들 고생많으셨습니다!!

# data[].attributes.attachment_link.title
[혼공단 13기][혼공스] 5주차 미션 : 네이버 블로그

# data[].attributes.body
흠.......6주차....내용...어려워보이던데.................넘 무서워요오......더더더ㅓㄹ덜덜덜덜덜........족장님도 조금만 더 버티면 도비처럼 자유를 얻게 되실....거에요...하핳...

# data[].attributes.attachment_link.description
Ch6. 인덱스
6.1 인덱스 개념을 파악하자
인덱스 : SELECT를 사용해서 데이터를 빠르게 찾을 수 있도록 도와주는 도구. 하나의 열에 하나의 인덱스 생성. | 인덱스 종류 | 설명 |
|---------|--------

# data[].attributes.body
화이팅!!! 좋은하루 되세요!

# data[].attributes.attachment_link.title
[혼공컴운] 5주차_프로세스 동기화, : 네이버 블로그

# data[].attributes.body
이제 한 발 남았다

# data[].attributes.attachment_link.title
[네트워크] 2025 혼자 공부하는 네트워크 4주차

# data[].attributes.body
5주차도 무사히 제출 완료하였습니다~ 이제 6주차만 남았네요. 끝까지 파이팅합시다!

# data[].attributes.attachment_link.title
[혼공S] 5주차_인덱스

# data[].attributes.attachment_link.description
Ch 6. 인덱스📌 이번 챕터에서는 인덱스의 작동원리와 구조를 이해하고 직접 만들고 사용해보았다. 06-1 인덱스 개념 파악하기인덱스: 데이터를 빠르게 찾을 수 있게 해주는 도구테이블 열 단위에 생성되며, 하나의 열에는 하나의 인덱스 생성장점은 검색 속도 빠름 (-> 컴퓨터 부담 감소로 시스템 성능 향상)단점은 DB 내 추가 공간 및 생성 시간 필요, 데이터 변경 작업이 자주 일어나면 성능 저하로 이어짐종류는 클러스터형 인덱스, 보조 인덱스, 고유 인덱스로 나뉨클러스터형 인덱스: 영어사전처럼 이미 내용이 알파벳 순으로 정렬되어있음, 기본 키로 지정된 열에 자동으로 생성되며 테이블당 1개만 생성 가능. Key name에 PRIMARY라고 써 있음보조 인덱스: 책 뒤에 있는 찾아보기처럼 찾아보기가 별도로…

# data[].attributes.headline
[혼공머신]5주차_김*훈

# data[].attributes.subject
[혼공머신]5주차_김*훈

# data[].attributes.body
## K-평균 알고리즘

배경:

주어진 데이터를 K개의 클러스터로 나누기 위해 개발된 비지도 학습 기법

작동 방식:

1. K개의 초기 중심점 설정:

무작위로 K 개의 클러스터 중심을 정함.

2. 각 데이터 포인트 할당 :

각 샘플에서 가장 가까운 클러스터 중심을 찾아 해당 클러스터의 샘플로 지정.

3. 중심점 갱신:

클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경.

4. 수렴할때 까지 반복:

클러스터 중심에 변화가 없을때까지 2번으로 돌아가 반복.

끝까지 파이팅!!!

# data[].attributes.body
5주차 제출합니다~~~~.

끝이 보여요 ㅎㅎㅎㅎ

# data[].attributes.attachment_link.title
[혼공파] 너도 오류가 나지 않도록 조심해.

# data[].attributes.attachment_link.description
슬슬 제목을 뭘로 할지 고민이 됩니다. 암튼 오늘 숙제는 구문 오류(Syntax Error)와 예외(Exception)의 차이를 설명하는 겁니다. 일단 차이점을 알아보려면 각각이 무엇인지 알아야 합니다. 구문오류(Syntax Error)란?
: 코드의 문법이 잘못

# data[].attributes.body
https://blog.naver.com/topology94/223762853601

# data[].attributes.body
안돼 ~ ~ 곧 있으면 대학생이라니 ~~ㅠㅠ

# data[].attributes.body
5주차 제출합니다! 이제 얼마 안남았네요 화이팅!

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
5주차 제출합니다!! 끝까지 파이팅해볼게요 😁

# data[].attributes.attachment_link.description
06. 객체객체란?객체(Object)는 '실제로 존재하는 사물'을 의미하며, 자바스크립트에서는 이름(name)과 값(value)으로 구성된 속성(property) 을 가지는 기본 데이터 타입이다. 객체는 여러 개의 속성과 메소드를 포함할 수 있어 강력한 데이터 구조를 제공한다.객체의 예시:const person = { name: '홍길동', age: 25, greet: function() { console.log('안녕하세요!

# data[].attributes.body
http 상태코드를 이해할 수 있어서 도움이 많이 되었습니다. 추가 숙제가 평소보다는 어려웠던 것 같습니다!

이번 주에 열심히 달려서 밀린 것들 제출하고 드디어 따라잡았네요!😂

어렵고 힘들지만 끝까지 가보겠습니다. 다들 파이팅!

# data[].attributes.attachment_link.title
혼자 공부하는 네트워크(5)

# data[].attributes.body
지각하지 않는 것을 목표로... 6주차는 공들여 진행해보겠습니다. 벌써 1주차밖에 안 남았네요!! 비록 매 회차 공들이지는 못했지만 이런 프로그램 만들어주셔서 정말 감사합니다. 덕분에 동기부여가 됐어요!

# data[].attributes.attachment_link.description
[숙제]인덱스 생성하고 KEY-NAME 이 PRIMARY 로 출력된 결과화면 제출합니다! 점점 짧아지는 결과물... 유종의 미를 거둘 수 있도록 6주차는 추가 숙제까지 해보겠습니다... 그래도 공부를 하다보니 어떤 부분이 부족한지 알게 되어서 기쁩니다. 항상 행복하세요, 감사합니다! 추가숙제

# data[].attributes.body
저에게도 우수혼공자라는 뱃지가...!

정리하다보니 한 포스팅에 한 알고리즘만 정리해도 한 바가지군요. 별도 페이지를 만들어서 용어 정리를 좀 해두어야겠습니다.

실무에 써보고 싶은 알고리즘이 많네요!

# data[].attributes.attachment_link.readable_text
셀프 반감금 5주차!

어머낫 어찌저찌 4주차 우수 학습자가 되었습니다. 나에게도 이런일이.

이 칭찬에 힘입어 다음주까지 열심히 아름다운 마무리를 진행 해 보겠습니다.

Chapter 06. 비지도 학습 | 비슷한 과일끼리 모으자!

학습 목표

타깃이 없는 데이터를 사용하는 비지도 학습과 대표적인 알고리즘을 소개합니다.

대표적인 군집 알고리즘인 k-평균과 DBSCAN을 배웁니다.

대표적인 차원 축소 알고리즘인 주성분 분석(PCA)을 배웁니다.

06-1 군집 알고리즘

06-2 k-평균

06-3 주성분 분석

k-평균 알고리즘이란

K-평균(K-Means) 알고리즘

비슷한 데이터끼리 묶어주는 군집화(Clustering) 알고리즘으로 평균값을 자동으로 찾아줍니다.

이 평균값은 클러스터의 중심에 위치하기 때문에 클러스터 중심 또는 센트로이드라고 부릅니다.

비슷한 것들끼리 묶어주는 방법입니다.

k-평균 알고리즘 작동 방식 설명하기
1. 군집의 개수(K)를 정하기

데이터를 몇 개의 그룹(클러스터)으로 나눌지 결정합니다. (예: K=4이면 4개의 그룹으로 분류)

데이터에서 무작위로 K개의 중심점을 선택합니다.첫 중심점과 순서에 별도 의미는 없습니다.

각 샘플에서 가장 가까운 중심점(클러스터 중심)을 찾아 샘플로 지정합니다.
4. 중심점 업데이트

각 그룹(클러스터)의 평균을 계산하여 중심점을 다시 설정하고 묶습니다.

새로운 중심점이 더 이상 움직이지 않을 때 까지 3번으로 돌아가 반복합니다.

예시

유튜브 이용자 분류를 예시로 들어보겠습니다.

1. K = 4
"동물 영상을 주로 보는 그룹", "영화 리뷰 영상을 주로 보는 그룹", "정치적 이슈 영상을 자주 보는 그룹", "경제, 재태크 영상을 자주 보는 그룹"

2. 10,000명의 대상으로 랜덤하게 그룹을 만듭니다.

3. 각 그룹내의 중심점을 설정합니다.

4. 그룹 내 평균값을 찾아 이동합니다.

5. 가장 가까운 샘플들을 다시 클러스터로 묶습니다.

6. 4, 5를 반복하여 점점 비슷한 영상을 보는 이용자들이 묶이도록 조정합니다.

7. 각 그룹이 안정되어 중심점이 움직이지 않을 경우 분류를 완료합니다.

샘플 코드

import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans # 샘플 데이터 생성 np.random.seed(0) X = np.random.rand(100, 2) # 100개의 2차원 좌표 데이터 # K-평균 알고리즘 적용 (K=3) kmeans = KMeans(n_clusters=3, random_state=0) kmeans.fit(X) # 결과 시각화 plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis', alpha=0.7) plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], color='red', marker='X', s=200, label='Centroids') plt.legend() plt.title("K-평균 알고리즘 결과 (K=3)") plt.show()

📌 활용 범위

Ch.06(06-3) 확인 문제 풀고, 풀이 과정 정리하기

# data[].attributes.attachment_link.title
[혼공머신] 5주차_혼자 공부하는 머신러닝+딥러닝_Chap06

# data[].attributes.attachment_link.description
셀프 반감금 5주차! 어머낫 어찌저찌 4주차 우수 학습자가 되었습니다. 나에게도 이런일이. 이 칭찬에 힘입어 다음주까지 열심히 아름다운 마무리를 진행 해 보겠습니다. Chapter 06. 비지도 학습 | 비슷한 과일끼리 모으자! 학습 목표 타깃이 없는 데이터를 사용하는 비지도 학습과 대표적인 알고리즘을 소개합니다. 대표적인 군집 알고리즘인 k-평균과 DBSCAN을 배웁니다. 대표적인 차원 축소 알고리즘인 주성분 분석(PCA)을 배웁니다.

# data[].attributes.body
벌써 5주차네요.. 거짓말.. 🙄

저의 따봉 플리 공유드리며...

다들 남은 기간 파이팅!

https://music.youtube.com/playlist?list=PL2IFPDOX52cHkMxLxie9Zlv6jhDYVbdj_

# data[].attributes.attachment_link.description
이제 곧 개강이 다가와서..요즘 졸작으로 어떤 기발한 걸 해볼지 생각 중이랍니다일단 인공지능을 만들어 볼 생각인데 어떤 걸 할지는 아직 못 정해서만들면 공유 해볼게요 (╹ڡ╹ ) 도톤보리 하이퍼랩스로 찍어왔어요 =P 눈썰매 타러 춘천을 다녀왔습니다 진짜진짜 너무 예뻤어요 (p. 244)₁225쪽에서 가져온 exdata1 테이블에서 AGE가 30세 이하이면서 Y20_CNT가 10건 이상인 데이터를exdata2 테이블로 생성하는 코드를 작성하여 실행 결과처럼 출력해 보세요. (파이프 연산자 사용!) 파이프 연산자 사용해서 filter로 정렬해 출력했습니다! (p. 261)² 1학년 1반, 2반, 3반 학생 5명씩의 중간고사와 기말고사 성적이 기록된 엑셀 파일을 가져온 후다음 실행 결과와…

# data[].attributes.body
이제 한 주 남았는데 마지막까지 꼭 완주하고 하겠습니다~

# data[].attributes.attachment_link.title
[혼공컴운]5주차_챕터12~13(프로세스 동기.. : 네이버블로그

# data[].attributes.body
5주차 완료했습니다 +_+

다음주가 마지막인데... 온다 그분이......

# data[].attributes.attachment_link.title
[혼공학습단 13기] 혼공C - 5주차 : 네이버 블로그

# data[].attributes.body
5주차 제출합니다!

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 카너먼의 블로그입니다

# data[].attributes.attachment_link.title
[혼자 공부하는 C언어] 5주 차 - 배열

# data[].attributes.attachment_link.description
8장. 배열 1. 배열의 선언과 사용 배열(Array)은 기본 자료형을 여러 개 묶어서 사용하는 것으로 인덱스(…

# data[].attributes.body
파이썬은 catch가 아니라 except군요

# data[].attributes.attachment_link.title
[혼공파] 파이썬 구문 오류(SyntaxError)와 예외(Exception)의 차이점

# data[].attributes.attachment_link.description
이 게시글은 혼공학습단(혼공파) 13기의 5주차 과제를 포함하고 있습니다.어떤 언어로든 프로그래밍을 하다 보면 구문 오류(SyntaxError)와 예외(Exception)를 자주 만나게 됩니다. 이 둘은 모두 코드 실행을 멈추게 만들지만, 발생 원인과 처리 방식이 다릅니다. 이번 글에서는 구문 오류와 예외의 차이를 이해하고, 이를 효과적으로 처리하는 방법을 살펴보겠습니다.1. 구문 오류(SyntaxError)란?구문 오류(SyntaxError)는 코드가 문법적으로 올바르지 않을 때 발생하는 오류입니다. 파이썬 인터프리터는 실행 전에 구문 분석(parsing) 과정을 거치는데, 이때 문법에 맞지 않는 코드가 발견되면 SyntaxError가 발생하며 실행이 중단됩니다. 주로 IDE의 코드 빨간줄인 경우 구문…

# data[].attributes.body
인생 예외처리 어디 없나요? 삶이 너모 빡빡해...

# data[].attributes.attachment_link.title
[혼공학습단 13기] 5주차 과제

# data[].attributes.attachment_link.description
내 인생을 예외 처리 하고픈 마음에 작성하는 PYTHON 예외 처리

# data[].attributes.body
5주차도 열공했습니다. 시간이 참 빠르군요

# data[].attributes.attachment_link.title
[혼공알코 5주차] 혼자 공부하는 프로그래밍 .. : 네이버블로그

# data[].attributes.body
https://sage-science-519.notion.site/Chapter6-2-KMeans-be1064084fb243b6ade3c5e867094c44?pvs=4

https://sage-science-519.notion.site/Chapter6-2-KMeans-be1064084fb243b6ade3c5e867094c44?pvs=4

이미지처리 논문 스터디를 얼레벌레 한적이있었는데 이책을 먼저 공부 했으면 이해가 더 쉬웠을거같았어요..

# data[].attributes.attachment_link.readable_text
https://colab.research.google.com/drive/1cuxMsOPQzO-jF8fQGaHF8kyiqpgMMJQ2#scrollTo=0kHfcrTF8xXR
[비지도 학습]

타깃이 없는 머신러닝 알고리즘

사람이 가르쳐주지 않아도 데이터에 있는 무언가를 학습

[메서드]

.imshow() : 넘파이 배열로 저장된 이미지를 그리는 함수

.subplots() : 여러개의 그래프를 배열처럼 쌓아 그리기

.hist() : 히스토그램 그리기(x값: 값, y값 :빈도수)

.abs() : 절대값 계산

[여기서 한 방법]

1. 각 과일 사진의 평균구하기 (가로/ 한개의 행만의 평균을 구하는/ 과일 하나에 대한 픽셀의 평균값 / 총100개 x 3 = 300)

각 샘플의 평균을 쉽게 구하기 위해서 100 x 100 이미지를 펼쳐서 길이가 10,000인 1차원 배열로 우선 만든다.

(100,10000)은 사과의 샘플이 100개 이고, 샘플 1개당 10000개의 픽셀이 있다는뜻

각 샘플의 평균값 (10000개의 평균값 ,총100개)

# data[].attributes.body
5주차도 무사히 제출합니다. 다들 열심히 참여하는 것을 보니 깐 힘들어도 격려가 되네요. 감사합니다.

# data[].attributes.body
다음주면 벌써 끝이라니 너무 아쉽기도하고 짧지만 뭔가를 배우고 기록할 수 있는 기회를 선물 받은것 같아요. 감사합니다.

# data[].attributes.attachment_link.title
[혼공학습단13기,5주차] 혼자 공부하는 얄팍.. : 네이버블로그

# data[].attributes.body
가장 늦게 매번 하는거 같네요. 인덱스를 생성만 하고 이 안에 클러스터 인덱스가 있거나 생성 및 삭제의 과정은 크게 신경을 안썼던거 같아요. 잘 배울 수 있었습니다.

# data[].attributes.attachment_link.title
여전히 부족하지만 나는 나의 열정을 쓰다듬어 준다. : 네이버 블로그

# data[].attributes.body
다음주까지만 하면 끝!!!!

# data[].attributes.attachment_link.description
기간 : 2025-02-09 ~ 2025-02-16이번에는 시간이 조금 촉박해서 일단 읽고 천천히 올리기...게으른 자의 깃허브객체, 속성, 메소드가 무엇인지 설명하기객체 Object 속성과 메소드를 가질 수 있는 자바스크립트의 데이터 유형 JavaScript의 거의

# data[].attributes.body
5주차 제출합니다~

# data[].attributes.body
5주차 완료하였습니다. 익명 객체 부분에 대해서 공부하는데 정말 어렵네요. 그래도 남은 한 주차 열심히 해보겠습니다!

챕터 8 : https://chestnut-jelly-076.notion.site/Chapter-08-19bcceab8088801d9d29e894b95087d7

챕터 9 : https://chestnut-jelly-076.notion.site/Chapter-09-19bcceab808880778288f7c3bfe8c49b

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.attachment_caption
[혼공학습단 13기 혼공파] 5주차_구문 오류, 예외와 예외 처리

# data[].attributes.body
어렵습니다....

# data[].attributes.attachment_link.title
[혼공학습단 13기 혼공파] 5주차_구문 오류, 예외와 예외 처리

# data[].attributes.attachment_link.description
▶기본 숙제 : 구문 오류와 예외의 차이 설명하기(p. 379 1번 문제) 구문 오류 : 프로그램 실행 전 발생하…

# data[].attributes.body
이제 1주 남았다

# data[].attributes.attachment_link.title
[혼공파_5주차] : 네이버 블로그

# data[].attributes.body
점점 다양한 모듈, 클래스를 마주하다보니 복잡해져서

모듈, 클래스 별 메서드/속성/파라미터를 정리하는 노션 페이지를 만들어봤어요

이렇게 분류해서 보니까 나중에 보기도 편하고 체계적으로 정리하니까 머릿속에도 잘 들어오더라고요!

[기본숙제]k- 평균은 순서도를 이용해서 알고리즘 작동 방식을 설명해봤어요

[추가숙제]https://kmina02.tistory.com/218

이 글에서 6-3 확인문제 풀이 정리했습니다

# data[].attributes.attachment_link.description
💡 서론이전에 k-fold classification이 나왔던 것처럼 이번에는 k-means clustering이다. k개의 그룹으로 만들고, 평균값을 이용해서 클러스터링을 진행한다. 💡 K-Means 클래스sklearn.cluster 모듈 아래에 있는 KMeans 클래스로, k-mean clustering에 필요한 다양한 메서드와 매개변수, 그리고 결과를 나타내는 속성들이 있다.이것들을 이용해서 k-means clustering을 진행하게 된다. 💡 K-Means 클래스k-means clustering 알고리즘이 과정을 계속 반복하는 비교적 단순한 알고리즘이다. 이 알고리즘을 구현하는 클래스가 KMeans 클래스!이렇게 fit 메서드를 이용해서 k-평균 알고리즘으로 클러스터링을 진행하고, 속성들을…

# data[].attributes.body
벌써 다음 주가 마지막 주라니;;ㅠㅠ 끝까지 파이팅!@!

# data[].attributes.attachment_link.title
[혼공스] 5주차 객체

# data[].attributes.attachment_link.description
객체JS는 객체 기반이며, 구성하는 거의 모든 것이 객체이다. 원시 값을 제외한 나머지 값은 모두 객체이다. 원시 타입의 값은 변경이 불가능한 값이고, 객체 타입의 값은 변경이 가능하다.객체는 0개 이상의 프로퍼티로 구성된 집합이다. 프로퍼티는 프로퍼티 키, 프로퍼티 값으로 구성 되있다. 프로퍼티 키 뒤에 콜론(:)작성해서 프로퍼티 값이랑 구분하고 프로퍼티는 콤마(,)로 구분한다. 프로퍼티 값이 함수일 경우 메서드라고 부른다.// 일반 객체const person = {	name: ‘Kim’,	age: 20}// 프로퍼티 값에 함수가 있는 객체const ageCount = {	age : 0,	counter: function () { this.age++;	} 프로퍼티 접근프로퍼티에 접근하는 방법은 마침표…

# data[].attributes.body
벌써 5주차라는게 안 믿길 정도로 시간이 빠르네요! 날이 많이 따뜻해진것같지만 다시 약간 추워지는것같습니다. 감기 조심하세요!

# data[].attributes.attachment_link.title
[혼공컴운] 5주차_프로세스 동기화/교착 상태

# data[].attributes.attachment_link.description
✔️동기화 프로세스 동기화: 프로세스들 사이의 수행 시기를 맞추는 것실행 순서 제어: 프로세스를 올바른 순서대로 실행하기상호 배제: 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기 공유 자원: 공동으로 사용하는 자원 (변수,파일,장치 등)임계 구역: 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역레이스 컨디션: 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우 운영체제는 임계 구역 문제를 해결하고자 3가지 원칙을 지킨다.상호 배제: 한 프로세스가 임계 구역에 진입시 다른 프로세스는 임계 구역에 들어올 수 없다.진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수…

# data[].attributes.body
담주 일본 갑니다... ㅋ쿄쿄

한 주가 남았네요. sql은 항상 느끼지만 어렵습니당...

뭔가 작성하다보면 긴 시간인 것 같은데 짧게 느껴지는 이런 기분...

# data[].attributes.attachment_link.description
이제서야 받은 꿀커피를 먹어봤는데... 되게 신기한 맛... 꿀과... 커피...? 1. 인덱스- 데이터를 빠르게 찾을 수 있도록 도와주는 도구 * 클러스터형 인덱스 : 기본 키로 지정하면 자동 생성, 테이블에 1개만 만들 수 있음기본 키로 지정한 열을 기준으로 자동 정렬 * 보조 인덱스 : 고유 키로 지정하면 자동 생성되며 여러 개를 만들 수 있음. But 자동 정렬을 되지 않음. ✓ 장점 : SELECT 문으로 검색하는 속도가 매우 빨라짐컴퓨터의 부담이 줄어들어서 전체 시스템의 성능이 향상됨 ✓ 단점 : 공간 차지로 인해 데이터베이스 안에 추가적인 공간 필요처음 인덱스를 만들 시 시간이 오래 걸릴 수 있음. 2. 균형 트리- 클러스터형 인덱스와 보조 인덱스는 모두 내부적으로 균형 트리로 만들어짐 *…

# data[].attributes.body
정말 정말..매번 일요일에되어서야 마무리짓는

저의 게으름이 매번 아쉽지만,

그래도 혼공단과 혼공족장님 덕분에 이리 무거운 몸이라도 이끌고 마무리짓는 것 같습니다.

감사드리오나, 더 열심히 해야겠죠?..ㅎㅎ

그런데..이제 한주밖에 안남았네요ㅠ

아쉽아쉽...마지막까지 최선을!!!

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
다시 한 번 더 개념 정리 하면서 전체적으로 인터페이스에 대해 파악해 보겠습니다!!!

마지막주도 화이팅 !!!!

# data[].attributes.attachment_link.title
[혼공자] 5주차 과제

# data[].attributes.attachment_link.description
5주차 (02.10 ~ 02.16) / chapter08~09 1. 기본 숙제
인터페이스 : 객체의 사용 방법을 정의한 타입 >인터페이스 선언
interface 키워드를 사용
>*
>인터페이스 선언 예시 인터페이스는 데이터를 저장할 수 없기 때문에 인스턴스, 정적

# data[].attributes.body
벌써 5주차네요!

왜 이리 시간은 빠르게 지나가는지ㅠㅠ

그래도 방학 동안 혼공학습단을 했다는 큰 업적이 있으니 뿌듯합니다ㅎㅎ

# data[].attributes.attachment_link.title
[혼공S] 5주차_인덱스

# data[].attributes.attachment_link.description
이번주는 진짜 빨리 지나가서 호정이 아녔음 5주차인지도 모르고 시킵할 뻔했다ㅎㅎ(•́ε•̀;ก)💦 인덱스 개념을 파악하자데이터를 빠르게 찾기 위해 사용함! 잘 사용하면 성능이 좋아질 수 있다~ + 많이 만든다고 좋은 게 아님! 필요 없는 인덱스는 데이터베이스가 차지하는 공간은 늘리고 전체 테이블에서 찾는 것보다 느려진다. 인덱스의 장점과 단점 장점SELECT 문으로 검색하는 속도가 매우 빨라진다.컴퓨터의 부담이 줄어들어서 전체 시스템의 성능이 향상됨단점데이터베이스 안에 추가적인 공간이 필요하다.처음에 인덱스를 만드는 데 시간이 오래 걸릴 수 있다.SELECT가 아닌 데이터의 변경 작업이 자주 일어나면 오히려 성능이 나빠질 수도 있다.인덱스의 종류 클래스터형 인덱스(Clustered Index) : 기본…

# data[].attributes.body
이번주도 후딱 끝냈다. 다음주까지 파이팅...

이제는 내가 정말로 해야할 일에 집중하기로 했다.

# data[].attributes.attachment_link.title
[혼공분석] 5주차 (1) - Chapter 05-1: 맷플롯립 기본 요소 알아보기 / Chapter 05-2: 선 그래프와 막대 그래프 그리기

# data[].attributes.attachment_link.description
p.134의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡쳐하기codep.316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기code

# data[].attributes.body
다른 일과 같이 하니까 시간이 촉박하네요.

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
HTTP 관련 내용이 한가득 들어있는 아주 야무진 내용이였습니다.

# data[].attributes.attachment_link.title
[혼공네트] 5주차 학습 내용

# data[].attributes.attachment_link.description
도메인 네임: IP 주소와 대응되는 문자열 형태의 호스트 정보네임 서버가 관리함DNS: 계층적이고 분산된 도메인 네임에 대한 관리 체계이자 이를 관리하는 프로토콜도메인 네임을 풀이(리졸빙)하기 위해 사용되는 네임 서버의 유형으로는 네임 서버, 루트 네임 서버, TLD

# data[].attributes.body
쉽지 않다 ..

# data[].attributes.attachment_link.description
- 기본 숙제(필수)확인문제 1번(p.271)도메인 네임 과 네임 서버 에 대한 설명 으로 옳지 않은 것을 골라 보세요 . 1) 8.8.8.8 은 대표적인 공개 DNS 서버 로 , 구글 이 관리 합니다 .2) 도메인 네임 은 호스트 를 특정 할 수 있는 문자열 형태 의 정보 입니다 .3) DNS 는 계층 적이고 분산 된 도메인 네임 에 대한 관리 체계 이자 이를 관리 하는 프로토콜 입 니다 .4) www.example.com 에서 루트 도메인 은 com 에 해당 합니다4번 : 루트 도메인은 . 확인문제 2번(p.307)2. HTTP 상태 코드 에 대한 설명 으로 옳지 않은 것을 골라 보세요 .1) 300 번대 상태 코드 는 요청한 자원 이 존재 하지 않음 을 의미 합니다 .2) 400 번대 상태 코드 는…

# data[].attributes.body
벌써 마지막을 앞두고 있네요... 항상 뭔가를 할대는 모르다가 막바지가 다가오면 시간의 흐름을 세게 자각하게 됩니다...ㅎ

나름 열심히 정리를 하면서 공부도 슬슬 적응하게 되네요 뭔가 습관이 들어버렸다고 해야하나? 혼공학습단 덕분에 공부 습관하나 얻어가서 좋네요. 그래도 분량은 갈수록 절 흑화하게 만드는 것 같아 아주 기쁩니다.

# data[].attributes.body
올해도, 혼공 시작한지도 정말 빨리 지나가네요.

벌써 5주차라니~

마지막 6주차도 화이팅입니다.^^

# data[].attributes.attachment_link.title
혼공머신(혼자 공부하는 머신러닝+딥러닝)_5주.. : 네이버블로그

# data[].attributes.body
혹한기 훈련이 끝나고 주말 마지막에서야 이번 주 분량을 하네요. 이제 휴가만 남았습니다. 다음 주까지 마무리 잘 하고 유종의 미를 거두겠습니다.

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
5주차도 이렇게 마무리하게 되었습니다. 남은 한 주도 화이팅해서 완주해보자구요!!

# data[].attributes.attachment_link.provider_name
네이버 블로그 | 코딩 너머: IT 신입을 향한 여정

# data[].attributes.attachment_link.title
[혼공머신] 5주차_비지도학습

# data[].attributes.attachment_link.description
이번 한 주는 "ch06.비지도학습"에 대해 학습하였습니다. 혼공학습단 활동도 어느새 후반부에 접…

# data[].attributes.body
책으로만 읽으니까 이해가 어렵긴 하네용...

점점 내용이 많아지니 머리가 터져버릴지도,..

# data[].attributes.attachment_link.description
동일한 자료형을 저장 할 공간이 많이 필요한 경우 일일이 변수를 선언하면 적지 않은 품이 든다. 이 때 이…

# data[].attributes.body
학회 준비 다 해뒀는데.. 월요일 회사 사정으로 취소되어서 이래저래 취소 수수료만 먹었네요. 취소 했다고 수수료를 회사에서 주진 않죠. 사실 2달 전부터 준비 했는데.. 2일만에 취소 당했으요 뭐 그럴 수도 있지 하는 한 주였습니다. 덕분에 여유있게 금주 공부 할 수 있었습니다.

# data[].attributes.body
책에서 정리한 용어들을 중심으로 정리했습니다! 면접에 나올만한 부분이 정말 많네요...! 덕분에 기억이 많이 났습니다!

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
아니 벌써 5주차~~~~ 이제 진짜 끝이 보입니다. 마지막 주도 화이팅!

# data[].attributes.attachment_link.title
Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

# data[].attributes.attachment_link.description
A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team

# data[].attributes.body
이번주는 용량이 큰 데이터베이스에서 정보를 추출할 경우 많은 시간이 소요되는 문제를 해결해주는 인덱스에 대해 공부했다!

# data[].attributes.attachment_link.title
<혼공단> 혼자 공부하는 SQL 5주차 공부노트 : 네이버 블로그

# data[].attributes.body
이번 주차는 특히 더 새로운 내용이 많았습니다!

단계를 하나하나 따라가야하는 내용이 많아서 다른 파트보다 더 내용이 무겁게 다가왔는데, 다시 읽어보고 블로그에 복습 내용 정리하니까 그래도 할만 한 것 같아요. ㅎㅎ

벌써 곧 있으면 6주차라는게 넘 아쉬운데 마무리도 열심히 해보겠습니다. 파이팅~

# data[].attributes.attachment_link.description
1. 프로세스 동기화
동기화란?
운영체제는 프로세스 동기화를 통해 프로세스를 관리한다. 동기화는 ‘실행 시기를 맞추는 것’이라는 뜻인데, 그 의미를 2가지로 나눠 생각하면 다음과 같다.
> - 실행 순서 제어 : 프로세스를 순서대로, 또는 특정 조건이 성립 되었을 때에만 실행
상호 배제 : 하나의 자원에 하나의 프로세스만 접근 가능 특히, 상호 배제의…