본문 바로가기

장생농

(140)
자바/JAVA Collection Framework 생활코딩 강의를 듣고 적는 글입니다. 컬렉션 프레임워크는 여러 데이터를 효과적으로 처리하는 클래스(자료구조와 알고리즘)의 집합이다. java.util 패키지에서 제공한다. Collection은 객체의 저장을 뜻하고, Framework는 사용 방법을 정해놓은 라이브러리를 뜻한다. 컬렉션 프레임워크의 구조를 보면 Collection은 인터페이스고 단일 객체를 다룬다. Set과 List는 Collection을 상속받는 하위 인터페이스이다. 그리고 HashSet, ArrayList는 각각 인터페이스의 구현 클래스이다. 정확히는 AbstractSet, AbstractList가 구현하고 그걸 HashSet과 ArrayList가 상속받는다. List 컬렉션 배열과 비슷하게 객체를 인덱스로 관리한다. 배열과 차이점은 ..
자바/JAVA enum 열거 생활코딩 강의를 듣고 적는 글입니다. 자바의 데이터 타입 중 enum, 열거란 것이 있다. enum은 상수들의 집합이다. 그리고 사실상 클래스이다. 다음과 같이 선언한다. enum Fruit{ APPLE, PEACH, BANANA } 위 코드는 다음 코드와 동일하다. class Fruit{ public static final Fruit APPLE = new Fruit(); public static final Fruit PEACH = new Fruit(); public static final Fruit BANANA = new Fruit(); } 열거 타입을 통해 코드를 단순하게 해주고 관련있는 상수끼리 묶을 수도 있다. 또한 enum이라는 키워드를 통해 열거임을 확실하게 해준다. enum은 클래스여서 확장..
자바/JAVA 자신을 호출(생성)하는 객체 생활코딩 강의를 보면서 의문이 들었다. 저렇게 Fruit라는 객체에서 Fruit 타입의 static 객체를 생성한다. 여기서 생긴 의문 : APPLE 변수가 초기화 되면서 Fruit 객체가 생성이 되는데 그렇다면 그렇게 생긴 Fruit 객체가 또 APPLE, PEACH, BANANA 라는 변수가 생기고 각각 또 객체를 만들텐데 그렇다면 오버플로우가 발생해야 되는 거 아닌가? 재귀함수처럼 끝없이 생겨나니까 Java class instance recursive calling I have a very basic java theory question. Why the Employee class calls its self recursively in the following example? class Employee..
자바/JAVA 클래스 패스(Class Path) 생활코딩 자바 강의를 듣고 적는 글입니다. 자바 프로그램을 실행할 때 클래스패스라는 옵션으로 클래스의 경로를 지정해 클래스를 로드할 수 있다. 예를 들어 클래스1과 클래스2가 있다고 하자. 클래스1은 클래스2의 객체를 생성해 프로그램을 실행한다. 그런데 클래스2가 클래스1과 다른 디렉토리에 있다면 어떻할까? 같은 디렉토리로 이동한다. 클래스 패스 옵션을 준다. 1번 방법은 쉽다. 2번 방법을 알아보자. (이미 클래스파일로 컴파일 됐다는 가정 하에) java -classpath "경로후보1:경로후보2:경로후보3" 클래스1.class ==> 클래스1을 실행하는데 필요한 클래스 파일을 경로후보1, 경로후보2, 경로후보3에서 찾아라! 라는 뜻이다. 콜론은 경로 구분자이다. 당연히 클래스1의 경로도 경로 후보에 ..
파이썬으로 주식 백테스팅 파이썬으로 통해 백테스팅하는 코드를 12월에 만들었다. 일봉을 제공하는 라이브러리 pykrx로 데이터를 구해 db로 만들고 원하는 조건에 맞는 종목을 찾고 당일 매매하는 로직을 짰다. 백테스팅 결과는 망했다. 그렇다고 다 그런건 아니고 매매 로직을 잘 짠다면 충분히 의미있는 데이터를 얻을 수 있을 것이다. 예를 들어 위에 표는 미리 선정한 종목을 시가에 사서 고가가 +2프로 보다 크거나, 저가가 -4프로 보다 작으면 파는 매매로직이었는데(종가매도) 엄청난 수익률이 나왔다. 실제 데이터는 -4프로를 찍고 +2프로를 가는 경우도 있다. 그래서 실제로 저 로직으로 한다면 매일 손해일 것이다. 백테스팅 라이브러리는 많이 있는데 내 마음대로 설정하기가 번거로워 직접 DB로 하루하루 조회해서 테스팅 했다 cheog..
자바/JAVA 제네릭 생활코딩 강의를 듣고 적는 글입니다. 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 정하는 기법이다. 클래스를 선언할 때, 클래스 이름 뒤에 다이아몬드 꺽쇠 안에 데이터 타입 변수를 선언한다. 보통 T라고 한다. 이 T는 정해지지 않은 데이터 타입이다. 그리고 이 클래스로 객체를 만들 때, T의 구체적인 타입을 정할 수 있다.(복수로 사용할 수 도 있다.) 다음과 같이 사용할 수 있다. p1을 생성할 때는 꺽쇠 안에 String을 넣었다. 그러면 p1.info의 타입은 String이 된다. 마찬가지로 p2.info의 타입은 StringBuilder가 된다. class Person { public T info; } Person p1 = new Person(); Person p2 =..
자바/Java 논리, 비트 연산자, 이름을 갖는 반복문 자바 공부하면서 정리 안했던 것들 추가로 정리하는 중. 논리 연산자: true, false에 대해서 연산할 때 사용함 && : AND || : OR ! : NOT 비트 연산자: 비트끼리 연산한다. & : 비트 AND 연산 | : 비트 OR 연산 ^ : 비트 XOR 연산(다르면 1) ~: 비트 반전 NOT --> 부호가 바뀜 > N : N만큼 오른쪽 쉬프트 연산(왼쪽 쉬프트하고 같음.) >>> N: N만큼 비트를 오른쪽으로 이동시키고, 새로운 비트는 0이됨. --> 이건 부호비트까지 쉬프트 됨. 이름을 가지는 반복문 break 는 지금 실행중인 반복문만 빠져나갈 수 있다. 중첩된 반복문에서 다른 반복문까지 빠져나가고 싶을 땐 반복문에 라벨(label)을 붙여 break "라벨명"으로 해당 반복문을 빠져나갈..
자바/Java 컬렉션 강의 정리(2) 이 글은 뉴렉쳐님의 강의를 듣고 정리하는 글입니다. youtube.com/playlist?list=PLq8wAnVUcTFWKOIbvo18pJZ9zsxtXz_-k Object 타입의 배열을 만들면 모든 타입의 데이터를 만들 수 있지만, 반환할 때는, 어떤 타입인지 몰라 사용하기 어렵다. 그래서 "제네릭 Generic"이란 것이 등장했다. 제네릭은 데이터 타입을 일반화한다는(generalize) 것이다. 컬렉션을 만들 때, 자료형이 비어있는 리스트를 만든다. 그리고 타입을 정해준다. -> 자료형마다 컬렉션을 만드는 게 아니다. 이렇게 만든 컬렉션은 데이터를 넣고 뺄 때, 지정된 타입으로 변환해준다. 실제로는 Object 타입의 배열이 선언돼있지만, 지정된 타입으로 바꿔는 것이다. 형식을 전달받기 위해 키워드..