글 전체보기
-
java generic(1)대학/객체지향프로그래밍 2022. 12. 9. 23:03
하나의 코드를 다양한 타입의 객체에 재사용하는 객체 지향 기법으로 타입을 변수로 사용한다. (c++의 template와 유사) 단, 기초타입을 변수로 사용할 수 없다. 제네릭은 컴파일할 때 타입을 점검하기 때문에, type safety를 보장하여 실행 도중 발생할 오류를 방지한다. 또한 불필요한 타입 변환이 없기 때문에, 프로그램 성능에 도움을 준다. (타입 매개변수를 타입 인자로 대체할 뿐) class Gen { T ob; Gen(T o) { ob = o; } T getOb() { return ob; } void showType() { System.out.println("Type of T is " + ob.getClass().getName()); } } class GenDemo { public stat..
-
java transient / volatile / instanceof / native / assert대학/객체지향프로그래밍 2022. 12. 9. 22:12
- transient 자원에 대한 특별한 키워드로 오브젝트를 디스크에 저장, 또는 객체를 바이트 스트림으로 변환(직렬화)해 네트워크로 전송시 특정 변수를 제외한다. class T { transient int a; int b; } 이 코드의 경우 a가 있다는 것은 알려줄 수 있지만, a에 어떤 값이 저장되었는지는 알려주지 않는다. - volatile 지정된 변수가 스레드에 의해 변경될 수 있음을 표시한다. public class SharedObject { public int counter = 0; } 기본적으로 메모리의 counter을 cpu cache에 복사한 후 스레드는 이 cpu cache에 접근한다. 따라서 두 개의 스레드는 각각 counter 복사본에 접근하기 때문에 실제 메모리에 값을 쓸 때 충..
-
java I/O대학/객체지향프로그래밍 2022. 12. 9. 21:46
java는 입출력을 stream을 통해 처리한다. (FIFO 구조) 단, 한 번에 열 수 있는 스트림 개수가 정해저 있고, 동일한 파일은 둘 이상의 스트림으로 열 수 없다. 스트림을 데이터를 읽는 형식에 따라 아래의 두 종류로 나뉜다. 1. 바이트 스트림: 입출력을 바이너리 데이터로 다룬다. 2. 문자 스트림: 입출력을 문자 단위로 다룬다. 스트림은 보통 버퍼(메모리)와 함께 쓰이는데, 중간에 버퍼를 두는 이유는 스트림과 프로그램 간에 데이터를 효율적으로 전송하기 위함이다. (특히, 입출력 장치와 프로그램 사이 동작 속도가 크게 차이날수록 버퍼를 사용하는게 효율적이다) import java.io.*; class BRReadLines { public static void main(String[] args)..
-
java 열거형 / 박싱 / 어노테이션대학/객체지향프로그래밍 2022. 12. 9. 21:16
- 열거형 (enumeration) 이름을 가진 상수들의 리스트 enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland } 열거형: Apple 열거형 상수: Jonathan, GoldenDel ... Apple ap; switch(ap) { case Jonathan: ... case Winssap: ... } 열거형은 class타입으로 간주되지만, 객체를 생성하지는 않는다. (new 키워드 미사용) for (Apple i : Apple.values()) { System.out.println(i); } System.out.println("RedDel value: " + Apple.valueOf("RedDel")); // Jonathan // GoldenD..
-
분산 환경 워크플로서비스 공부/Git 2022. 12. 6. 02:34
이 포스트와 사용된 사진은 아래의 책 내용을 기반으로 작성하였습니다. GitHub - progit/progit2-ko Contribute to progit/progit2-ko development by creating an account on GitHub. github.com 또한 크리에이티브커먼즈에 의거 CC-BY-NC-SA를 따릅니다. - 커밋 가이드 라인 $ git diff --check 이 명령어를 통해 불필요한 공백문자에 대한 검사를 진행할 수 있다. $ git log --no-merge issue54..origin/master issue54..origin/master 문법은 히스토리를 검색할 때 뒤의 브랜치(origin/master)에 속한 커밋 중 앞의 브랜치(issue54)에 속하지 않은 ..
-
Git 명령어 정리 - 리모트 브랜치 편서비스 공부/Git 2022. 12. 6. 00:49
이 포스트와 사용된 사진은 아래의 책 내용을 기반으로 작성하였습니다. GitHub - progit/progit2-ko Contribute to progit/progit2-ko development by creating an account on GitHub. github.com 또한 크리에이티브커먼즈에 의거 CC-BY-NC-SA를 따릅니다. 설명보단 브랜치 상태와 명령어에 따른 변화를 보여드리겠습니다. - 리모트 브랜치 $ git commit -am "A" $ git commit -am "B" 로컬과 서버의 커밋 히스토리는 독립적으로 움직입니다. 서버에서 커밋이 일어났다고 해서 로컬에 origin/master가 리모트의 커밋 히스토리를 따라가지 않습니다. git fetch origin 명령어를 통해 ori..
-
Git 명령어 정리 - 로컬 브랜치 편서비스 공부/Git 2022. 12. 5. 23:33
이 포스트와 사용된 사진은 아래의 책 내용을 기반으로 작성하였습니다. GitHub - progit/progit2-ko Contribute to progit/progit2-ko development by creating an account on GitHub. github.com 또한 크리에이티브커먼즈에 의거 CC-BY-NC-SA를 따릅니다. 설명보단 브랜치 상태와 명령어에 따른 변화를 보여드리겠습니다. - 브랜치 생성, merge, 삭제 $ git checkout -b iss53 or $ git branch iss53 $ git checkout iss53 $ vim index.html $ git commit -am "add a new footer [issue 53]" $ git checkout master..
-
Graph대학/자료구조 2022. 12. 5. 21:39
Graph 그래프는 트리와 마찬가지로 비 선형적 자료구조로 node와 노드를 잇는 link의 집합으로 구성된다. 트리와 가장 큰 차이점은 그래프의 노드는 어떠한 패턴으로 연결되도 상관 없다는 것이다. (심지어 비어있거나, 연결이 아예 안된 노드도 존재할 수 있음) 노드의 구현과 탐색에 앞서 노드의 용어부터 정리하고 가자. Path: vertex들의 순서나열. e.g. path of v0 to v2: e0 e1 / e0 e2 e3 e5 / e4 e5 / e4 e3 e2 e1 Cycle: 출발 vertex = 도착 vertex인 path Multiple edges: 같은 두 vertex 사이 2개 이상의 edge가 연결된 것. Simple Graph: loop, multiple edges가 없는 graph ..