[42 Seoul] CPP Module 02
2024. 3. 11. 17:00
42 Seoul
개념 복사 생성자 한 객체의 내용을 다른 객체로 복사하여 생성된 생성자 복사 생성자가 정의되어 있지 않으면, 디폴트 복사 생성자가 존재하는데 이 디폴트 복사 생성자는 얕은 복사를 기반으로 동작 얕은 복사(Shallow Copy) 객체를 복사할 때, 해당 객체만 복사 복사된 객체의 인스턴스 변수는 원본 객체의 인스턴수 변수와 같은 메모리 주소값을 참조하게 됨 -> 복사한 대상이 바뀌면은 복사된 객체도 바뀌는 문제 발생 깊은 복사(Deep Copy) 객체를 복사할 때 인스턴스를 변수 전부를 복사 새롭게 동적할당을 하고, 원본의 데이터를 복사하게 됨 대입 연산자 오버로딩 연산자를 오버로딩 (재정의) 한 것 대입 연산자도 마찬가지로 디폴트 대입 연산자는 얕은 복사를 하게됨 따라서 깊은 복사를 원하면 대입 연산자..
[42Seoul] CPP Module 01
2024. 3. 9. 21:50
42 Seoul
개념 스택(stack)영역과 힙(heap) 영역 스택 영역 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸 힙 영역 사용자가 직접 관리할 수 있는 영역 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됨 c++에서는 new()로 동적 할당하고, delete()로 해제 reference C++에서 특정 변수의 실제 이름 대신 사용할 수 있는 것 (별명과 비슷) 선언된 참조자는 대상 변수와 같은 메모리 위치를 참조하게 됨 int value = 42; int &ref = value; 포인터와 유사하지만 다른점은 참조자는 한번 선언되면 다른 변수를 참조할 수 없음 참조자는 주로 함수 매개 변수로 많이 사용되는데, 매개 변수로 사용 하면 복..
[42Seoul] CPP Module 00
2024. 3. 8. 22:27
42 Seoul
설명에 들어가기 전 후기 42Seoul 프로젝트에 관한 포스팅을 하는것은 굉장히 오랜만인것 같다 사실 00번부터 09까지 있는 cpp module를 다 통과하면 그때 한번에 cpp module에 관한 글을 쓰려 했는데 이제서야 기나긴 CPP Module이 끝이 보이기 시작한다 04까지 끝내고 다른 과제들도 하다 오느라 이전의 나의 결심은 사실 변명 거리에 불과하다는 것은 알고있지만..... CPP Module이 끝나가는 기념으로 CPP Module 포스팅을 하려고 한다 사실 42Seoul의 CPP Module을 하기 전에 C++를 어느정도 다뤄봤어서 자신만만했지만, 역시 나는 우매함의 봉우리 위에 있었다 CPP Module을 통해 C++의 개념들을 훑고, 구현하고 응용할 수 있었던 좋은 과제이다 (98 ..
[42Seoul] Philosophers
2023. 5. 4. 09:58
42 Seoul
설명에 들어가기 전 후기 사실 통과한지 약 3주가 넘었지만 이제야 후기를 쓰게 된다 식사하는 철학자 문제는 운영체제 수업에서 들었던 익숙한 문제여서 수월하게 접근할 수 있었다 구현에는 어렵지 않았지만 데이터레이스를 해결하기 위한 뮤텍스 사용, 그리고 뮤텍스를 남발할 때의 시간 밀림현상을 해결하는 것이 골치 아팠다 처음에는 각각의 변수에 뮤텍스를 하나씩 할당했지만, 그렇게 되면 시간이 밀려서 금방 죽게되기에 뮤텍스를 최대한 적게 사용하면서 데이터 레이스를 해결하도록 했다 밥 먹는 시간이나, 먹는 횟수를 잘못 설계해서 조금 바꾼 부분도 있었다 원래 보너스는 잘 하지 않는데, 세마포어를 활용하는 이 문제의 보너스 만큼은 나중에 아우터에 가면 꼭 보너스까지 해봐야 겠다고 생각했다 프로젝트 소개 철학자들은 둥근 ..
[42 Seoul] minishell
2023. 3. 17. 17:13
42 Seoul
설명에 들어가기 전 후기 2달동안 했던 미니쉘이 드디어 끝이 났다 미니쉘을 하면서 bash에 값을 정말 많이 입력을 해봤고, 설마 이것도 돼?? 라는 말만 정말 많이 한 것 같다 파싱 파트를 맡으면서 구조를 어떻게 짜야하는지가 정말 오래걸렸고, 구현을 하는데는 생각보다 오래 걸리지는 않았다 하지만 "문자열"문자열 같은 케이스를 만나면서 기존에 구현했던 방식으로는 이 케이스를 해결할 수 가 없다는 것을 알았고, 결국 갈아엎게 되었다 갈아엎고 새로운 방법을 채택했을 때는 다행히 다양한 케이스에도 유연하게 대처할 수 있었다 다만, 문자열 내에 환경변수가 섞여 들어가는 케이스에서는 새로운 연결리스트를 하나 더 만들어야 했기에 복잡하게 작동하긴 하였다 케이스마다 leak이 나오는 것이 달랐기에, leak을 잡는 ..
[42 Seoul] push swap
2023. 2. 24. 19:03
42 Seoul
설명에 들어가기 전 후기 2서클 중 가장 어려운 과제였기에 시간도 제일 오래 걸렸다 오래 걸린만큼 push_swap에서 나올 수 있는 웬만한 에러들은 다 만나고 끝낼 수 있었던 것 같다 정렬이 목적인 push_swap이지만 편의상 stack이라고 말하는 deque를 구현하는 법도 배울 수 있었고, 일반적인 정렬과 방법이 조금 다른 push_swap만의 여러가지 정렬 방법도 모두 맛볼 수 있었다 이것저것 많이 질문을 하러 다녔었는데, 그럴때마다 다들 도와주셔서 모두들 감사하다:) 프로젝트 소개 스택에 들어있는 데이터를 제한된 명령어를 사용하여, 최대한 적은 횟수 내에 정렬하기 스택 a, 스택 b 명령어(sa, sb, ss, pa, pb, ra, rb, rr, rra, rrb, rrr) 명령어 sa: 스택 ..
[42 Seoul] minitalk
2023. 1. 5. 23:06
42 Seoul
설명에 들어가기 전 후기 minishell을 하기 전, pipex와 minitalk 둘 중에 하나만 고르면 되는데 나는 minitalk을 골랐다 minishell을 하려면 pipex가 도움이 된다고는 하지만 어차피 둘 다 알아야 하고, 이전에 minitalk을 평가해봤을때 프로세스 간 통신이라는 것이 인상 깊어서 minitalk을 선택했다 minitalk은 보너스를 하지 않으면 정말 쉬웠다 보너스를 하게 된다면 sigaction과 3 way handshake를 해야한다는데, 이론으로 들었던 3 way handshake를 직접 구현하지 못한게 아쉽다 나중에 블랙홀의 여유가 되었을 때 minitalk 만큼은 보너스를 다시 해보고 싶다는 생각이 들었다 minitalk을 하면서 든 생각은 운영체제 공부 좀 열심..
[42 Seoul] so_long
2022. 11. 17. 18:05
42 Seoul
설명에 들어가기 전 후기 본과정에 오고나서 처음으로 평가를 해본 과제여서 그런지 여러 그래픽 과제 중에서도 so long을 제일 하고 싶었다. 특히 원하는 캐릭터와 이미지를 가지고 간단한 게임을 만든다는 것이 흥미로웠다. 이 프로그램을 만들기 위해서 어떠한 과정을 거치고, 어떤 코드가 필요한 지 머리 속에 착착 그려져서 구현하는데는 어렵지 않았다. 다만 맵을 저장하는 과정에 있어 연결리스트로 맵을 저장하였는데, 연결리스트를 잘 다루지 못하여서 꼬박 하루가 넘게 연결리스트 저장에만 시간을 쏟았다. 이차원 배열을 가지고 구현했다는 동료의 말을 듣고, 이차원 배열로 갈아탈까 생각했지만 이미 연결리스트를 통해 구현한 터라 계속 진행하고 싶었다. 하지만 저장된 맵의 상하좌우를 다 검사하는 과정에서 연결리스트가 이..
[42 Seoul] get_next_line
2022. 9. 22. 14:29
42 Seoul
설명에 들어가기 전 후기 프로젝트 이해부터 굉장히 오래 걸린 과제였다. BUFFER_SIZE만큼 글자를 읽는데, 막상 반환하라는 것은 \n이 나올때까지의 문자열을 반환하라니.... 프로젝트 이해는 오래 걸렸지만 방식을 이해하고 나니 구현은 오래 걸리지 않았다. 다양하게 fd를 다루는 bonus를 하고 싶어 연결리스트로 구현하려 했으나, 연결리스트로 구현하는 것이 미숙하여 며칠을 고민한 끝에 포기하고 배열로 구현한 점이 가장 아쉬움이 남는다. 새롭게 gcc -D 플래그를 알 수 있었고, free를 하며 댕글링 포인터, 그리고 메모리 누수 체크 방법 등을 알 수 있던 과제였다. 앞으로 메모리 누수를 신경쓰며 과제를 해나갈텐데, leak를 본격적으로 해결하는 첫 단계 였다고 생각한다. 평가하는 도중 나의 코드..
[42 Seoul] Born2beroot - Bonus
2022. 9. 6. 15:17
42 Seoul
lighttpd, MariaDB, PHP를 사용해 WordPress 구축하기 Lighttpd Lighttpd이란? youtube, wikipedia 등이 사용하는 오픈소스 경량 웹서버 Lighttpd 설치 및 적용 #lighttpd 설치 sudo apt-get install lighttpd #서버 중지, 시작, 부팅시 활성화 명령어 sudo systemctl stop lighttpd.service sudo systemctl start lighttpd.service sudo systemctl enable lighttpd.service php: 대표적인 서버 측에서 실행되는 서버 사이드 스크립트 언어 #php 설치 sudo apt-get install php7.4-fpm #php.ini 파일 수정 vi /e..