목록programing-languages (18)
yeonuel-tech

안녕하세요 요번 데브 캠프 파이썬 수업 중에 원장님께서 또 재미있는 질문거리를 던져주셨습니다 “파이썬에 OrderedDict(자바의 LinkedHashMap)은 순서가 보장되는데 내부적으로 어떻게 구현되었을까?”이를 풀어나가기 전에 우리는 큰 틀에서 자료구조를 파악하는 것이 중요합니다자료구조는 큰틀에서 보면 3가지로 구분할 수 있습니다 List - 순서 o 중복 o Set - 순서 x 중복 xMap - 순서 x 중복 x(키 값 중복 안됨 값은 중복 허용) Map 에서는 어째서 순서가 유지되지 않을까요? 바로 해시함수를 통해서 해시 테이블에 특정 위치를 할당하기 때문입니다. 간단한 예시로 해시함수를 다음과 같이 정의하겠습니다(해시 테이블의 크기는 4로 가정)h(k) = k % 4그리고 다음 리스트에 저장된..

파이썬은 동적 언어이다. 즉, 컴파일이 없고 인터프리터가 존재하는 언어이다.해당 언어의 가장 큰 장점은 유연함이다. 런타임 시점에 타입을 변경하거나 메서드를 추가하는 작업을 할 수 있다. 오버로딩이란? "같은 이름의 메서드를 여러개 정의하는 것"오버로딩의 조건으로는 크게 3가지가 있다.- (1) 메서드 이름이 같아야함- (2) 매개변수의 개수 및 타입이 달라야함- (3) 반환 타입이 같아야함 오버라이딩이란? "조상에서의 메서드를 자손에서 재정의하는 것"오버라이딩의 조건으로는 크게 3가지가 있다.- (1) 메서드의 선언부가 일치해야함- (2) 자손에서 조상 보다 접근 제한자가 좁으면 안됨- (3) 자손에서 조상보다 더 큰 범위의 예외를 선언할 수 없음 본론으로 들어가서 오버로딩은 가능할까? 불가능하다.생..

JVM에는 String Pool이 존재하고 거기에 등록된 값들을 공유하는 구조이다. 즉, Flyweight 패턴이 적용됐다고 볼 수 있다. String은 기본형 데이터 타입이 아니다. 참조형 데이터 타입이다. 이 말은 String 또한 인스턴스이고 new 연산자를 통해 인스턴스를 생성해야한다. 하지만, String은 예외적으로 리터럴을 할당하더라도 해당 값을 갖는 인스턴스가 생성된다. 즉, String을 생성하는 방식은 크게 두 가지가 있다. 첫 번째로 new 연산자를 사용하는 방법과 두 번째는 리터럴을 할당하는 방법이다. 더 좋은 방식은 당연히 후자이다. 왜냐하면 new 연산자로 String을 생성하게 되면 매번 새로운 인스턴스가 생성되기 때문이다. 하지만, 리터럴로 할당하는 방식을 사용하면 매번 새로..
상속을 지양하고 포함관계와 다형성을 활용하기 위해 등장했다 자바에서는 상속이 있다. 상속이란? 코드를 재사용하기 위함, 하위 클래스가 상위 클래스의 코드를 재활용하는 것 하지만, 상속에는 다음과 같은 문제점이 있다. 하위 클래스에서 상위 클래스의 멤버를 사용하는 경우 상위 클래스의 정보를 정확하게 인지해야한다. 이는 하위 클래스를 통해 상위 클래스로 접근할 수 있는 경로를 만들기 때문에 캡슐화 파괴 발생 가능하다 물론, 단순하게 확장만 하기위해 상속을 사용하는 경우에는 위의 문제와 관련이 없다. 예를들어서, Template Method 패턴이 있다. 또 이 문제를 방지하기 위해 등장한 클래스 타입 Sealed Class가 있다. Sealed Class란? 자손의 개수를 제한하는 클래스이다. 즉, 외부에서..

Runable 은 전략패턴, Thread는 템플릿 메서드 패턴 각 패턴 정의 탐구 결론

자바스크립트를 공부하다가 변수에 값을 재할당 할 때 내부적으로 발생하는 과정이 자바와 다르다. 당연한 얘기이다 왜냐하면 자바스크립트는 약타입 언어로 동적으로 타입이 결정되고 자바는 강타입 언어로 런타임 시점 이전에 타입이 결정된다(컴파일러의 기능 중 하나는 타입 체크가 있음) 일단 알고가야 하는 사실이 있다. 자바스크립트는 동적 타입 언어이다. 이는 변수를 선언할 때 변수가 가르키는 메모리가 할당 되는 것이 아니라 변수에 값이 할당됐을 때 메모리가 확보된다. (선언은 정보만 제공, 정의하는 시점에 메모리 확보) 왜 선언 시점에 메모리를 할당하지 않는 것일까? 그 이유는 바로 동적 타입 언어이기 때문이다. 변수를 선언한 이후에 변수에는 여러가지 타입의 값을 할당할 수 있다. 이는 변수가 가르키는 값의 타입..