분류 전체보기
-
[Java] 타입 선언언어/Java 2020. 12. 26. 20:12
정수 타입타입메모리크기범위byte1 byte8 bit-2⁷ ~ (2⁷ - 1)-128 ~ 127short2 byte16 bit-2¹⁵ ~ (2¹⁵ - 1)-32,768 ~ 32,767char2 byte16 bit0 ~ (2¹⁶ - 1)0 ~ 65535 (유니코드)int4 byte32 bit-2³¹ ~ (2³¹ - 1)-2,147,483,648 ~ 2,147,483,647long8 byte64 bit-2⁶³ ~ (2⁶³ - 1)-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807int2진수0b 또는 0B로 시작하고 0과 1로 구성0b1011 → 110b10100 → 208진수0으로 시작하고 0 ~ 7로 구성013 → 110206 → 13410진수소수점이 없는 0..
-
[Java] 타입 변환언어/Java 2020. 12. 26. 20:12
자동 타입 변환자바에서는 값의 허용 범위가 작은 타입에서 큰 타입으로 저장될 때 자동으로 타입이 변환됩니다.허용 범위 순서byte int long var3 = 100000000L; float var4 = var3; // 1.0E8f double var5 = var3; //1.0E8 char var6 = 'A'; int var7 = var6; // 65 byte var8 = 65; char var9 = var8; // char는 음수를 허용하지 않으므로 컴파일 에러강제 타입 변환허용 범위가 큰 타입에서 작은 타입으로 변환하고자 할 때엔 강제로 지정을..
-
[Java] 스코프언어/Java 2020. 12. 26. 20:11
자바의 모든 변수는 중괄호 내에 선언되고 사용됩니다.파이썬의 스코프와는 살짝 다르게 자바에선 중괄호 내에 선언된 변수는 해당 중괄호가 닫히면 메모리에서 자동으로 없어지므로 사용이 불가능 합니다. (전역변수 X)자바public class Main { public static void main(String[] args) { int var1; if (...){ int var2; // var1, var2 사용가능 } for (...){ int var3; // var1, var3 사용가능 // var2 사용불가 } // var1 사용가능 // var2, var3 사용 불가 } }파이썬var1 = '' if ...: var2 = '' # var1, var2 사용가능 for ...: var3 = '' # var1, ..
-
[Python] 실수를 사칙연산할 때 주의점언어/파이썬 & 장고 2020. 12. 20. 16:43
최근 값을 계산하는 로직을 개발하면서 기본적이지만 까먹고 있었던 부분에서 애를 먹었습니다. 파이썬에서는 실수 (유리수 + 무리수)를 부동 소수점으로 표현하기 때문에 소수점이 있는 계산에서 우리가 생각하고 있는 것과 약간 다르게 동작합니다.예시아래는 0.1 + 0.2를 연산하는 로직입니다. 해당 연산의 결과는 0.3으로 보통 생각하고 있지만 파이썬의 결과는 다르게 나옵니다.print(0.1+0.2) ## 0.30000000000000004 컴퓨터에서는 숫자를 비트로 표현하는데 실수의 경우 유리수 + 무리수 이기 때문에 정확한 표현이 어렵습니다. 그래서 제한적인 비트를 사용하여 근삿값을 표현하기 때문에 0.3의 근삿값인 0.30000000000000004이 나오게 되고 0.1 + 0.2 == 0.3 을 하면..
-
gRPC란?공부 2020. 9. 27. 23:13
gRPC는 구글에서 만든 RPC 시스템입니다. gRPC를 설명하기에 앞서 RPC가 무엇인지 설명을 합니다.RPC란?RPC는 Remote Procedure Call로 프로세스간 통신 기법 중 하나입니다. 다른 프로세스에 있는 함수를 호출할때, 마치 같은 프로세스 내에 있는 것처럼 호출할 수 있습니다. 클라이언트는 일반 로컬 메소드를 호출하는 것처럼 사용하면 됩니다. RPC는 다양한 환경, 플랫폼에 제약없이 사용할 수 있어 분산 시스템 기법에 효과적입니다.Caller/CalleeClient(Caller)와 Server(Callee)는 사용자가 필요한 비지니스 로직을 작성하는 레이어IDL(Interface Definition Language)을 사용하여 서로의 인터페이스를 명시StubStubComplier가 ..
-
[UML] 시퀀스 다이어그램 (Sequence Diagram)공부 2020. 8. 1. 22:51
시퀀스 다이어그램은 특정 행동이 어떠한 순서로 어떤 객체와 어떻게 상호작용을 하는지 표현하는 행위 다이어그램입니다. 현재 존재하는 시스템이 어떠한 시나리오로 움직이고 있는지를 나타내는데 장점을 가지고 있습니다. 시퀀스 다이어그램을 이용하면 API 등의 유즈 케이스를 디테일하게 알 수 있고 타 시스템의 API 호출 등의 로직을 모델링할 수 있어 시나리오를 파악하기 좋습니다.예를 들어, 고객이 29CM 사이트 주문을 했을 때 고객이 주문한 시점부터 29CM 사이트의 주문 처리 순서, 이후 반환 케이스를 연속적으로 표현할 수 있습니다.Lifeline모델링 되는 인스턴스를 나타냅니다. Lifeline은 네모와 점선으로 이루어져 있으며 네모가 객체의 관점으로 표현했다면 클래스이고 서비스 관점으로 표현했으면 컴포넌..
-
UML 다이어그램공부 2020. 8. 1. 21:33
UML이란?Unified Modeling Language 의 약어로 시스템을 모델로 표현해 주는 대표적인 언어로 생각할 수 있습니다. 개발자가 자신의 생각을 구축하고 반영하는데 있어서 표준적이고 이해하기 쉬운 방법으로 할 수 있도록 도와주며, 자신의 설계 결과물을 다른 사람과 효과적으로 주고받으며 공유할 수 있는 메커니즘을 제공합니다.다이어그램이란?다이어그램(diagram)은 정보를 시각화하여 보다 쉽게 이해할 수 있도록 표현하는 기술입니다. 보통은 2차원(도형)으로 그리지만 3차원 공간에 시각화를 하기도 합니다.UML 다이어그램이란?위의 UML과 다이어그램을 합쳐서 시스템을 모델로 표현하기 위해 이를 시각화 하는 기술입니다. 구조 다이어그램(Structure Diagram)과 행위 다이어그램(Behav..
-
[Design Pattern] 플라이웨이트 패턴 (Flyweight Pattern)공부/디자인 패턴 2020. 7. 26. 18:14
Flyweight 패턴은 비용이 큰 자원을 공통으로 사용할 수 있도록 만드는 패턴입니다. 여기서 자원에 대한 비용은 크게 두가지로 나눠 볼 수 있습니다.중복 생성될 가능성이 높음중복 생성될 가능성이 높다는 의미는 동일한 자원이 자주 사용될 가능성이 높은 것입니다. 이러한 자원은 공통 자원으로 관리하고 있다가 요청이 있을 때 제공해 주는 것이 좋습니다.자원 생성 비용은 큰데 사용 빈도는 낮음생성 비용이 크지만 사용 빈도가 낮은 자원을 미리 생성해 두는 것은 좋지 않습니다. 따라서 요청이 있을 때, 생성해서 제공해 주는 편이 좋습니다. 일반적으로 Factory와 관리 역할을 분리하는 것이 좋아 보이지만 굳이 나누고자 할 정도로 크기가 크지 않아서 하나의 클래스가 담당하도록 구현을 합니다. 이러한 패턴을 적용..
-
RabbitMQ란?서버 2020. 7. 26. 17:05
RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커입니다. 생산자에게 메시지를 받아 소비자에게 전달해주는 서비스로 시스템 간 메시지를 전달해주는 오픈소스 메시지 브로커 소프트웨어입니다.AMQP란?AMQP란 Advanced Message Queueing Protocol의 줄임말로 MQ의 오픈소스에 기반한 표준 프로토콜을 의미합니다. AMQP는 마지막 P(rotocol)에서 보는 것과 같이 프로토콜을 의미하기 때문에 이 것을 사용한 가장 유명한 소프트웨어는 RabbitMQ라 볼 수 있습니다. AMQP를 구성하는 요소는 Exchange, Queue, Binding이 있습니다.ExchangeExchange는 생산자로부터 수신한 메시지를 적절한 큐나 다른 exchange로 분배하는 라우터의 기능을 합니다...
-
[Design Pattern] 퍼사드 패턴 (Facade Pattern)공부/디자인 패턴 2020. 7. 25. 23:34
퍼사드 패턴은 복잡한 호출 과정을 한 번 더 감싸서 단순한 형태로 제공하는 패턴입니다. 예를 들어, 특정 쇼핑몰에서 A라는 상품을 사기 위해서는 A 상품의 물건이 존재하는지, 주문자의 지역에 배송이 가능한지, 배송업체가 존재하는지 등 특정 절차를 밟아야 합니다. 퍼사드 패턴을 적용하지 않는다면 사용자가 복잡한 절차를 순서있게 호출해야 하지만 퍼사드 패턴을 적용하면 주문하기 와 같은 버튼 1개로 노출하고 복잡한 절차를 숨길 수 있습니다.class Qty: def check(self): pass class Delivery: def valid(self): pass class Amount: def check(self): pass # 퍼사드 클래스 class Order: def __init__(self): sel..