전체 글

전체 글

    정규표현식 (Regular Expression) 이란?

    정규표현식이란? 패턴을 통해 원하는 텍스트를 매칭시키는 도구이다. 특정 문자열이 있는지 검사하거나 특정 문자열만 변경하거나 하는 등의 기능에 사용된다. 정규표현식 엔진이 동작하는 방식 보통 정규표현식의 검색 방식을 '값을 소비한다' 고 표현한다. 일단 패턴에 매칭되는 문자를 찾으면 매칭된 문자열을 소비하기 때문이다. 소비한다는 것은 엔진이 매칭된 문자의 위치를 전진시킨다는 것이다. 그래서 소비 이후에는 더이상 이전의 문자가 매칭되지 않는다. 단, 소비되었다고 해서 문자가 지워지거나 변경된 것은 아님을 아는 것이 중요하다. 단 Lookaround 의 경우에는 값을 소비하지 않는다. 정규표현식의 구성 요소 메타 문자열(Metacharacters): 정규표현식에서 특수한 의미를 갖는 문자들을 말..

    정규표현식 ? (물음표) 기호 사용법 (non-greedy matching, lazy-quantifier)

    Case 1: 앞의 문자가 나올지 안나올지 모르는 경우를 위해 사용한다. 중간에 나올지 안나올지 확실하지 않은 문자에 사용할 수 있다. 예제 http or https URL 을 파악할 때 http://, https:// 둘 다 매칭시킬 때 유용하다. https? Case 2: non-greedy matching 혹은 lazy-quantifiers 를 위해 사용한다. 오직 * 혹은 + 와 ? 기호가 함께 사용될 때만 적용되는 규칙이다. * 혹은 + 와 같이 가능한 많은 문자를 소비해버리는 정규표현식 기호를 이용할 때, 이를 non-greedy 한 동작으로 변경할 수 있다. + 혹은 * 기호를 그냥 사용하면 가능한 가장 긴 시퀀스를 만들어낸다. ? 와 함께 사용하면 가능한 적은 시퀀스를 만들어낸다. 아래의 ..

    스스로 닫히는, 닫지 않아도 되는 태그들 (self-closing tags)

    스스로 닫히는, 닫지 않아도 되는 태그들 (self-closing tags) 명시적으로 형태로 닫을 필요가 없는 태그를 self-closing tags 라고 한다. empty tags, singleton tags 모두 같은 의미를 갖는다. 태그 내부에 텍스트나 컨텐츠를 갖지 않는 태그들이다. 자체적으로 닫아줘도 되지만, 브라우저는 동일하게 해석한다. 과 은 브라우저에겐 동일하게 보인다. 단, XHTML 에서는 self-closing tag 를 닫아주는 것이 규칙이다. self-closing tags 의 종류 여기 없는 것들은 deprecated 된 것들이다. : 줄넘김을 할 때 사용한다. : 이미지를 넣을 때 사용한다. : 입력창을 넣을 때 사용한다. : 메타 데이터를 넣을 때 사용한다. : 스타일시트나..

    시멘틱 HTML (Semantic HTML, 의미론적 HTML, Semantic Markup) 이란?

    시멘틱 HTML (Semantic HTML, 의미론적 HTML, Semantic Markup) 이란?

    시멘틱 HTML (Semantic HTML) 이란? 시멘틱 마크업 (Semantic markup) 이라고도 한다. 의미론적인 것에 좀 더 집중한 HTML 을 말한다. 단순히 눈에 보이는 것을 만들어놓는 것이 아니라, HTML 이 갖는 의미까지 고려한 HTML 이다. 웹페이지의 컨텐츠를 기계와 인간이 더욱 읽기 쉽게 만들어주는 HTML 작성 방식이다. 시멘틱 HTML을 구성해서 얻는 이득 검색엔진 최적화 (SEO, Search Engine Optimization) 를 해준다. 검색엔진 봇이 인식하는 HTML 태그의 퀄리티를 높여 로봇의 페이지 이해를 돕는다. 스크린 리더에 더 잘 읽힌다. 접근성이 더 좋아진다. 유지보수성이 좋아진다. 명확한 태그 이름을 통해 의도한 구조와 의미를 더 명확하게 만든다. 시멘..

    이펙티브 자바, 쉽게 정리하기 - item 47. 반환 타입으로는 스트림보다 컬렉션이 낫다

    이펙티브 자바, 쉽게 정리하기 - item 47. 반환 타입으로는 스트림보다 컬렉션이 낫다 Java8 이후 원소 시퀀스를 반환하는 방법 기존에는 Collection, Iterable 이라는 선택지가 존재했다. Java8 이후로는 Stream 이라는 선택지가 하나 더 늘었다. Stream 은 반환 타입으로 사용하기보다는 단순히 컬렉션 처리를 위해 사용하는 것이 좋다. 반환은 다시 컬렉션으로 변경해주는 것이 활용성이 좋다. someStream.collect(Collectors.toList()) 와 같은 함수를 이용하면 쉽다. Stream 이 Iterable 을 확장하지 않는데서 생기는 문제 기존에 Stream 의 forEach() 는 Consumer 인터페이스를 사용하는 만큼 값을 생산하기보다 소비하는데에 ..

    자바 Stream 에 size() 혹은 length 프로퍼티가 없는 이유

    Stream 에 size() 혹은 length 가 존재하지 않는 이유 아래의 개념을 알기 전에 앞서 스트림에서 평가(evaluation) 란 무엇인지 알아야 한다. Stream 은 게으르게 프로세스를 처리하도록 설계되어 있다. Stream 은 각 원소가 실제로 필요할 때까지 평가(evaluation) 하지 않는다. 큰 데이터 셋을 처리하는 경우, 이 접근 방식이 매우 효과적이다. 실제로 평가되기 전까지 데이터의 변환이 더 있을 것이라 가정하고 크기를 반환하는 size() 혹은 length 같은 프로퍼티를 제공하지 않는다. 대신 count() 메서드를 호출하면 스트림을 소모하여 전체 데이터 개수의 숫자를 반환한다.

    이펙티브 자바, 쉽게 정리하기 - item 46. 스트림에서는 부작용 없는 함수를 사용하라

    이펙티브 자바, 쉽게 정리하기 - item 46. 스트림에서는 부작용 없는 함수를 사용하라 스트림의 핵심 스트림은 사용법을 아는 것만으로 충분하지 않다. 패러다임을 받아들여야 한다. 패러다임의 핵심은 계산을 일련의 변환으로 재구성하는 부분이다. 변환 과정에 사용되는 함수는 순수함수여야 한다. 스트림을 이용한 코드의 진화 과정 단어 개수 세기 1: 사용법만 아는 단계 @Test public void wordFreq1Test() { List words = new ArrayList(); words.add("stop"); words.add("spot"); words.add("trim"); words.add("meet"); words.add("ball"); words.add("free"); words.add("t..

    리액트 공식문서 요약, 퀵 스타트 (Quick Start)

    목차 리액트 컴포넌트 마크업과 스타일 추가 방법 JS 내부 데이터 이용하는 방법 조건부 렌더링 방법 리스트 렌더링 방법 이벤트 응답 방법 훅스 사용 방법 화면 업데이트 방법 컴포넌트간 데이터 공유 방법 리액트 컴포넌트 컴포넌트란? 리액트 구성요소 로직과 모양을 가진 UI 단위 작은 버튼부터 전체 페이지까지 다 하나의 컴포넌트로 취급할 수 있다. 코드상에서는 마크업을 반환하는 JS 함수 컴포넌트의 예: MyButton 컴포넌트 이름은 대문자로 시작 HTML 태그는 소문자로 시작하는 것과 상반된다. function MyButton() { return I'm a button; } export default function MyApp() { return ( Welcome to my app ); } JSX..

    모던 자바스크립트, 프록시 (Proxy)

    프록시 (Proxy) 객체란? 프로그래밍적 정의 타겟 오브젝트를 정하고 타겟 오브젝트를 감싸는 객체이다. 타겟 객체의 기본 작업 (fundamental operation)을 가로채 재정의하는 기능이 있다. 프록시에 의해 해당 객체의 기본 작업 수행 시 트랩 (trap) 이라 불리는 핸들러 함수가 호출된다. 현실 세계와의 비유 프록시는 대리라는 뜻으로 현실에 비유하자면 연예인의 매니저 같은 것이다. 학교 축제에 블랙핑크의 제니를 섭외하고 싶다고 해서 제니의 연락처를 직접 알 수는 없다. 소속사를 통해 제니의 매니저와 통화를 먼저 거치고 가격, 시간 등에 대한 협의가 되어야 비로소 학교 축제에서 제니를 볼 수 있을 것이다. 기본 작업 (fundamental operation) 이란? 기본 작업을 가로챈다고 ..

    이펙티브 자바, 쉽게 정리하기 - item 44. 표준 함수형 인터페이스를 사용하라

    이펙티브 자바, 쉽게 정리하기 - item 44. 표준 함수형 인터페이스를 사용하라 람다를 활용할 때 표준 함수형 인터페이스를 사용하자 자바에서는 람다에 활용하라고 미리 만들어둔 표준 함수형 인터페이스들이 존재한다. removeEldestEntry()의 예 protected boolean removeEldestEntry(Map.Entry eldest) { return size() > 100; } LinkedHashMap 내부 메서드이다. 맵의 키 밸류 조합이 100개가 넘을 때, true를 반환한다. 잘 보면 약간 이상한점이 있는데, eldest라는 맵의 Entry를 파라미터로 받아놓곤, size()를 활용한다. 이 파라미터가 있는 이유는 이 메서드를 오버라이드할 때를 대비해서이다. 람다 인터페이스를 사..

    자바 함수형 인터페이스 혹은 람다 인터페이스란?

    함수형 인터페이스 혹은 람다 인터페이스 (Functional Interface, Lambda Interface) 란? 공식 API 문서 람다 인터페이스와 함수형 인터페이스는 같은 말이다. 단 하나의 추상 메서드만 가지는 인터페이스를 함수형 인터페이스라고 한다. 함수형 인터페이스를 구현하여 손쉽게 람다 표현식을 작성할 수 있다. Stream API 와 같이 사용하는 방식도 많이 이용된다. 자바에서는 자체적으로 많은 표준 함수형 인터페이스를 제공한다. 따로 만들기보단 제공하는 것을 이용하는 것이 좋다. 표준 함수형 인터페이스 살펴보기 Predicate 임의의 타입 T 의 인자를 받아 boolean 을 반환하도록 설계되어 있다. Predicate isPositive = num -> num > 0; Functi..

    이펙티브 자바, 쉽게 정리하기 - item 45. 스트림은 주의해서 사용하라

    이펙티브 자바, 쉽게 정리하기 - item 45. 스트림은 주의해서 사용하라 스트림의 특징 아래에서 사용하는 평가(evaluation) 란 용어를 사용한다. 이 용어에 대한 설명은 Java Stream API 에서 평가 (evaluation) 란? 포스팅을 참조하면 된다. 배열과 같은 시퀀스형 데이터를 처리하는데 특화되어 있다. 소스 스트림(source stream) -> 중간 연산(intermediate operation) -> 종단 연산(terminal operation) 순으로 진행된다. 각 중간 연산(intermediate operation) 은 스트림을 어떠한 방식으로 변환(transform) 한다. 스트림 파이프라인은 지연평가되며, 평가는 종단 연산(terminal operation) 이 호출..

반응형