본문 바로가기

👩‍💻TIL/기술면접14

[소프트웨어 설계] 디자인 패턴(Design Pattern)의 개념과 종류 디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 할 수있는 훌륭한 해결방안을 말한다. 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계 문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 이러한 유사점을 패턴이라 한다. 패턴은 공통의 언어를 만들어주며 팀원 사이의 의사 소통을 원활하게 해주는 아주 중요한 역할을 한다. 디자인 패턴의 종류 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류된다. 더보기 GoF(Gang of Four) 디자인 패턴이라고 불리며, 에리히 감마(Erich Gamma), 리차드 .. 2022. 9. 1.
암호화와 해시화의 차이/특성 비교 암호화와 해시화의 차이/특성 비교 암호화와 해시화는 통신의 안전성을 높이기 위해 사용된다는 점은 같지만 차이점과 각각의 특징이 존재한다. 💡 암호화 복호화 할 수 있다(= 원래대로 되돌릴 수 있다, 가역성 : 원래대로 되돌리는 것을 가역이라고 한다.) 암호화에는 공통키 암호화와 공개키 암호화 방식이 있다. 1️⃣ 공통키(비밀키) 암호화 : 패스워드(공통키)를 걸어 암호화 2️⃣ 공개키 암호화 : 긱각 다른 암호화 키를 준비하여 암호화하는 쪽의 키를 공개하는 방식 💡 해시화 복호화할 수 없다.(=원래대로 되돌릴 수 없다, 불가역성: 되돌릴 수 없는 것을 불가역이라고 한다.) 그래서 비밀번호과 같이 해독되면 안되는 데이터는 엄호화가 아닌 해시화하여 보호가 필요하다. 해시화되기 전 원래 상태를 유추할 수 없다.. 2022. 9. 1.
[운영체제]페이지 교체 알고리즘(Page Replacement Algorithm) [운영체제]페이지 교체 알고리즘(Page Replacement Algorithm) 💡 페이지 교체란 페이지 교체 알고리즘은 멀티프로그래밍 환경에서 다수 프로세스가 메모리 상에 공존할 때 혹은 물리메모리보다 더 큰 메모리 공간을 필요로 하는 프로세스가 실행 시 페이지 부재(페이지 폴드 / Page Fault) 를 최소화하면서 효율적으로 실행하기 위한 메커니즘이다. 페이지 부재(Page Fault)가 발생하면 요청된 페이지를 디스크에서 메모리로 읽어와야하는데, 물리적 메모리에 빈 프레임이 존재하지 않을 수 있다. 이러한 경우, 메모리에 올라와 있는 페이지 중 하나를 디스크로 쫓아내 메모리에 빈 공간을 확보하여 새로운 페이지를 메모리에 올려야 한다. 이러한 과정을 페이지 교체라고 부르며, page-out이 된.. 2022. 9. 1.
정적타입 언어 vs. 동적타입 언어 특징 비교하기 [Groovy] 정적타입 언어 vs. 동적타입 언어 특징 비교하기 자바를 사용하다 최근 그루비를 사용하며 개인적으로 느꼈던 가장 큰 차이 하나를 꼽자면 바로 자료형에 대한 명시 여부였습니다. groovy는 자바스크립트와 같은 동적타입을 지원하는 언어이므로, 따로 자료형에 대한 명시하지 않아도 런타임시 알아서 자료형을 넣어줍니다. (적응되니 너무 편했지만 상황에 따라 타입에러가 발생하는 경우도 있으니 주의!) 정적타입(Statically typed) vs 동적타입 (Dynamically typed) 먼저, 변수의 타입이란 int, short, float, String, 객체 와 같은 자료형을 뜻합니다. 💡 정적타입 언어란? 정적타입 언어(Statically typed language)는 컴파일 시 변수의 .. 2020. 9. 10.
[소프트웨어공학] 모듈, 결합도와 응집도- 좋은 소프트웨어 설계의 시작 [소프트웨어공학] 모듈, 결합도와 응집도- 좋은 소프트웨어 설계의 시작 1. 모듈과 모듈화 먼저 모듈화란 소프트웨어를 각 기능별로 나누는 것을 의미한다. 그리고 그 결과로 각 기능별로 분할된 것을 모듈이라고 한다. 2. 모듈에게 중요한 것은 바로, 독립성! 좋은 모듈화는 용도에 맞게 잘 구분된 기능을 가진 독립적인 모듈로 나누는 것이다. 모듈의 독립성을 판단하는 것은 결합도와 응집도가 있다. 💡 결합도란? 모듈과 모듈간의 상호 의존도! 💡 응집도란? 모듈 내부의 기능적인 집중도! 개별 모듈은 독립적으로 자신에게 주어진 기능만을 수행하고 명확한 결과값을 내 놓아야 하고 👉모듈 내부의 높은 응집도 다른 모듈에 의존성이 높아선 안된다. 👉모듈 간의 낮은 결합도 따라서, 응집도는 높을 수록, 결합도는 낮을 수록.. 2020. 6. 19.
[DevOps]CI/CD (지속적 통합/지속적 제공) 개념과 과정/ 툴 별 장단점 비교 [DevOps]CI/CD (지속적 통합/지속적 제공) 개념과 과정/ 툴 별 장단점 비교 애플리케이션 개발은 보통 혼자 모든 기능을 개발하기보다 여러 개발자들이 동일한 애플리케이션의 각기 다른 기능을 맡아 동시에 작업하게 된다. 만약 이러한 상황에서 개발자들이 자신의 로컬환경에 작업하여 완전히 개발이 끝날 때까지 중앙 저장소로 올리지 않는다면, 개발이 종료된 후 전체 코드를 통합하고 배포하는 정말 쉽지않을 것이다. (프로젝트의 규모가 클 수록, 개발과정이 길수록, 많은 개발자들이 함께할 수록 어려움은 클 것이다.) 실제로 현대적인 애플리케이션 개발에서는 이렇게 진행하는 경우는 거의 없을 것이다. git과 같은 형상관리 툴을 사용하여 중간중간 커밋과 머지를 통해 코드를 병합하는 과정을 거칠 것이다. 그러나 .. 2020. 5. 15.
[JavaScript] setInterval, setTimeout 사용하여 반복 실행을 해보자 [JavaScript] setInterval, setTimeout 사용하여 반복 실행 자바스크립트에서 반복 작업 시 자주 만나는 setInterval()과 setTimeout()에 대해 정리해보려고 합니다. 💡 먼저, setTimeout()란? 특정 코드나 함수를 의도적으로 지연한 뒤 실행하고 싶을 때 사용하는 타이밍 이벤트 함수입니다. setTimeout() 함수의 내부에 위치한 코드는 콜백함수로 지연시간 뒤에 실행될 코드를 설정합니다. 지연시간은 밀리세컨드 단위로 설정해야 하며 지연시간 1000은 1초를 의미합니다. 만약 5초 뒤에 Time Out Test!이라는 문구를 콘솔에 출력하고 싶다면, 아래와 같이 작성합니다. setTimeout(function() { console.log('Time Out.. 2020. 4. 21.
[알고리즘] 깊이 우선 탐색(DFS) 과 너비 우선 탐색(BFS) [알고리즘] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS) 그래프를 탐색하는 방법에는 크게 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)이 있습니다. 📌여기서 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며, 그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것을 말합니다. 그래프와 트리의 차이가 궁금하다면? 👇🏻 더보기 큰 특징만 말하자면, 그래프 중에서 방향성이 있는 비순환 그래프를 트리라고 말합니다. 1. 깊이 우선 탐색 (DFS, Depth-First Search) : 최대한 깊이 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 옆으로 이동 💡 깊이 우선 탐색의 개념 루트 노드(혹은 다른 임의.. 2020. 2. 19.
[오류검출코드]패리티비트(Parity Bit)와 해밍 코드(Hamming Code) [오류 검출 코드] 패리티 비트(Parity Bit)와 해밍 코드(Hamming Code) 💡패리티 비트(Parity Bit)란? 정보전달 과정에서 오류 발생여부를 검사하기 위해 추가된 비트를 말하며, 아래의 사진처럼 전송하고자 하는 데이터의 끝에 1비트를 더하여 전송합니다. 패리티 비트는 홀수(odd) 패리티 비트와 짝수(even) 패리티 비트로 분류하는데, - 전달하고자 하는 DATA의 1의 개수로 홀수와 짝수를 구분합니다. - 짝수패리티의 경우 0을 붙여주고, 홀수 패리티인 경우 1을 붙여줍니다. 예를 들어, 전달하고자 하는 데이터가 10010101일 경우, 1이 총 4개이므로 짝수 패리티인 0이 붙게 됩니다. 하지만 이러한 패리티비트로는 오류 검출만 가능할 뿐 어디가 잘못됐는지 정정할 수 없습니다.. 2020. 2. 16.
[정렬] 선택정렬(Selection Sort)의 개념/Java코드/시간복잡도/공간복잡도 [정렬] 선택정렬(Selection Sort)의 개념/Java코드/시간복잡도/공간복잡도 📌선택정렬의 개념 선택정렬(Selection Sort)은 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 그 위치에 어떤 원소를 넣을지 선택하는 알고리즘입니다. 선택정렬(Selection Sort)와 삽입정렬(Insertion Sort)이 종종 헷갈릴 수 있는데, 선택정렬은 배열에서 해당 자리를 이미 선택하고 그 자리에 오는 값을 찾는 것이며, 삽입정렬은 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입하는 것입니다. - 선택정렬은 제자리 정렬(in-place sorting) 알고리즘의 하나 제자리 정렬이란, 입력 배열(정렬되지 않은 값들) 이외에 다른 추가 메모리를.. 2020. 2. 13.