반응형

개발공부 120

JavaScript 파일에서 use strict를 쓰는 이유

순수 바닐라 자바스크립트를 이용할 때는 use strict를 쓰는 게 좋다. 자바스크립트는 굉장히 유연하다는 게 특징인데, 개발자가 실수를 할 수 있다는 단점이 있다. 예를 들어 선언되지 않은 변수에 값을 할당 기존에 존재하는 프로토타입 변경 이런 이상한게 가능하다. ECMAScript 5부터 추가된 use strict 을 사용하게 되면 위처럼 비상식적인 것을 사용할 수 없게 된다. (에러가 나서 잘못된 부분을 확인할 수 있다.) use strict 사용법 javascript 파일 제일 위에 use strict를 적어준다. 예시 'use strict' /* 코드 작성 */

html에 script를 추가할 때 어떤 방법이 가장 좋을까?

웹 개발을 할 때 HTML head에 script를 포함한다. 브라우저는 사용자가 HTML 파일을 다운로드하였을 때 브라우저를 한 줄씩 분석하게 되는데, script 태그가 보이면 script파일을 다운받아야 한다. script를 다운받는 방법은 한 가지 일까? 효율적으로 script파일을 다운로드하는 방법은 무엇일까? fetching : 스크립트를 서버에서 받아온다. executing : 스크립트 실행 1. 헤더에 그냥 추가하기 이 방법은 HTML을 파싱하다가 script태그를 만났을 때 파싱을 멈추고, . js파일을 다운로드, 실행한다. . js파일이 크기가 크거나 인터넷이 느린 경우 사용자가 웹 페이지를 볼 때까지 오랜 시간이 걸린다는 단점이 있다. 2. body 끝부분에 추가하기 브라우저가 HTM..

동기 비동기, 블럭 넌블럭

블록 넌블록 Block 호출된 함수가 할 일을 마칠 때까지 제어권을 가지고 일이 끝나면 호출한 함수에게 제어권을 넘겨준다. Non-Block 호출된 함수가 일이 끝나지 않아도 제어권을 넘겨주고 호출한 함수가 다른 일을 진행할 수 있도록 한다. 동기 비동기 Synchronous 함수 A와 B가 순차적으로 실행하면 동기 Asynchronous 함수 A와 B가 동시에 실행하면 비동기 async, await이란? async await은 비동기 작업을 동기처럼 실행해주는 키워드다. await 동기로 실행하고 싶은 Task를 호출할 때 앞에 await을 붙인다. async 동기로 실행하는 Task를 호출하는 함수 타입 앞에 async를 붙인다. 예시 public async Task CookBread() { Cons..

개발공부/C# 2022.01.10

옵저버 패턴(Observer Pattern) / 관찰자 디자인 패턴

옵저버 패턴이란? 옵저버 패턴은 관찰자(옵저버)가 공급자를 구독하고, 공급자에게 상태 변경이 발생할 때마다 알림을 받을 수 있는 패턴이다. 유튜브의 구독, 알림 시스템을 떠올리면 된다. 내가 한 유튜버를 구독하고 알림 설정을 하면, 유튜버가 영상을 올릴 때 알림을 받을 수 있다. 여기서 유튜버가 영상을 올리는 행위가 상태 변경이다. 새로운 영상이 나타났으니 공급자의 상태가 변경되었고, 구독자에게 알림이 간다. 옵저버 패턴을 구성하는 객체 Subject : 데이터를 관리하고 전달하는 객체 / 유튜버 Observer : Subject를 관찰하며 데이터의 변화를 전달받는 객체 / 구독자 두 객체는 1:N 관계를 맺는다. 즉, 한 개의 Subject를 1개 이상의 Observer가 구독할 수 있다. Subjec..

[프로그래머스 고득점 Kit] 위장

코딩테스트 연습 - 위장 programmers.co.kr 요구사항 의상 이름, 의상 종류로 이루어진 2차원 배열이 들어왔을 때 서로 다른 옷의 조합 수를 구한다. 주의사항 같은 종류의 의상을 입을 수 없다. 종류는 1가지씩! 최소 한 개의 의상을 입는다. 이름이 같은 의상은 없다. 코드 'usestrict'; function calculateCombination(hashmap) { let result = 1; hashmap.forEach((element) => { result *= element + 1; }); return result - 1; } function setHashmap(array) { let hashMap = new Map(); array.forEach((element) => { let k..

팩토리 메서드 패턴 (Factory Method Pattern) 설명과 예제

"찐빵님, 지금 객체 생성 함수가 세 개 있잖아요, 그거 팩토리로 바꿔서 PR 해주세요" ??? 팩토리 패턴이 뭐지??? 팩토리 패턴이 뭔지 몰라서 공부해봤다. 팩토리 메서드 패턴 조건에 따라 객체를 다르게 생성해야 할 때, 조건문을 사용해서 분기 처리를 하는데, 분기에 따른 객체의 생성을 직접 하지 않고, 팩토리 클래스에 위임해서 그 안에서 객체를 생성하도록 하는 방식이다. 객체를 찍어내는 공장이기 때문에 "팩토리"라는 이름이 붙었나 보다. 팩토리를 왜 사용할까? SNS 클래스를 만들고, 트위터, 페이스북, 인스타그램을 생성해봤다. public abstract class SNS { } public Twitter() { Console.WriteLine("Twitter"); } public Facebook..

[프로그래머스 고득점 Kit] 완주하지 못한 선수

코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 요구사항 participant : 마라톤에 참여한 선수들 배열 completion : 완주한 선수들의 배열 result : 완주하지 못한 선수의 이름 (항상 1명) 주의사항 completion의 길이가 participant보다 1 작다. 이름은 모두 알파벳 소문자이다. 동명이인 존재한다. 코드 function findDidnotFinishedPlayer(participant, completion){ for (let i = 0; i < comp..

[클린코드] 부적절한 코드 스타일

주석 부적절한 정보 쓸모없는 주석 중복된 주석 성의 없는 주석 주석 처리된 코드 함수 너무 많은 인수 출력 인수 플래그 인수 (boolean) 아무도 호출하지 않은 죽은 함수 - 삭제해야 한다. 이름 서술적이지 않은 이름 표준 명명법 사용 안 하는 경우 명확하지 않은 경우 테스트 불충분한 테스트 모호한 테스트 느린 테스트

[Effective C#] 아이템 47 : 사용자 지정 예외 클래스를 완벽하게 작성하라

예외는 오류를 보고하기 위한 메커니즘이다. 오류가 발생한 원인을 나타내기 위한 정보는 반드시 예외 객체에 포함되어야 한다. 언제 예외 클래스를 작성해야 하는가 catch 문을 작성할 때 예외의 런타임 타입에 따라 서로 다른 작업을 수행하도록 코드를 작성하는 것이 일반적이다. 예외 클래스 작성이유 catch 문을 사용하여 예외를 다루는 코드를 작성할 개발자가 각각을 구분해서 서로 다른 작업을 수행할 수 있도록 해주기 위함이다. 그러므로 에러가 발생한 시점에 복구 가능성을 염두에 두고 추가적인 정보를 담도록 예외 클래스를 작성하는 것이 좋다. 새로운 예외 클래스 작성 시 필수적으로 해야 하는 것 다음 4개의 생성자를 작성해야 한다. // 기본 생성자 public Exception(); // 에러 메시지를 포..

개발공부/C# 2021.12.22

[Effective C#] 아이템 46 : 리소스 정리를 위해 using과 try/finally를 활용하라

리소스 정리 시스템 리소스를 사용하는 타입은 IDisposable 인터페이스가 제공하는 Dispose() 메서드를 이용해서 명시적으로 리소스를 해제해야 한다. 사용자 입장에서 Dispose() 메서드가 항상 호출되도록 코드를 작성하기 위한 최선의 방법은 using문이나 try/finally 블록을 활용하는 것이다. Dispose()를 보장하는 방법 Dispose()를 호출해야 하는 경우, using문을 사용하는 것이 가장 간단하다. C# 컴파일러는 using문을 발견하면 해당 객체를 감싸는 try/finally 블록을 자동으로 생성해준다. Close()와 Dispose()의 차이점 Dispose() 리소스를 해제하는 작업 외에 GC.SuppressFinalize()를 호출해서 가비지 수집기에게 객체에 대..

개발공부/C# 2021.12.21