
SOLID 객체 지향 설계 프로그래밍 및 설계의 다섯 가지 기본 원칙의 두문자어 SRP (Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Principle): 개방 폐쇄 원칙 LSP (Liskow Substitution Principle): 리스코프 치환 원칙 ISP (Interface Segregation Principle): 인터페이스 분리 원칙 DIP (Dependency Inversion Principle): 의존 역전 원칙 ⇒ 응집도는 높이고 (High Cohesion), 결합도는 낮추는 (Loose Coupling) 고전 원칙을 을 객체 지향의 관점에서 재정립한 것 결합도 어떤 모듈이 다른 모듈에 의존하는 정도 응집도 모듈 내부의 기능이..

JDK VS JRE VS JVM JDK 자바 개발 도구(Java Development Kit) JVM을 위한 소프트웨어 개발 도구 JRE 자바 실행 환경(Java Runtime Evironment) JVM을 위한 OS JVM 자바 가상 기계(Java Virtual Machine) 가상의 컴퓨터 자바 프로그램은 JDK를 이용해 개발되고, JRE에 의해 JVM에서 실행된다. JDK에 의해 개발된 자바 프로그램을 JRE가 포함하고, 이런 JRE는 JVM에 포함되는 형태로 배포된다. JVM은 자바 코드 컴파일러인 javac.exe를 포함하여 자바 소스 파일인 .java파일을 자바 목적 파일인 .class로 컴파일해준다. JRE에는 자바 프로그램 실행기인 java.exe를 포함하고 있다. 이런 구조로 자바는 플..

String s1 = "hello"; String s2 = "hello"; String s3 = new String("hello"); System.out.println(s1 == s2); // true System.out.println(s1 == s3); // false String Pool the special memory region where Strings are stored by the JVM 위는 String Pool을 한 문장으로 설명한 것이다. 해석하면 JVM에 의해 문자열이 저장되는 특별한 메모리 공간이다. Java에서 문자열은 immutability를 가진다. 따라서 JVM은 String Pool을 사용하여 문자열 리터럴의 값을 하나만 저장하는 방식으로 메모리를 최적화 할수 있다. 이런 ..

type error error 타입은 비정상적인 상태를 나타낸다. Go는 try-catch-finally처럼 예외처리를 할 수 있는 구문이 없다. 대신 error 타입 값으로 에러 상태를 표현하고 처리를 한다. Go 에서는 Error() string 메서드를 가지고 있다면 에러로 사용될 수 있다. 위는 내장 타입이다. type error은 Error() string를 가지고 있다. 내장 인터페이스 타입인 error은 에러 상황을 나타내는 인터페이스 이고, 에러가 없다면 nil 값으로 나타낸다라고 적혀 있다. 위에는 에러 타입의 한 종류이다. PathError은 Error() string 메서드를 가지고 있다. Go에서 함수나 메서드의 마지막 반환 값으로 에러 상태를 리턴하는데, 에러가 발생하지 않았다면 ..

유닉스의 명령어에는 파이프(기호: | )가 있다. 파이프를 사용하여 쉘 명령어를 연결하면, 프로세스의 결과를 다른 프로세스에 전달하는 것이 가능하다. Go의 기본 라이브러리로 io.Pipe()가 제공된다. io.Pipe()는 *PipeReader과 *PipeWriter을 리턴하고 이를 사용하여 유닉스 스타일로 파이프 라인을 생성할 수 있다. *PipeWriter과 *PipeReader은 서로 연결되어 바로 결과가 전달된다. 파이프는 구조화 되지 않는 바이트 스트림이다. 따라서 파이프를 사용하면 데이터의 포맷을 선택하고 직렬화 및 역직렬화를 거쳐야하기 때문에 더 많은 가능성이 발생할 위험이 있다. 채널은 Go의 스트림이기 때문에 포맷이 정해져 있고 직렬화도 손쉽기 때문에 더 단순하다. 아래는 파이프라인을 ..

타임아웃 시간이 오래 걸리는 작업에 select문을 사용하여 타임아웃 기능을 쉽게 구현할 수 있다. time.After은 채널을 리턴한다. 이 채널은 인자로 받은 시간이 지난 뒤 리턴한 채널로 실제 시간을 전달한다. select를 사용하여 done 채널과 timeout 채널 case로 done 채널이 timeout 채널보다 먼저 data를 보내면 제 시간 안에 작업이 완료 된 것, 아니면 시간 초과가 난것이다. 타임아웃이 난 작업을 처리를 해 줘야 한다. 시간 초과가 발생했을 때 아무처리도 안할 수 있지만, 만약 작업이 리소스를 많이 사용한다면 작업을 종료하는 것이 좋다.

Go에는 고루틴과 채널 외에도 sync 패키지를 사용하여 병행 프로그래밍이 가능하다. sync 패키지에는 공유 메모리를 제어하는 뮤텍스(mutex), sync/atomic 패키지에는 원자성을 보장할 수 있는 연산이 있다. sync.Mutex 뮤텍스는 공유 데이터를 보호하기 위해 사용한다. 뮤텍스 구조체는 Lock, Unlock 함수를 제공한다. func (m *Mutex) Lock(): 뮤텍스 잠금 func (m *Mutex) Unlock(): 뮤텍스 잠금 해제 임계 영역(critical section)의 코드를 실행하기 전에는 뮤텍스의 Lock() 메서드로 잠금을 하고, 실행한 후에는 Unlock() 메서드로 잠금을 해제한다. 임계 영역 병렬 컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안 되는 영..

https://sdardew-valley.tistory.com/entry/Go-%EB%B0%B0%EC%97%B4-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8A%A4 [Go] 배열 & 슬라이스 Go는 데이터의 시퀀스를 다루기 위해서 배열과 슬라이스 타입을 사용할 수 있다. 배열: 길이가 고정된 시퀀스 슬라이스: 길이가 가변적인 시퀀스 배열과 슬라이스 비교 배열 슬라이스 길이가 고 sdardew-valley.tistory.com Go의 배열과 슬라이스는 위의 내용을 참고하시면 됩니다! 위의 코드는 정상적으로 실행되는 코드이다. main 함수의 numbers와 multiply의 파라미터 numbers 모두 슬라이스 타입이다. numbers의 모든 값이 factor의 배수만큼 거진 것을 확인할 수..

고루틴과 채널은 병행 처리를 위해서 사용되는 방법이다. 병행 처리 동시에 2개 이상의 작업이 실행되는 것 고루틴 (goroutine) Go 프로그램 안에서 동시에 독립적으로 실행되는 흐름의 단위. 스레드와 비슷한 개념. 고루틴과 스레드의 차이점 킬로바이트 정도의 아주 적은 리소스에서 동작 적은 리소스에서 동작하여 한 프로세스에 수천, 수만 개의 고루틴을 동작시킬 수 있음 정보를 공유하는 방식이 아닌 서로 메시지를 주고 받는 방식으로 동작 Lock으로 공유 메모리를 관리할 필요가 없음 고루틴을 생성하는 방법 go f(x, y) 고루틴에서 f(x, y)가 실행된다. func main() { fmt.Println("main 함수 시작", time.Now()) go long() go short() time.Sl..

다형성 다형성 다양한 타입의 객체가 같은 메시지를 통해 다양한 방식으로 동작하는 것 다른 언어에서는 메서드 오버로딩, 서브타이핑 등으로 다형성을 지원한다. Go에는 서브타이핑, 오버로딩이 없다. 대신 Go에서는 인터페이스를 통하여 다형성을 지원한다. 오버로딩 같은 이름의 함수이지만 매개 변수 등의 signature를 다르게 하여 정의한 것 서브타이핑 상위 타입을 하위 타입으로 대체할 수 있는 것 인터페이스는 메서드 signature의 묶음이다. Go는 이런 메서드에 따른 동작에 따라서 인터페이스와 is-a 관계를 형성한다. is-a 상속 관계이다. "그랜저는 자동차이다"는 is-a 관계이다. 그랜저는 자동차의 속성을 모두 가지고 있다. has-a 소유 관계이다. "자동차는 바퀴를 가지고 있다"는 is-a..
- Total
- Today
- Yesterday
- 2차 인터뷰
- 1차 인터뷰
- 확장 함수
- mysql
- 네이버 2022 공채
- Kotlin In Action
- java
- go 특징
- solidity
- postman tests
- 주생성자
- string
- postman
- Python
- graphql
- DGS Framework
- downTo
- hashcode
- python3
- pm.expect
- Basic Type
- Kotlin
- 코틀린
- Squash and merge
- pm.test
- 코딩테스트
- squash merge
- github
- postman collection
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |