11월 11일날 쓰려고 했던 TIL을 지금 쓰게 됐다.
사실 이날은 몸이 아파서 별로 공부를 못헀다,
잠을 별로 못자기도 하고.. 좀 현타가 오는 날이었다.
몸 컨디션을 잘 조절해야겠다는 생각이 들었다.
============================
[ 11월 11일, 빼뺴로 데이 & 팀을 위해 필요한 능력들 ]
개발자도 결국 사람이다.
좋은 개발자는 결국 좋은 사람이어야 한다.
혼자만 일하는 시대는 지났고, 모든 개발은 팀 단위로 이루어지기 때문이다.
어떤 회사의 모토중에 ' 같이 밥먹고 싶은 사람이 되자 ' 라는 말이 있다고 한다.
어디에서든 그것은 마찬가지 아닐까?
어떤 기술적인 스킬이 아주 뛰어나더라도,
주변 사람들을 무시하거나 혼자 잘난 맛에 사는 사람이라면, 같이 일하고 싶은 사람은 없을 것이다.
남을 무시하거나, 미워하면서 분쟁을 만드는 사람, 소통하지 않고, 신의가 없는 사람.
이런 인간적으로 마이너스인 부분을 극복해내는 것이, 코드를 더 잘 짜는 것보다 장기적으로는 우선순위라 생각한다.
하지만 여기서 간과해서는 안될 부분이 있다.
'마이너스'만 다 없애면, 0점이라는 것인데. 그것만으로는 부족하다.
관계에 있어서 "플러스"가 되는 언행을 익혀야한다, 이걸 방법으로 하면 가식이니.
정말 내 스스로가 그런 사람이 되도록 가꿔나가야 한다.
예를 들어, 빼빼로 데이라고 사람들을 챙겨줘야해! 라는 기준으로 하는 언행은,
결국 내가 가진 모습이 아니라, "챙겨주는 사람"을 매력이라 생각해서 나온 나의 언행일 뿐.
시간이 지나면 지날수록, 그 원동력으로 인한 언행이 안 나오기에
( 챙겨주는 행위는 말 그대로, 그 사람을 정말 좋아할 때 나오는 언행의 일부이기에
그 사람을 좋아하지 않으면서 챙겨주는 언행을 해봤자. 다른 언행에서 티가 난다. )
결국 사람을 끌어당길 수가 없다.
"마음을 주는 사람" 이 되는 것이 매우 중요하다 생각한다.
==================
오늘 공부한 내용은
Array 와 LinkedList 의 차이이다.
자료구조를 배우는 이유는, 결국 연장을 다루는 법을 알기 위함이다.
못을 박는 용도로 도구들이 필요할 때, 망치를 찾는 것처럼.
어떤 도메인에서 문제를 해결할 때, 그에 맞는 솔루션을 조사하고 적용하는 것처럼.
개발자는, 프로그램을 설계할 때, 특정 기능을 수행하기 위한 로직.
그리고 그 로직을 위해 데이터가 담길 때, 어떤 구조를 띄고 있어야 실행시간 or 자원이 효율적으로 관리될 수 있을지 고민해야한다.
그렇기에, 이미 사람들이 만들어놓은 다양한 자료구조들을 학습하고, 그 장단점. 쓰임새를 배우고 구현할 줄 아는 것이
개발자의 필수 소양이라 할 수 있겠다.
간단하게
array 와 Lniked listt 의 차이를 써보면 다음과 같다.
1) Array 는 Compile Time 에 사이즈가 고정되고, Linked List는 Runtime 에 동적으로 사이즈가 변화한다.
그렇기에, Array는 프로그램을 설계할 때, 사용자 인풋에 대해 정확히 예상하고 그 사이즈에 맞게 배열을 선언해야하고, LinkedLise는 그런 것을 고려할 필요 없을 것이다.
2) 배열은 index를 통해 원하는 원소에 direct 하게. O(1)의 시간복잡도를 가지는 알고리즘으로 접근할 수 있으나,
LinkedListf는, 처음 노드부터 원하는 index번째의 노드를 찾기 위해, 리스트 전체를 순회해야한다. O(N) 의 시간복잡도를 가지는 알고리즘을 통해 요소에 접근하게 된다. 그렇기에 특정 원소의 조회를 빈번하게 할 때는, 배열이 링크드리스트보다 유리할 것이다.
3) 반면, 삽입/삭제와 같은 연산의 경우, 배열은 하나의 원소를 삽입하려면 O(N)만큼 시간복잡도를 가진 알고리즘으로 값을 이동시켜야 한다. 하지만, LinkedList 같은 경우는, 그냥 바로 추가만 해주면 되어서, O(1)의 시간복잡도를 가지는 알고리즘을 통해 삽입/삭제를 구현할 수 있다. 그렇기에, 삽입/삭제가 빈번하게 일어나는 데이터를 설계할 때는 LinkedLIst가 Array보다 좋은 선택이 될 것이다.