반응형

공부 624

💡 개발자에게 물어봤습니다 : 함께 일하고 싶은 개발자

💡 개발자에게 물어봤습니다 : 함께 일하고 싶은 개발자 : 이번 시리즈에서는 다양한 직무와 협업하는 IT 기업 직장인 중에서 개발자가 함께 일하고 싶어 하는 동료에 대해 다루고자 합니다. 오늘은 그중에서 개발자가 생각하는 ‘함께 일하고 싶은 개발자'에 대해 살펴볼 예정입니다. 여러 의견을 듣기 위해 2년 차 개발자부터 10년 차 개발자까지 총 8명의 개발자와 인터뷰를 진행해 보았습니다. 과연 개발자는 어떤 개발자와 함께 일하고 싶어 할까요? 출처 : 커리어리 'Sohee'님 https://careerly.co.kr/comments/67778?utm_campaign=user-share Sohee / 💡개발자에게 물어봤습니다: ① 함께 일하고 싶은 개발... | 커리어리 💡개발자에게 물어봤습니다: ① 함께 ..

공부/자기계발 2023.01.08

스마트 포인터와 스마트 포인터의 종류

스마트 포인터란 포인터처럼 작동하지만 사용하기 쉽고 오류가 발생하기 쉬운 추가 기능이 있는 객체 유형입니다. 스마트 포인터는 일반적으로 동적으로 할당된 개체의 수명을 관리하는 데 사용되며, 메모리 누수 및 댕글링 포인터와 같은 일반적인 문제를 방지하는 데 도움이 될 수 있습니다. 스마트 포인터에는 여러 유형의 스마트 포인터가 있으며 각각 고유한 동작과 기능이 있습니다. 예를 들어 unique_ptr은 자신이 가리키는 개체를 소유하는 스마트 포인터 유형이며, unique_ptr이 범위를 벗어날 때 개체가 자동으로 삭제되도록 합니다. 다른 예로는 shared_ptr은 여러 포인터가 동일한 개체를 가리킬 수 있도록 하는 스마트 포인터 유형이며 개체를 가리키는 모든 shared_ptr이 범위를 벗어날 때만 개체..

공부/C++ 2023.01.06

구글 엔지니어는 이렇게 일한다 - 구글러가 전하는 문화, 프로세스, 도구

구글 엔지니어는 이렇게 일한다 - 구글러가 전하는 문화, 프로세스, 도구 올해 번역서가 출간된 "구글 엔지니어는 이렇게 일한다"의 후기입니다. 이렇게 좋은 책 정말 오랜만이다 싶을 정도로 계속 밑줄을 긋고 공감하면서 읽었습니다. > 소프트웨어 엔지니어링은 단순히 코드를 작성하는 행위에 더하여, 시간의 흐름에 발맞춰 한 조직이 그 코드를 구축하고 유지보수하는 데 이용하는 모든 도구와 프로세스를 포괄합니다. 이것이 우리가 제안하는 소프트웨어 엔지니어링의 개념입니다. 소프트웨어 엔지니어링이 프로그래밍과 어떻게 다른지 설명하면서 구글에서 소프트웨어 엔지니어링을 위해 노력했던 결과들이 나와있습니다. 대부분 멋지지만 그 결과만 풀어낸 것이 아니라 고민하고 실수했던 내용들이 다 담겨있어서 이 기록들을 어떻게 정리했을..

공부/자기계발 2023.01.06

오버로딩(Overloading)과 오버라이딩(Overriding)의 개념과 차이

객체 지향 프로그래밍에서 오버로딩과 오버라이딩은 클래스가 이름은 같지만 기능이 다른 여러 메서드를 가질 수 있도록 하는 기술입니다. 오버로딩(Overloading)은 클래스가 이름은 같지만 함수의 기능이 다른 메서드를 만들 수 있는 기능입니다. 메서드 오버로딩(Overloading)을 사용하면 클래스에 이름은 같지만 인수 수나 인수 유형이 다른 여러 메서드가 있을 수 있습니다. 예를 들어, 클래스에는 이름이 'calculate'인 두 개의 메서드가 있을 수 있습니다. 하나는 두 개의 정수를 인수로 사용하여 합계를 반환하고 다른 하나는 세 개의 정수를 인수로 사용하여 평균을 반환합니다. 이 두개의 'calculate' 메서드는 이름은 같지만 서명이 다르므로 오버로드된 것으로 간주됩니다. 오버라이딩(Over..

공부/OOP 2022.12.29

[개발자의 공부법] 뭘 공부해야 되지?

[개발자의 공부법] 뭘 공부해야 되지? 뒤처지기는 무섭고 일단 Coursera와 Udemy에서 핫한 온라인 코스가 30% 세일해서 등록해야 할 것 같아서 합니다. 막상 등록하니까 흥미는 없고 도대체 어디에 써먹을 대도 없고 안 써먹어서 까먹고... 악순환의 반복이 시작됩니다. 학생 시절에는 공부할 게 산더미 같던데 막상 개발자가 되니 도대체 뭘 공부해야 할지 모르겠더라고요. 주니어 시절 했던 아주 나쁜 이 공부법을 스스로 고치면서 나름 도움 되었던 "개발자의 공부법"에 대해 이야기해봅니다. 1️⃣ 시스템 디자인 공부 시스템 디자인 공부는 어느 개발 직종에 있더라도 필수이다. 알고리즘과 달리 대학 전공 수업에서 배울 수 없고, 배운다고 해도 학생 시절에는 제대로 써먹을 곳이 없다. 따라서 업무와 경력을 통..

공부/자기계발 2022.12.29

Static과 extern의 개념 및 차이

C언어 및 C++ 언어에서 static 및 extern 키워드는 변수와 함수의 가시성과 종료 시점을 수정하는 데 사용됩니다. 일반적으로 static 변수와 함수는 사용할 수 있는 범위가 제한되어 있습니다. 즉, 정의된 파일 내에서만 해당 변수와 함수를 볼 수 있고 액세스할 수 있습니다.static 변수는 프로그램의 데이터 세그먼트에도 저장되며 프로그램이 시작될 때 0으로 초기화됩니다. static 함수 또한 데이터 세그먼트에 저장되며 다른 파일에는 표시되지 않습니다. 반면에 extern 변수와 함수는 전역 범위를 갖습니다. 즉, 프로그램의 모든 파일에서 볼 수 있고 액세스할 수 있습니다. extern 변수는 데이터 세그먼트에 저장되며 static 변수와 마찬가지로 프로그램이 시작될 때 0으로 초기화됩니다..

공부/C++ 2022.12.29

자기 개발에 도움되는 개발 도서 효율적으로 읽는 법

자기 개발에 도움되는 개발 도서 효율적으로 읽는 법 개발 도서는 책 두께에서 일단 현타 오고, 책 읽으면서 두 번째 현타 오고, 책을 다 읽고 나면 "내가 방금 뭘 읽은 거지...?"라는 생각이 많이 들더라고요. 대학 전공 시절에는 이것 때문에 책을 5,6번 반복해서 읽었습니다. 직장인이 되고 나니 시험 보는 것도 아닌데 굳이 5,6번 반복해서 읽고 싶지 않고 그럴 시간도 없습니다. 별거 없지만 적어도 목표인 한,두 달에 최소 개발 도서 한 권씩 읽으면서 나름대로 습득한 효율적으로 확실하게 읽는 법 공유합니다. 1️⃣ 종이 책보다는 전자책으로 연초에는 나름 세웠던 새해 계획을 시작한다고 열정이 넘쳐서 종이책을 구매한 후 한 줄 한 줄 꼼꼼히 읽으면서 덤으로 노트까지 받아 적었다. 이렇게 독서하니까 한 장..

공부/자기계발 2022.12.29

정렬 알고리즘 중 가장 빠른 알고리즘은 무엇일까?

가장 빠른 정렬 알고리즘은 해결하려는 문제의 특정 상황에 따라 다르지만, 아마 퀵 정렬이 일반적으로 가장 빠릅니다. 세상에는 정말 다양한 정렬 알고리즘이 있으며 각각 고유한 강점과 약점이 있습니다. 그렇지만 가장 일반적으로 사용되는 정렬 알고리즘은 다음과 같습니다. 퀵 정렬 : 퀵 정렬은 실제로 널리 사용되는 빠르고 효율적인 정렬 알고리즘입니다. 평균 케이스 시간 복잡도는 O(n log n)이고 최악의 경우 시간 복잡도는 O(n^2)입니다. 퀵 정렬은 분할 정복을 사용하여 요소를 제자리에서 정렬하기 때문에 효율적입니다. 즉, 정렬을 수행하는 데 추가 메모리가 필요하지 않습니다. 병합 정렬 : 병합 정렬은 시간 복잡도가 O(n log n)인 또 다른 효율적인 정렬 알고리즘입니다. 입력을 더 작은 청크로 나..

공부/기타 2022.12.29

온라인 게임에서 유저들을 관리하기 위해 효율적인 정렬 알고리즘과 그 이유는?

2021년 11월에는 삽입 정렬이 가장 좋다고 생각했다. 왜냐하면 예를 들어 설명해보겠다. 유저들은 사이트 혹은 게임에에 회원 가입을 할 때 오프라인 은행처럼 번호표를 뽑아 정해진 순서에 따라 가입하는 것이 아니다. 각자 스마트폰 혹은 피시를 이용해 사이트 혹은 게임에 접속하여 가입하는데, 이 때 사이트던, 게임이던 회원 가입한 사용자들에게 사용자번호를 부여하여 관리하면 1번부터 차례대로 사용자 수에 따라 관리할 수 있기 때문에 편리하기 때문이다. 혹여나 만약 N번째 유저가 탈퇴를 한다고 해도 그 사용자 번호를 부여한 자리에 지금 막 가입한 사람을 다시 집어넣기만 하면 문제도 없다. 그렇지만 22년 12월 현재 글을 작성하는 기준으로는 가장 좋은건 해시테이블과 DBMS이지 않을까 싶다. 위에 서술한 예시..

공부/기타 2022.12.26

<🤓 코딩 테스트에 완벽하게 대비하기 위해 해야 할 6가지>

코딩 테스트 어디서부터 준비해야 할지 막막하신가요? 코딩 테스트에 완벽하게 대비하기 위해 해야 할 6가지를 소개드립니다! 💡 Part 1: 문제 풀기 전 해야 할 세 가지 코딩 테스트에 대비하기 위해서는 문제만 많이 풀어보면 된다고 생각하시는 분들이 많습니다. 그런데 어느 문제를, 무슨 프로그래밍 언어를 사용해서, 어떤 순서로 풀어야 할까요? 본격적으로 문제를 풀기 전에 아래 세 가지를 정하고 시작하시길 권장드립니다. 1️⃣ 프로그래밍 언어 선택하기 면접을 볼 프로그래밍 언어는 본인에게 가장 편하고 익숙한 언어로 선택하시는 게 좋습니다. 우리가 영어를 쓸 때보다 한국어를 쓸 때 더 수월하게 말이 나오듯이, 모국어처럼 편하게 느껴지는 프로그래밍 언어를 사용해야 긴장되는 면접 환경에서도 버벅거리지 않고 코드..

공부/자기계발 2022.12.26

상속할 때 public 상속과 protected 상속의 차이

객체 지향 프로그래밍에서 상속을 통해 클래스는 부모(상위) 클래스와 자식(하위) 클래스로 정의될 수 있습니다. 자식(하위) 클래스는 부모(상위) 클래스에서 속성과 동작을 상속하며 필요에 따라 이러한 속성과 동작을 재정의하거나 확장할 수 있습니다. 하위(자식) 클래스를 정의할 때 사용할 수 있는 두 가지 접근 제어 지시자가 있습니다(public 및 protected) 이러한 접근 제어 지시자는 부모(상위) 클래스의 상속된 멤버의 가시성과 액세스 가능성을 제어합니다. 다음은 공개(public) 상속과 보호(protected) 상속의 차이점입니다. 공개(public) 상속: 하위(자식) 클래스가 상위(부모) 클래스에서 공개적으로 상속되면 상위(부모) 클래스의 public 및 protected 멤버가 하위 클래..

공부/기타 2022.12.26

프로그래머의 두통을 유발하는 7가지

프로그래머의 두통을 유발하는 7가지 > 링크한 아티클은 제목만 참고하고 저의 의견을 덧붙였습니다. 1. 기술을 조금 알고 있어서 문제인 상사 아예 모르면 거의 간섭을 하지않지만, 조금알면 자기가 아는 것과 다르다고 훼방을 놓는 사람을 말합니다. 2. 코드 작성 다했는데, 요구사항이 변경되는 경우 이런 경우는 다들 있으실겁니다. 애자일을 사용하는 경우에도 사실 빈번합니다. 3. 태스크 시간 예측하기 소프트웨어를 작성하는 시간을 예측하는 것은 어렵습니다. 주니어건 시니어건 상관없이 말이죠. 4. 클라이언트에게 데모 보여주기 잘 동작하던 것들이 꼭 데모만 하면 크래시가 나는 경우가 여럿있습니다. 5. 문서작성 업무가 매우 많은 상황에서 코드 작성을 다하고 조금 쉬고 다음일을 해야하는데 추가적으로 문서도 작성해..

공부/자기계발 2022.12.26

컴파일 시 작동 순서는 어떻게 되는가?

컴파일 프로세스란? 컴파일러가 사용자가 프로그래밍 언어로 작성한 소스 코드를 컴퓨터에서 실행할 수 있는 기계 코드로 변환하는 일련의 과정입니다. 기계 코드는 일반적으로 실행 파일을 생성하기 위해 다른 코드와 연결될 수 있는 실행 파일 또는 라이브러리의 형태입니다. 다음은 일반적인 컴파일 프로세스 단계입니다. 이는 기본적인 사항이며, 보다 세부 사항은 프로그래밍 언어, 대상 플랫폼 및 사용 중인 컴파일러에 따라 다를 수 있습니다. '전처리 - 어휘 분석 - 구문 분석 - 의미론적 분석 - 중간 코드 생성 - 최적화 - 코드 생성 - 연결' 전처리(Preprocessing) : 소스 코드 내부에 있는 매크로(#) 명령어를 확인하고 해당 전처리기 지시문에 지정된 작업들을 수행합니다. 어휘 분석(Lexical ..

공부/CS 2022.12.26

✅ '어떻게든 일을 해내는' 개발자가 되는 법

최근에 만난 한 개발자 분에게 인상적인 말을 들었습니다. “주니어 개발자라면 일단 주어진 일을 어떻게든 해내야 한다. 그 일을 더 빨리, 더 잘 해낼수록 시니어가 되는 것이다. 주니어든 시니어든, ‘끝까지 해내는 것'이 기본이다.” 이 말을 듣고 뭔가 심장이 쿵, 머리가 번쩍! 하는 느낌이었어요. 꼭 개발자에게만 해당되는 이야기는 아니고, 일하는 사람 모두의 기본인 것 같다는 생각도 들었고요. 퍼블리 멤버십에는 아직 개발 주제의 콘텐츠가 많지 않은데요. 그럼에도, 퍼블리를 꾸준히 구독해주시는 개발자 분들이 있습니다. 아마 기술 외적인 측면에서도 일을 제대로 잘 해내고 싶은 분들이 퍼블리 콘텐츠에서 도움을 받고 계신 게 아닐까 싶어요. 그래서 궁금해졌습니다. 개발자 분들이 가장 많이 읽은 퍼블리 아티클은 ..

공부/자기계발 2022.12.26

Dynamic_cast 내부동작은 어떻게 되는가?

Dynamic_cast 글을 읽기 전 가상 함수, 가상 함수 테이블 게시물을 읽으면 더욱 이해하기 편합니다. https://shung2.tistory.com/584 가상 함수와 가상 함수 테이블 개념 및 차이 객체 지향 프로그래밍에서 가상 함수(Virtual Function)는 파생된 클래스에서 재정의할 수 있는 멤버 함수입니다. 기본 클래스와 동일한 구문을 사용하고, 호출되는 동안 파생된 클래스에서 변경되 shung2.tistory.com C++에서 dynamic_cast 연산자는 런타임에 캐스트를 수행하는 데 사용됩니다. 포인터나 참조를 한 유형에서 다른 유형으로 변환하는 데 사용되며, 여기서 대상 유형은 다형성 클래스(최소한 하나의 가상 함수(Virtual Function)가 있는 클래스)입니다. ..

공부/C++ 2022.12.23

<👩🏻‍💻 개발자 면접 유형 총정리>

개발자의 면접은 철저한 준비가 필요한 영역입니다. 1시간 안에 실력을 증명해야 하는 면접은 평상시 업무 방식과는 다를 수밖에 없습니다. 따라서 아무리 평소 실력이 뛰어난 개발자라도 기술 면접에 대비하기 위해서는 별도의 준비가 필요합니다. 준비를 하기에 앞서서 어떤 방식으로 면접이 진행되는지 알아야겠죠. 개발자에게 출제되는 면접 유형 6가지를 공유드립니다! 1️⃣ 라이브 코딩 테스트 ‘라이브’ 코딩이라는 이름답게 면접관과 영상 통화를 하며 실시간으로 면접관이 내는 문제를 코드로 구현하는 방식입니다. 45분~1시간 정도의 시간제한이 있지만, 보통 자기소개를 하거나 직무에 관한 질문을 하는 데 5~10분 정도의 시간이 소요되기 때문에 그 점을 감안하고 문제를 푸는 것이 좋습니다. 이 시간에는 주로 단시간 안에..

공부/자기계발 2022.12.23

업 캐스팅과 다운 캐스팅의 개념 및 차이

업 캐스팅은 이전에 설명한 가상 함수, 가상 함수 테이블이랑 연관되어 있습니다. 업 캐스팅은 파생된 클래스 개체를 기본 클래스 개체로 변환하는 프로세스입니다. 파생 클래스가 기본 클래스의 보다 특수화된 버전으로 간주되고 변환이 개체를 상속 계층 구조에서 "위"로 이동하기 때문에 이를 "업 캐스팅"이라고 합니다. 기본 클래스(Animal) 참고하는 방향 파생 클래스(Cat) ↑ 업 캐스팅은 일반적으로 객체 지향 프로그래밍의 코드 재사용 및 다형성 기능을 활용하는 데 사용됩니다. 파생 클래스 개체를 기본 클래스 개체로 업 캐스팅하면 기본 클래스 및 파생된 다른 기본 클래스의 멤버와 함수에 액세스할 수 있습니다. 이를 통해 동일한 기본 클래스에서 파생되는 한 다른 유형의 개체에서 작동할 수 있는 코드를 작성할..

공부/기타 2022.12.22

<개발자는 보통 말이 안통한다?>

가끔 일을 하다보면 "상헌님은 개발자인데 말이 잘 통하는 것 같아요" 라는 말을 듣습니다. 칭찬은 아주 감사하지만 사실 "개발자는 보통 말이 안통한다"라는 기저가 깔려있는 말입니다. 주위에 보면 그래도 일은 어떻게든 해내야 하기에, 좀 더 효율적인 커뮤니케이션을 위해 개발용어를 익히거나 심지어 개발을 배워보는 타 직군분들도 계십니다. 개발자는 대체 왜 보통 말이 안통할까요? 그 이유로 개발자나 공대생에 대한 스테레오타입이 언급될 때가 많은데, 저는 그것보다는 "나만 가지고 있는 지식과 컨텍스트를 바탕으로 설명" 해야하는 빈도가 잦고, 그것은 사람에 관계없이 원래 어렵기 때문이라고 생각합니다. 이를테면 기획자도 본인의 머리속에만 완성된 논리나 철학을 바탕으로 다른 직군을 설득해야 할 때가 있고 당연히 어려..

공부/자기계발 2022.12.22

가상 함수(Virtual Function)와 가상 함수 테이블(Virtual Function Table) 개념 및 차이

객체 지향 프로그래밍에서 가상 함수(Virtual Function)는 파생된 클래스에서 재정의할 수 있는 멤버 함수입니다. 기본 클래스와 동일한 구문을 사용하고, 호출되는 동안 파생된 클래스에서 변경되거나 "재정의"될 수 있기 때문에 "가상"이라고 합니다. 가상 함수(Virtual Function)는 일반적으로 해당 클래스의 요구 사항에 맞게 파생 클래스에서 수정할 수 있는 함수의 기본 구현을 제공하는 데 사용됩니다. 이렇게 하면 기본 클래스가 함수의 기본적인 구현을 제공할 수 있고 파생 클래스가 필요한 경우 더 특수화된 동작으로 해당 구현을 재정의할 수 있으므로 유연성과 코드 재사용이 가능합니다. 아래 예제는 C++에서 가상 함수의 예제입니다. class Animal { public: virtual v..

공부/C++ 2022.12.22

같이 일하고 싶어지는 동료 개발자의 말말말

얼마 전 2분기 동료평가를 했습니다. 평가를 하다보니, 극단적인 상황에서도 힘이 되어주던 동료들의 말 한마디가 잊혀지지 않고 계속 생각이 나더라구요. 그 말들을 소개하려 합니다. 1. 버그가 슬픈 일인가요? 테스트 버전을 출시하고 테스트를 막 시작했을 때였어요. 저희 프로덕트는 숫자가 딱 맞아야하는데 숫자가 하나도 맞지 않았어요. 아무리 테스트 버전이라지만 맞는게 거의 없다시피하다보니 저도 모르게 너무 슬프네요 라는 말이 나와버렸어요. 그때 동료 한 분이 ‘이게 슬픈일인가요?’ 라고 물어보시는데 그때 정신이 확 들었어요. 수정할 부분을 발견했다면, 원인을 찾고 고치면 되는거지 전혀 슬퍼할 일이 아니었던 거였죠. 더군다나 운영 환경도 아니고 테스트 환경이었는데 말이죠. 그렇게 마음을 고쳐 먹으니 훨씬 즐거..

공부/자기계발 2022.12.22
반응형