컴포넌트는 배포 단위입니다. 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위입니다. 자바의 경우 jar 파일이 컴포넌트이고, 루비에서는 gem파일, 닷넷에서는 DLL 입니다. 컴파일형 언어에서 컴포넌트는 바이너리 파일의 결합체이며, 인터프리터형 언어에서는 소스 파일의 결합체입니다. 모든 언어에서 컴포넌트는 배포할 수 있는 단위 입자입니다. 여러 컴포넌트를 서로 링크하여 실행 가능한 단위 파일로 생성할 수 있으며, 여러 컴포넌트를 묶어서 .war파일과 같은 단일 archive로 만들 수도 있습니다. 또는 컴포넌트를 .jar나 .dll 같이 동적으로 로드할 수 있는 플러그인이나 .exe파일로 만들어서 독립적으로 배포할 수 있습니다. 컴포넌트가 마지막에 어떤 형태로 배포되든, 잘 설계된 컴포너..
아마 예전에 배웠을 것입니다. 시간이 지나서 까먹었을 뿐.. ㅠㅠ 교육 실습 중에 누가 이런 이야기를 하였습니다. 상수를 왜 대문자로 표기하지 않나요? (클린 코드 관점에서 상수는 대문자로 표기하며 단어간 언더바(_)로 연결) 예를들면, class Class { final int numberOfStudent = 10; } 여기에서 numberOfStudent는 상수일까요? 아닐까요? 제목에도 작성하였지만, 상수가 아닙니다. 얼핏보면 상수처럼 생겼죠? 상수였다면, NUMBER_OF_STUDENT 라고 선언해야 맞습니다. 상수의 정의는 상수란 변하지 않고, 항상 일정한 값을 갖는 수를 말한다. 라고 합니다. (위키백과) final int numberOfStudent = 10; 가 상수가 아닌 이유는 클래스 ..
최근 클린 코드를 학습하고 있습니다. 고맙게도 회사에서 교육을 시켜주고 있어, 강한 의지 없이도 학습을 이어나갈 수 있게 해주네요. 클린 코드의 오류 처리 챕터에서, null을 반환하는 코드는 일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다. 라는 항목을 보고, 제가 그동안 고민해 왔던 것을 작성해보려고 합니다. 교재는 엉클밥의 클린 코드입니다. (물론 책으로 공부하진 않습니다..) Java에서는 Optional이라는 Null을 예방하는, Java을 Null-safe 하게 만들어 주는 훌륭한 클래스가 있습니다. 저는 주로 JPARepository에서 Entity를 불러올 때 많이 사용하는데요, 제가 기존에 사용하는 방식의 예제를 보면 다음과 같습니다. (Null-Safe하지 않은 방식) Stock이..
요즘 React + Next.js, MUI(Material UI) 조합으로 Front-End를 개발하고 있습니다. MUI에서 Tabs 라는 훌륭한 기능이 있는데, 이름 그대로 Tab을 만들어주고, Active되어 있는 탭과 Inactive되어 있는 탭을 구분 시켜줍니다. 예전에는 직접 구현해야 했지만, 요즘은 UI Framework에서 다 제공해줍니다. 아래는 MUI에서 제공하는 기본 탭입니다. 기본도 훌륭하지만, 우리는 조금 더 차별화를 위해 조금이라도 더 수정을 하고 싶어합니다. 저는 개인적으로 Circluar Button 스타일을 좋아하니, 제가 좋아하는 Circular button 형태로 만들어보겠습니다. 기본 Tabs MUI 기본 Tabs와 거의 유사한 코드입니다. 아래 그림을 보면, Activ..
str = "1, 2, 3, 4, 5, 6\n" _str = str.split("\n") __str = _str[0].split(",") print num for i in range(num): print "%d" %int(__str[i]) Python에서는 str.split()를 이용해 token으로 나눌 수 있다. 보통 csv파일을 readline()이나 readlines()로 읽으면 위와 같은데 split()을 사용하면 쉽게 원하는 정보를 얻을 수 있다.
import threading import time class ExTimer(threading.Thread): def __init__(self): threading.Thread.__init__(self) # default delay set.. self.delay = 1 self.state = True self.handler = None def setDelay(self, delay): self.delay = delay def run(self): while self.state: time.sleep( self.delay ) if self.handler != None: self.handler() def end(self): self.state = False def setHandler(self, handler): ..
- Total
- Today
- Yesterday