Language 11

[Java] LinkedList 파헤쳐 보기

Java의 ArrayList의 실제 구현코드를 살펴보았던 이전 게시글에 이어서 LinkedList도 소스코드를 파헤쳐보자. (참고: 2021.10.06 - [Language/Java] - [Java] ArrayList 파헤쳐 보기) Doubly-linked list implementation of the List and Deque interfaces. LinkedList는 이전/이후의 리스트와 연결되어 있는 구조이다. 이는 다음과 같은 특징을 가진다. o element 갯수에 대해 정해진 limit 없음 o Reference Type만 가질 수 있음 o Thread Safe 하지 않음 ArrayList가 내부적으로 Object[]으로 이루어졌던거에 비해 LinkedList는 Node로 이루어져있다. 코드..

Language/Java 2021.10.06

[Java] ArrayList 파헤쳐 보기

Java 개발에서 Collection의 데이터 타입을 사용하면서 내부 코드를 볼 생각을 하지는 않았었는데, 직접 ArrayList 클래스를 살펴보며 어떻게 동작하는지 공부해보니 흥미로운 부분이 많았다. 여기서는 ArrayList의 생성자, 삽입/삭제/초기화/정렬 메소드 중심으로 정리해보려 한다. Resizable-array implementation of the List ArrayList란 Size가 변하는 배열을 말한다. 그리고 다음과 같은 몇가지 특징을 가진다. o 중간에 데이터를 삽입, 삭제하는 것이 가능 o Reference Data Type만 넣을 수 있음 o Thread Safe 하지 않음 그럼 코드를 한 번 살펴보자. o 인스턴스 변수 : ArrayList는 값을 담고있는 Object배열과 ..

Language/Java 2021.10.06

[Java] 자바에서의 다중상속과 인터페이스의 Default Method

Java는 다중상속을 허용하지 않는다. 자바를 사용하면서 당연하게 생각하는 규칙인데, 그렇다면 그 이유가 무엇일까? 그리고 정말로 자바에서 다중상속이 불가능한지 알아보자. 다이아몬드 문제 (Diamond Problem) 다음과 같은 구조에서 다중상속을 허용한다고 가정해보자. Father, Mother 클래스는 Parent 클래스의 추상메소드 funcA() 를 각각 구현한다. Child 클래스가 Father, Mother 클래스를 둘 다 extends 한다면, Child.funcA() 는 어떤 메소드를 상속받아야할지 알 수 없다. ==> 다중상속의 모호성으로 이를 금지한다. 인터페이스를 사용한 다중상속 (Default Method) 클래스의 상속과 반대로 인터페이스는 여러 개를 implements 할 수 ..

Language/Java 2021.09.18

[Java] Wrapper Class의 생성과 Cache

Java의 데이터 타입은 크게 Primitive Type (기본형), Reference Type (참조형) 두가지가 있다. Java의 기본형 변수는 참조형으로 바꿀 수 있는데 이를 Wrapper Class라고 한다. Wrapper Class는 왜 쓰는걸까? 사실 코딩을 하면서 개발자가 직접 기본형 -> 참조형으로 변수 타입을 변경(Boxing)하는 일은 많지 않은 것 같다. JDK 1.5버전 이후부터 자동으로 변수타입을 바꾸어주기 때문인데, 내부적으로는 Wrapper Class는 몇가지 특징을 가진다. 1) 다형성 자주 쓰는 java.util.*의 Collections 함수들은 대부분 Object 타입으로 매개변수를 받고, 반환한다. 마찬가지로 Generic Type도 마찬가지다. 기본형의 변수를 Wra..

Language/Java 2021.09.13

[Python] collections모듈 Counter 사용하기

(python ver.3.9.6 기준) class collections.Counter([iterable-or-mapping]) : 리스트의 원소들이 각각 몇 개 씩 존재하는지 카운팅하는 클래스 파라미터로는 *iterable / mapping (keyword = count, { "key" : "count"}) 같은 타입이 쓰인다. *iterable : 멤버값을 하나씩 return 할 수 있는 오브젝트로 for loop나 zip(), map() 등에서 쓰일 수 있다. list, str, tuple 등(sequence type) / dict, file object 등 (non-sequence type)이 이 포함된다. - Counter 생성 예 from collections import Counter c = ..

Language/Python 2021.07.04

[Python] 4_클래스

- 파이썬 클래스 기초 (생성자, 메소드, 클래스변수, 상속) # class # pass는 아무것도 수행하지 않는 문법. 임시 코드 class Sample: pass # Constructor (__init__) # 객체 생성시에 자동 호출 class Sample: def __init__(self, a, b): # self == 객체 자신/ #setdata 기능 self.a = a self.b = b # Method class Sample: def setdata(self, a, b): self.a = a self.b = b ### 사용 sample = Sample() sample.setdata(1, 2) # Use1 Sample.setdata(sample, 1, 2) # Use2 # sample.a == ..

Language/Python 2021.05.06

[Python] 파이썬에서 음수의 "//" 연산(Floor Division) 이 다른 값을 가지는 이유

파이썬(3.X)에서 / 나누기 연산은 float 결과값, //나누기 연산은 int 결과값을 가지는 차이가 있다고 생각하고 있었는데 음수에서 해당 연산을 사용했을 때, 다음과 같이 다른 결과가 나오는 것을 발견했다. print(-1//2)# >>> -1 print(1//2)# >>> 0 이유를 찾아보니, "//" 연산은 Floor Division(바닥함수)로 "실수 이하의 최대 정수를 구하는 함수" 로 정의된다. ==> 내림(round down) 즉, -1 < -1/2(=-0.5) < 0 이기 때문에 -0.5보다 작은 최대 정수인 -1 을 결과값으로 가진다. [참고]stackoverflow.com/questions/37283786/floor-division-with-negative-number Floor ..

Language/Python 2021.05.06

[Python] 파이썬에서 제곱 구하기-pow(), math.pow(), ** 의 차이

먼저 내장함수 pow() 와 math.pow() 는 다음과 같이 다른 함수임을 알 수 있다. import math print(pow is math.pow) # >>> False 파이썬에서 제곱을 구하는 세가지 방법의 차이를 비교해보자. 1. 내장함수 pow(base, exp [, mod] ) [특징 1] 밑, 지수, (옵션: 나머지계산) 을 파라미터로 받을 수 있다. --> math.pow에서는 세번째 옵션 파라미터를 받을 수 없다. --> pow(base, exp, mod) 로 쓰였을 때, 결과는 (base ** exp) % mod 와 동일하다. (단, 이때 base, exp는 정수형이어야함) [특징 2] pow의 결과값은 파라미터의 type에 따라 결정된다. print(pow(12,2))# >>> 1..

Language/Python 2021.05.06

[Python] 3_함수

- 함수 기초 ''' 파이썬 함수에서 매게변수 갯수가 정확하지 않을 때 ''' def func(*args):# * 붙이기 ''' 여러개의 결과값을 반환 (tuple) ''' def add_and_mul(a,b): return a+b, a*b res1, res2 = add_and_mul(3,4)# >>> res1 = 7, res2 = 12 res = add_and_mul(3,4)# >>> res = (7, 12) ''' # 함수정의시에 def func(a=b): 와 같은 식으로 초기값 설정가능. 선언시에 값을 설정하면 설정값으로 반영. 초기값 설정된 변수는 항상 맨 마지막 ''' # 람다(lambda) ### lambda 매개변수1, 매개변수2 ... : 매개변수를 이용한 표현식 ### return이 없이..

Language/Python 2021.05.03

[Python] 2_제어문

- if # if ### 참, 거짓을 판단하는 조건 뒤에 ':' ### 조건에서 수행할 문장은 반드시 들여쓰기 ### 조건 : ,==, and, or, not... ### 조건 : a in b, a not in b if cond == 1: print("one") elif cond == 2: print("two") else: print("else") res = "one" if cond == 1 else "two" # 조건부 표현식 (한줄) - for # for for a in arr: print(a)#case1 for (first, last) in tuple_: print(first + " " + last)#case2 for i in range(1,11): print(i)#case3 (range) - wh..

Language/Python 2021.05.02