이끌든지 따르든지 비키든지

Software Development 25

[Design Pattern] OCP(개방 폐쇄 원칙)

객체지향적인 프로그램을 설계할 때 가장 중요하고, 반드시 지켜야 할 5가지 원칙이 있다. 각 원칙의 앞글자를 따 SOLID 원칙이라 하는데, 오늘은 두 번째인 개방 폐쇄 원칙(Open-Closed Principle)에 대해 알아본다. 개방 폐쇄 원칙(Open-Closed Principle) 객체는 확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적이어야 한다는 원칙을 말한다. 확장에 개방적이다. 여기서 확장이란, 새로운 기능이나 동작의 추가를 말한다. 확장에 개방적이어야한다는 말은 새로운 기능을 추가하거나 기존의 기능을 확장할 때 기존 코드를 수정하지 않고 새로운 코드를 추가할 수 있어야 함을 의미한다. 수정에 폐쇄적이다. 기존의 코드는 수정을 피해야 한다. 기존 코드를 수정하면서 새로운 기능을 추가하거..

[Java] 객체지향 생활 체조 원칙 - 2

(전 글에 이어서 작성) [Java] 객체지향 생활 체조 원칙 - 1SOLID 원칙, 추상화, 다형성···, 객체 지향 프로그래밍(OOP)에 대해 공부할 때 정말 지겹도록 보게 되는 OOP의 특징과 원칙들이 있다. 코드를 객체 지향적으로 작성하려면 이러한 특징들을 지켜야seongho-jo-5.tistory.com6. 줄여 쓰지 않는다.이름이 짧다고 무조건 좋은 것은 아니다. 변수명, 메서드명을 짧게 만들기 위해 보통 단어를 축약하는 방법을 많이 택하지만, 과도한 축약은 오히려 가독성을 떨어트린다. 줄여쓰지 않은 이름이 너무 길다면, 책임을 너무 많이 가져 단일 책임 원칙을 위배하는 것은 아닌지 , 적절한 클래스의 아래에 위치하지 않아 그런 것인지 이유를 생각해보아야 한다. public class Data..

[Java] 객체지향 생활 체조 원칙 - 1

SOLID 원칙, 추상화, 다형성···, 객체 지향 프로그래밍에 대해 공부할 때 정말 지겹도록 보게 되는 OOP의 특징과 원칙들이 있습니다. 코드를 객체 지향적으로 작성하려면 이러한 특징들을 지켜야 하지만, 초보 개발자가 저 원칙들만 보고 코드에 적용하기엔, 개념이 추상적이기에 쉬운 일이 아닙니다.. 객체지향 생활 체조 원칙은 이에 대한 조금 더 구체적인 가이드를 제공한다고 보면 될 듯합니다. 각 원칙과 설명을 읽어보면서 이 원칙이 추구하고자 하는 목표를 생각해 보고 내 코드에 적용한다면 큰 도움이 될 것 같습니다. 객체지향 생활 체조 원칙 한 메서드에 오직 한 단계의 들여 쓰기만 한다. else 예약어를 쓰지 않는다. 모든 원시 값과 문자열을 포장한다. 일급 컬렉션을 쓴다. 한 줄에 점을 하나만 찍는다..

[JavaScript] 모듈 (import / export)

모듈이란? 코드의 일부를 논리적으로 분리하고 구조화할 때, 각각 분리된 단위를 모듈(Module)이라 한다. 모듈화가 필요한 이유 코드의 재사용 : 비슷한 기능이나 관련된 기능들을 모듈로 분리하여 필요한 곳에서 재사용할 수 있다. 코드의 구조화 : 프로그램을 여러 개의 독립적인 모듈로 나누어 각 모듈이 특정 역할을 담당하도록 분리함으로써 코드의 구조를 개선하고 유지보수를 용이하게 한다. 네임스페이스 관리 : 모듈을 사용함으로써 전역 네임스페이스 충돌을 방지하고 각 모듈에서 정의한 변수, 함수, 객체 등을 별도의 네임스페이스로 유지할 수 있다. 코드의 숨김 : 필요한 기능을 외부에 노출시키지 않고 private하게 유지하여 정보 은닉과 캡슐화를 구현할 수 있다. 모듈 export 모듈을 내보내는 방법은 e..

[TypeScript] 타입 추론 & 타입 단언 & 타입 가드

타입 추론(Type Inference) 타입스크립트는 코드를 작성할 때 변수, 함수, 매개변수 및 반환값 등에 명시적으로 타입을 선언할 수 있다. 그러나 타입을 명시적으로 선언하지 않아도 컴파일러가 코드를 분석하고 타입을 추론할 수 있는데, 이를 타입 추론이라고 한다. function add(a: number, b: number) { return a + b; } const result = add(10, 20); // result가 number 타입일 것으로 추론한다. 예를 들어, 위 코드는 매개변수 a와 b가 number 타입임을 명시했으므로, 컴파일러는 이를 바탕으로 result가 number 타입일 것으로 추론한다. const user = { name: 'John Doe', age: 30, }; co..

[JAVA] Annotation

Java는 어노테이션(Annotation)이라는 프로그램의 코드에 메타데이터를 추가하는 특별한 형태의 주석을 제공한다. 이 단어의 사전적 의미도 말 그대로 '주석'이다. 자바에서 주석은 // 로 시작하는 거 아니었나요? 둘 다 주석이 맞다. 둘의 차이점은, // 로 시작하는 주석(Comment)은 개발자에게 코드 설명 등 정보를 제공하고, @ 로 시작하는 어노테이션(Annotation)은 프로그램, 컴파일러 등 에게 추가 정보를 제공한다. 주로 사용되는 표준 어노테이션 중 몇 가지를 살펴보자면, @Override 메서드 선언부에 작성해 해당 메서드가 오버라이드되었음을 알리는 어노테이션이다. 컴파일러는 @Override가 붙은 메서드의 오버라이드가 올바르게 이루어졌는지를 검사하고, 잘못된 부분(리턴 타입이..

[TypeScript] TypeScript란?

JavaScript는 동적 타입 언어로, 변수의 타입을 런타임(실행) 때에 결정한다. 이 덕분에 유연한 개발이 가능하지만, 실행 시까지 오류나 버그를 찾기 어렵고, 코드가 늘어날수록 팀원 간 협업도 어려워진다. TypeScript는 이러한 자바스크립트의 단점을 보완하기 위해, 코드 작성 때 객체에 타입을 명시할 수 있도록 하고, 컴파일 환경을 제공하여 코드를 작성하는 동안 문법 오류 등 에러를 확인하고 수정할 수 있다. TypeScript로 작성한 코드는 .ts 확장자를 가진 파일로 저장되고, 실행하면 타입스크립트 컴파일러(tsc)가 이를 자바스크립트 파일로 컴파일해 node.js나 브라우저에서 실행된다. .js 파일로 컴파일하면서 타입 검사와 문법 오류 등을 검사할 수 있고, Vanilla JS 환경에..

[프로그래머스] 광물 캐기 - JAVA

프로그래머스 코딩 테스트 연습 문제 - 광물 캐기 / JAVA 풀이 정리 https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 광물을 5개 단위로 묶고, 묶음마다 대해 돌을 가장 효율적으로 캘 수 있는 곡괭이를 선택한다. 돌을 가장 많이 캘 수 있는 곡괭이부터 사용하여 광물을 캐고, 해당 곡괭이의 사용 횟수를 감소시킨다. 위 과정을 곡괭이 사용 횟수를 소진할 때까지 반복한다. (광물이 5개 단위인 이유 : 한 번 곡괭이를 사용하면 소진될 ..

[알고리즘] 동적 계획법(Dynamic Programming)

동적 계획법(Dynamic Programming)이란? 큰 문제를 여러 개의 부분 문제로 나누어 이를 해결하고, 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 문제해결방법이다. ■ 분할 · 정복(Divide & Conquer) 알고리즘이랑 비슷한데? 큰 문제를 여러 부분 문제로 나눈다는 점에서 분할 정복 알고리즘과 유사하다. 하지만, 이 두 방법 간에 가장 큰 차이점은 부분 문제의 중복 여부이다. 분할 · 정복 알고리즘은 부분 문제들 간에 중복이 없고 각각의 부분 문제는 독립적이지만, 동적 계획법에서 부분 문제 간에 중복이 존재하고, 해결한 부분 문제의 정답을 저장(Memoization)해 두었다 재활용해 문제를 해결한다. 동적 계획법의 사용 조건 1. 중복된 부분 문제 (Overlapping ..

[알고리즘] 이진 탐색(Binary Search)

이진 탐색(Binary Search)이란? 우리가 종종 하는 업다운(Up & Down) 게임과 매우 유사한 검색 알고리즘이다. 리스트의 중간값을 선택해, 그 값이 목푯값인지, 아니면 앞에 있는지, 뒤에 있는지를 판단하고 목푯값을 찾을 때까지 이를 반복하는 알고리즘이다. 이진 탐색의 장 · 단점 매 탐색마다 범위의 절반을 덜어낼 수 있어 속도가 빠르고, 알고리즘의 구현도 비교적 간편하다. 다만, 특성상 정렬된 데이터에만 적용할 수 있기 때문에 정렬 작업이 선행되어야 한다.