CS15 [객사오] 코드로 알아보는 객체의 "역할, 책임, 협력" 📚객체지향의 사실과 오해 객체지향 공부를 하기 위해 를 읽기 시작했다.책의 내용을 무작정 정리하기 보다는, 내가 이 책을 읽고 더 공부하고 싶은 부분을 직접 딥다이브 해 볼 생각이다. 이번에 읽은 챕터는 [01. 협력하는 객체들의 공동체]로 객체지향의 본질에 대해 파고든다. 객체지향적으로 잘 짠 코드는 무엇일까?객체는 충분히 '협력적'이어야 한다. 다른 객체의 요청에 충실히 응답하고, 다른 객체에게 적극적으로 도움을 요청할 수 있어야 한다는 것이다. 객체가 충분히 '자율적'이어야 한다. 본인 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로 통제하여 절제하는 것을 의미한다. '객체의 자율성'에 대해 보충 설명을 하자면, 객체의 내부와 외부를 명확하게 구분하는 것이다.객체의 사적인 부분은 객체 스스로 .. 2025. 3. 16. [백준/1764/Kotlin] 듣보잡 문제문제를 풀 때 시간 복잡도를 생각하고 풀자는 의미에서 이번 포스팅을 하게 되었다. 이 문제는 "듣도 못한 사람"의 리스트와 "보도 못한 사람"의 리스트 중 중복되는 데이터를 사전 순으로 출력하는 문제이다. 트러블 슈팅1) 시간 초과처음에 코드를 작성했을 때 출력은 제대로 되었는데 막상 백준에서 돌려보니 시간 초과 문제가 발생하였다.내가 작성한 코드의 흐름은 아래와 같다.val neverHeard : MutableSet = mutableSetOf()val result : MutableSet = mutableSetOf()repeat(n) { neverHeard.add(bufferedReader.readLine())}repeat(m) { val neverSeen : String = buffere.. 2025. 3. 16. [백준/11399/Kotlin] ATM 문제이번에 푼 문제는 누적된 합의 최솟값을 구하는 문제이다.각 개인에게 걸린 값의 합이 최소가 되게 하려면 큰 값은 가장 나중에 더해줘야 되기 때문에 오름차순 정렬을 해주고자 했다.이번에는 내가 놓쳤던 부분에 대해서 정리하고자 한다. 트러블 슈팅1) 띄어쓰기 별로 읽기처음에 BufferedReader.readLine()은 라인별로 읽는다고 생각해서 나는 띄어쓰기 별로 읽어야 하므로 BufferedReader.read()를 사용했었다. 그러나, read() 함수를 사용하면 한 글자(문자)를 읽어 해당 문자의 ASCII 값을 반환한다고 한다. 그래서 readLine().toInt()로 하되, 공백(" ")을 기준으로 분리(split)를 하고, 이를 다시 list로 반환하게 해줬다.val numberList .. 2025. 3. 6. [백준/2751/Kotlin] 수 정렬하기 2 코딩테스트 공부를 다시 시작하려고 한다.어떤 언어로 공부해야 되나 고민이 됐는데 아무래도 Kotlin으로 손이 가서 쉬운 문제부터 차근차근 시작하고자 했다. 문제 문제는 꽤나 쉬운 편에 속한다.이번에는 코틀린의 간단한 문법들을 알아봐서 나중에 시간을 줄여보고자 한다.문제 풀이1) 입출력 흐름표준 입력(System.in)으로부터 데이터를 읽어오기 위해 BufferedReader를 생성한다.표준 출력(System.out)으로 결과를 내보내기 위해 bufferedWriter를 생성한다.그리고 여러 개의 문자열을 빨리 출력하기 위해 StringBuilder를 사용한다. (append를 이용하면 효율적이기 때문)StringBuilder에 모아둔 내용을 한 번에 bufferedWriter로 써서 출력한다.입출력에 .. 2025. 3. 4. [CS] 기초지식 총 정리 (네트워크, 운영체제, 데이터베이스, 자료구조) 누군가 나에게 개발자 이상형이 있냐고 물었을 때 망설임 없이 'CS 지식을 가지고 있는 사람'이라고 답했다.내가 되고 싶은 이상향이기도 하다. 그래서 이번에는 3년 동안 학교에서 배웠던 CS 지식을 복습겸 스스로 정리해보고 싶어서 글을 쓰게 되었다. (중간중간 내가 재학 당시 공부했던 내용을 추가로 첨부했다.)앞으로 각 주제마다 심화로 더 공부할 예정이다.🔥 I. 네트워크네트워크란, 컴퓨터들이 통신망을 통해 서로 그물처럼 연결돼 있는 것을 의미한다. 📍IP 주소첫 번째로 알아볼 개념은 IP 주소이다.IP 주소는 네트워크에 연결된 각 컴퓨터를 구분하는 유일한 주소를 의미한다.이는 클라이언트가 서버에게 요청을 하고 응답을 받을 때 서로의 위치를 알려주는 역할을 하는 것이다. IP 주소는 4byte로 이루.. 2025. 2. 7. [구글 엔지니어는 이렇게 일한다] 소프트웨어 엔지니어링이란 이제 나도 다수의 프로젝트 경험이 있는 개발자가 되었다. 협업을 하면서 겪은 시행착오들도 많았다.유지보수성 있는 코드를 짜는 법, 내 결정을 다른 파트에게 전달하는 법, 파트 내에서의 소통 법 등등 .. 그래서 거대한 소프트웨어 엔지니어링 기업인 '구글'은 어떤 방식으로 협업을 하기에 이렇게 오랫동안 살아남을 수 있었을지 궁금해졌다.이 책을 통해 현업에서 쓰이는 방식을 흡수하여 나도 한 단계 더 성장하고자 했다. 독서를 하면서 기록하고 싶은 부분을 기록할 예정이다. Part II 문화일찍 실패하고, 빨리 실패하고, 자주 실패하라 (76p) 숨기는 것은 해롭다. 프로젝트가 '초기' 단계라면 불안감에 숨기고 싶어하는 것은 인간의 본성이다. 그러나 위대한 아이디어를 세상으로부터 숨기고 완벽히 다듬어질 때가지 .. 2025. 2. 5. [Cloud Native] Ch2 클라우드 네이티브 패턴 및 기술 📚 을 읽고 그 내용을 정리하였습니다 ☑️ Cloud Native앞으로 서로 다른 클라우드 네이티브 애플리케이션을 만들 예정이다.그래서 Cloud-Native-Spring이라는 레포지토리를 통해 코드를 저장하고자 한다.https://github.com/leeeyubin/Cloud-Native-Spring 파일을 생성했으면 터미널 창을 열어 그래들 test 작업을 실행한다../gradlew test 애플리케이션 구현이 끝났으므로 이제 실행할 수 있다.이제 스프링 부트의 그래들 플러그인이 제공하는 bootRun을 사용해보자../gradlew bootRun 위의 명령을 통해 애플리케이션이 즉시 실행되고 요청을 수락할 준비가 되었다. 어떤 클라우드 인프라로도 배포할 수 있으려면 먼저 컨테이너화해야 한다. .. 2024. 6. 30. [Cloud Native] Ch1 클라우드 네이티브 소개 📚 을 읽고 그 내용을 정리하였습니다 ☑️ Cloud Native 클라우드 네이티브 애플리케이션: 클라우드에서 실행되면서 변화에 탄력적으로 대응하고 고도로 분산되어 있는 시스템을 의미한다. 애플리케이션이 클라우드를 위해 특별히 설계되는 3가지 P가 있다.플랫폼: 클라우드 네이티브 애플리케이션은 클라우드 같은 동적 분산 환경을 기반으로 하는 플랫폼에서 실행된다.속성: 클라우드 네이티브 애플리케이션은 확장 가능하고 느슨하게 결합되며 복원력이 뛰어나고 관리가 용이하며 관찰 가능하도록 설계된다.실행: 견고한 자동화를 통해 빈번하고 예측 가능한 방식으로 시스템을 변경하는 것이 여기에 포함되는데 자동화, 지속적 전달, 데브옵스 등이 있다. 📖 클라우드 네이티브 애플리케이션을 중점적으로 보기 전에 이것.. 2024. 6. 16. [BOJ/1929/C++] 소수 구하기 소수 구하는 문제라 쉬울 거라고 생각하고 자신있게 문제를 풀었다..그래서 아래와 같이 구했고, 답도 제대로 나왔다.#include#includeusing namespace std;int main(void){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int M, N; vector vector; cin >> M >> N; for (int i = M; i 그러나 오늘도 어김없이 나오는 시간초과,, 그래서 찾아보니 에라토스테네스의 체 라는 방법이 있었다.이게 뭐냐하면 2 이상의 구하고자 하는 범위 내에 존재하는 자연수를 모두 나열한 뒤, 2 이상 배수들을 차례로 지워나가는 방법이라고 한다! 에라토스테네스의 체의 시간복잡도는 O(N log(log N))으.. 2024. 2. 4. [BOJ/9205/C++] 맥주 마시면서 걸어가기 오랜만에 골드 문제를 풀어보았다.그만큼 시간 소요도 오래 되었고 BFS를 이용해서 푸는 것은 알았지만, 적절하게 활용하는 것이 어려웠다. 거의 다 왔다고 생각하며 풀어보려고 했지만 계속 나는 런타임 에러,,코드 자체에 문제가 있었다기 보다 코드의 흐름이 맞지 않았던 것 같다. 그래서 처음부터 다시 문제를 풀었다.우선 이 문제에서 구조체를 사용했다. 내가 Java로 코테를 준비할 때도 BFS 문제는 생성자를 이용해서 풀었다.C++도 이런 성질을 이용해서 푸는 것이 용이했다. main() 함수를 먼저 작성했기 때문에 main() 함수 먼저 살펴보자int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); int t; cin.. 2024. 2. 1. [테크 커리어] 우리는 모두 기여할 수 있다 영향력 있는 개발자로서 성장하고 싶어 개발 관련 도서를 찾다가 를 발견했다.이 책의 주 타켓층은 이제 막 개발자가 된 신입 개발자이다. 나는 아직 개발자라고 칭하기에는 많이 부족하지만 먼저 성공한 이들의 이야기를 미리 엿볼 수 있다면 좋은 경험이 될 것 같아 읽게 되었다. 내가 생각하는 성공은 간단하다. 내가 원하는 인생을 사는 데 필요한 모든 것을 가리킨다. (29p) 성공하고 싶었다. 그래서 성공하기 위해 열심히 달려왔었다. 그러나 나는 정작 성공이란 무엇인지 제대로 생각해보지 못했던 것 같다. 저자는 말한다. 성공이란 자신이 원하는 인생을 사는 것이라고 말이다. 내가 꿈꾸고 정의한 삶을 살기. 성공이란 생각보다 간단하다. 나만의 인생 정의를 적어나가며 우리가 원하는 인생을 실천해나가자. 소신 있게.. 2024. 1. 30. [BOJ/1181/C++] 단어 정렬 이 문제가 비교적 쉬울지라도 나는 문자열이 나오는 문제를 어려워했기 때문에 이번에는 기록해두고 싶어서 적어본다. 우선 문자열을 입력받고 그것을 길이 순으로 지정하는 방법에 대해 고민해보았다.이때 유용하게 사용할 수 있는 방법이 있는데, C++의 헤더에서 제공해주는 sort() 함수이다. sort() 함수는 정렬할 범위를 알고, 그 범위 내의 각 요소 쌍에 대한 함수를 호출할 수있다. 즉, 아래의 코드에서 보았을 때 str[] 배열에 있는 각 요소에 대해 compare() 함수의 입력으로 사용하고 있는 것을 알 수 있다.이 비교 결과에 따라 요소의 위치를 재배치한다.#include#include#define MAX 20000using namespace std;bool compare(string x, st.. 2024. 1. 26. 이전 1 2 다음