일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CSS
- node
- 모두가 기다리는 사람
- 공헌감
- sentry
- 참조 계수
- 부자의그릇
- Infresh
- 월칙
- 과제의 분리
- docker
- HTML
- 이펙티브 자바
- Container
- 도파민형 인간
- try width resources
- 뉴 컨피던스
- 히든 스토리
- apache kafka
- 레퍼런스 복사
- ESG
- 쿠버네티스
- try-with-resources
- 칭기즈칸의 위대한 장군 수부타이
- java
- 수부타이
- kubernetes
- 비메모리 자원
- 아웃풋법칙
- colllection
- Today
- Total
목록Programming (64)
Hi
Thread.sleep(3000); // 최근에는 아래를 많이 쓴다. Java8부터TimeUnit.SECONDS.sleep(3);
CopyOnWriteArrayList : ArrayList에 여러 스레드가 접근하여, Concurrent Modification Exception을 일으키게 되는데 이때 ArrayList 자체를 동기화 시켜주는 것 volatile : 메모리 접근시, 최적화 되어있으면 캐시에서 데이터가 저장되기 때문에, 메모리까지 내보내지 않기 때문에 멀티쓰레드시 오류 가능성이 있다. 이 때 최적화를 하지 않기 위한 키워드이다.
git bash : 리눅스 명령어 기반 cml 창으로 컴퓨터 관리 프로그램 gitgit init : 시작git status : 현재 상태git add 파일 추가하기vim 으로 수정하기(맥 vi와 vim 거의동일한듯) -(협동)버전 관리를 위한, 내 이름 설정-git config --global user.name Sxxxxxxxxxxx-(협동)버전 관리를 위한, 내 이메일 설정-git config --global user.email hxxxxx@gmail.com git commit : vim이 실행되면서 버전메세지를 남길 수 있도록 한다.git commit -a(--all) : 수정된 파일들을 모두 올린다.git commit -m "메세지내용" : vim으로 안넘어가고 메세지를 바로 등록시킬수 있음.git..
[Linux - Ubuntu] CLI - 커맨드 라인 인터페이스 C 언어 - 컴퓨터 구조 / OS System Programming / Network Programmming [IDE - IntelliJ] Java - GUI - 그래픽 유져 인터페이스 객체 지향 프로그래밍 디자인 패턴 - 23가지 (에릭감마 외 3명) ----------------------------- Mobile App(Android(Kotlin) / iOS(ObjC / Swift)) Web Client(HTML/CSS/Javascript/Node.Js) Game Prorgramming(Unity, C#) Server Programming(Node.js / Go / Docker) OS(운영체제) : 목적? 자원 관리 물리적 자원 - C..
package io.thethelab; // Main.java // => 이 파일안에 Main 이라는 클래스가 존재합니다. // 파일의 맨 첫 라인에는 해당 클래스가 포함되어 있는 패키지를 선언해야 합니다. // => io.thethelab.Main 이라는 이름으로 해석됩니다. // Package // 목적: 이름 충돌을 방지하기 위해서 사용합니다. // 사용방법 // 1) 회사(소속)의 도메인을 거꾸로 사용한다. // 2) 모두 소문자로 작성한다. // struct User { // char* name; // 구조체 멤버 변수 // }; // 함수 // void init_name(struct User* user) // { // strcpy(user->name, "Unnamed"); // } // cla..
스택을 만들어보자 package io.thethelab; // C 의 타입 // 1) built-in type // int, char, double, float, short, long ... // 2) user defined type // struct, union, enum // 3) call by value // call by reference // => pointer // 4) const // Java 의 타입 // 1) primitive type // int, char, double, byte, boolean // => call by value // 2) reference type // Array, class, interface, enum // => call by reference // => 힙에 ..
package io.thethelab; // 접근 지정자 // public // protected // private // 정보 은닉 // : 클래스의 속성이 연산을 통해서만 변화될 수 있도록 // 제어할 수 있다. // 에러의 전파 // => 예외(Exception) public class Stack { private static final int STACK_SIZE = 10; private int top; private int[] data; Stack() { top = 0; data = new int[STACK_SIZE]; } void push(int n) { if (top == STACK_SIZE) { throw new RuntimeException("stack overflow"); } data[t..
스택을 만들어보자 public class User { String name; int age; // void init() { // name = "Unnamed"; // age = 0; // } // 생성자: 객체가 생성된 이후에 호출되는 함수. // => 객체의 초기화를 담당한다. // 인자가 없는 생성자: 기본 생성자 User() { System.out.println("User()"); name = "Unnamed"; age = 0; } // 인자가 있는 생성자 // this(self): 자기 자신을 가르키는 레퍼런스 User(String name, int age) { this.name = name; this.age = age; } void print() { System.out.printf("%s %d"..
스택을 만들어보자 package io.thethelab; // 1. 내부의 필드는 반드시 private 으로 만드는 것이 // 좋다. // 2. 필드의 속성은 메소드를 통해 변경하는 것이 좋다. class Printer { private String printerName; public void setName(String name) { this.printerName = name; } public void print() {} } class User { String name; int age; void foo() { Printer printer = new Printer(); // printer.name = "Hello"; printer.setName("Hello"); } } public class Program..
package io.thethelab; // 상속 // 다형성 // 오버라이딩 // 인터페이스 class Color { private int red; private int green; private int blue; // RED, GREEN, BLUE, BLACK, CYAN private Color(int red, int green, int blue) { this.red = red; this.green = green; this.blue = blue; } static Color rgb(int red, int green, int blue) { return new Color(red, green, blue); } static Color hsb(int hue, int saturation, int brightnes..
C - Windows API Linux - Gnome ToolKit C++ Linux - Qt(KDE) Java Swing / SWT / AWT / ... => Java FX ---------------------------- Processing - GUI Framework C(dll/so) / Java(jar) Platform - 기반 환경 '언어', '운영체제', .... Library - 클래스 / 함수 / 도구의 집합 Engine - 라이브러리 집합 Framework - 라이브러리 집합 법칙 / 흐름 XML + C# XML + Java HTML + javascript
스택을 만들어보자 class User { private String name; // 인스턴스 필드 private int age; private static int a; // 정적 필드(클래스 필드) // class Printer { static class Printer { void print(User user) { System.out.println("User.Printer.print()"); System.out.println(user.name); } } void print() { Printer printer = new Printer(); printer.print(this); } } // interface - Cloneable // => mark up interface class Point implemen..
스택을 만들어보자 class User { // 1. 상수 public static final int STATE_RUNNING = 0; public static final int STATE_STOP = 1; public static final int STATE_INTERRUPTABLE = 2; // 문제점 // 1. 잘못된 값을 대입하였을 경우, 컴파일 타임에 감지가 어렵다. // 2. switch / else if 의 코드가 발생한다. // => Enum private int state = STATE_STOP; void process() { switch (state) { case STATE_RUNNING: System.out.println("User running"); break; case STATE_S..
스택을 만들어보자 // FILE Stream // Network Stream // => InputStream // => OutputStream import org.junit.Test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Program_0308 { public static final String SRC_PATH = "/Users/..
import org.junit.Test; // 1. interface(행위) / abstract(상태) // 2. interface 장점 // LinkedList l = new LinkedList(); // List l = new LinkedList(); // => 교체 가능한 유연한 설계 // 3. Abstract class 에도 구현을 제공할 수 있다. // DIP: 클라이언트는 구체적인 타입보다는 인터페이스나 추상 // 클래스에 의존해야 한다. // 4. 예외 // : 실패를 전달하는 방법 // 5. Interface // 익명의 클래스 // => 함수 포인터 // => : 함수를 별도의 레퍼런스에 저장할 수 없다. // => 함수를 일급 객체로 취급하지 않는다. // Java 8 -> 메소드 레퍼..
스택을 만들어보자 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; // 오직 한개의 메소드만 가지는 인터페이스 @FunctionalInterface interface Predicate { boolean test(User user); // boolean foo(); } // staic 함수를 모아놓은 클래스 final class Users { // private 생성자: 객체의 생성을 금지 private Users() { } static List filter(List users, Predicate predicate) { List result = new Ar..
import org.junit.Test; import java.util.*; import java.util.function.Function; // 아래 코드의 문제점 3개 // Object[] data = new Object[10]; // => 클래스 계층의 시작. // 모든 객체가 가져야 하는 특징 // 부모의 참조 변수는 자식의 객체를 참조할 수 있다. - Upcasting // 1. list.add(new Integer(5)); // -> wrapper class // => 원시 타입을 객체로 다룰 필요가 있기 때문에 // list.add(5); // -> list.add(Integer.valueOf(5)); // 2. Generic 이 아니다. // : Java5 - Auto Boxing // A..
스택을 만들어보자 import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; // User를 정렬 가능하게 만들고 싶다. // 1. Comparable 인터페이스를 구현해야 한다. // class User implements Comparable { class User { private String name; private int age; String getName() { return name; } int getAge() { return age; } User(String name, int age) { this.name = name; this.age = age; } @Overr..
hashCode / equals 객체의 동등성에 판단에 사용되는 메소드 스택을 만들어보자 import java.util.*; class User implements Comparable { // class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + ..
스택을 만들어보자 package io.thethelab.data; import java.lang.reflect.Method; // Reflection의 문제점 // : 잘못 사용한 경우, 성능이 느리다. class User { private String name; private int age; public User() { this("Unnamed", 0); } public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "U..
a : Data b = a // copy 복사 정책 2가지 1. 레퍼런스 복사(얕은 복사) * 장점: 속도가 빠르고, 메모리도 덜 쓴다. * 단점: 객체의 파괴 시점을 결정할 수 없다. => 댕글링 포인터 해결방법: 참조 계수에 의한 객체 수명 관리 2. 값 복사(깊은 복사) * 장점: 객체의 파괴 시점을 결정할 필요가 없다. * 단점: 데이터의 크기가 클 수록 속도가 느려지고, 그만큼의 메모리도 소모해야 한다. Reference Counting => 참조 계수 객체의 생성과 소멸 => StringBuilder - 문자열이 수정될 때마다 객체의 생성을 만드는 것을 방지 Integer.valueOf - 같은 숫자는 객체를 생성하지 않고 참조할 수 있도록 한다. 3. 참조 계수 관리하는 2가지 방법 1. G..
Exception * Checked Exception: => 반드시 사용자가 예외 처리를 하던가, 외부로 던져야 한다. => IOException * Unchecked Exception: => 처리하지 않아도 되지만, 예외 발생시 프로그램이 종료된다. 스택을 만들어보자 import java.io.*; class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } // Java 7: Try with Resource // C#: using 구문 public void save(String filename) { try (FileOutputStream fos..
U : Ctrl + zCtrl + r : REDO YY : Ctrl + c P : Ctrl + v DD : Ctrl + x v : 블록지정 (블록지정후) : 탭 단위 앞으로 뒤로 밀기 Shift :+ { } : 공간 기준 이동^ : home$ : endgg : 맨 위G : 맨 뒤 화면이동 : split / split 파일이름. Ctrl + ww/wW : 커서 이동 설정창 : vi ~/.vimrc Command + . : home, end 터미널Cd : 디렉토리에 들어감Mkdir : 디렉토리 만들기Rm : 파일삭제Rm -r : 폴더삭제Cat + 파일이름 : 파일내용 보여주기 Ctrl + c : 무한루프에서 빠져나가기 -g : 디버그
비메모리 자원에 대한 누수가 명시적인 종료 메소드를 호출하지 않을 경우, 발생할 수도 있고 아닐 수도 있다. => 자바 클래스 라이브러리는 비 메모리 자원에 대한 파괴를 finalize를 통해서 제공하고 있다. 1) 호출 시점이 명확하지 않다. : GC 의 발생시점이 언제인지 알 수 없다. 2) finalize의 호출이 보장되지 않는다. : 누수가 발생할 가능성이 있다. 스택을 만들어보자 class User implements AutoCloseable { private String name; private int age; // File: 비메모리 자원 // => User라는 객체를 사용할 때 반드시 명시적인 종료 메소드를 제공해야 한다. // => Try with Resources 문법을 사용할 수 있도..
Buffer와 Cache는 CPU와 메인메모리 사이에 있으며, Buffer : 쓰거나 읽을 데이터를 '미리' 가져와 저장. Cache : 사용 했던 데이터를 또 사용 할 가능성이 있으면 캐시에 저장
대부분의 규칙은 몇 개의 기본적 원칙 - 명료함(clarity)과 단순함(simplicity) 각 모듈은 사용자가 예상할 수 없는 방식으로 동장하면 안됨(가능한 작아야 하지만, 그렇다고 너무 작아져서는 안된) 모듈 - 재사용 가능한 컴포넌트. (개별 메소드 뿐 아니라 여러 패키지로 구성된 복잡한 시스템까지 아우름) '코드'는 복사하기보단 재사용해야 한다. 모듈 간 의존성은 가능한 줄여야 한다. 오류는 코드에 끼어든 즉시, 바람직하게는 컴파일 시점에 탐지가능 하도록 한다. 자바는 네 가지 유형의 자료형(type)을 지원. - 인터페이스(interface. 어노테이션 포함), 클래스(class, 열거 자료형 enum 포함), 배열(array), 기본 자료형(primitive type) 참조 자료형 (refe..
스택을 만들어보자 Vector, HashTable, StringBuffer => 멀티 스레드 안정성 잘못 설계된 라이브러리의 특징 : 동기화의 정책을 라이브러리가 결정하면 안된다.List, Map, StringBuilder스레드 안정성이 없다. int n = 0; ++n; => 원자적이지 않기 때문에, 문제가 발생한다. import java.lang.ref.SoftReference; class User { private String name; private int age; private String cache = null; public User(String name, int age) { this.name = name; this.age = age; } @Override public String toStri..
스택을 만들어보자 Stack을 만들어 보자. 1. List를 한쪽 방향으로 넣거나 빼면 스택이다. 2. 기존 클래스(ArrayList, LinkedList)를 재활용해서 만들어보자. 상속: is-a 포함 현대적인 객체 지향 설계에서는 상속을 재사용을 위해 사용하지 않는다. 상속의 목적? : 다형성 4. 상속의 문제점 => 깨지기 쉬운 기반 클래스의 문제기존 클래스의 인터페이스를 변경해서 새로운 클래스처럼 보이게 하는 설계 방법 => 어댑터(Adapter) import java.util.*; //import java.util.Stack; // 라이브러리를 설계할 때 // : 사용하기 편리하게 해야 한다. // 잘못 사용하기도 어렵게 만들어야 한다. // Generic // : 알고리즘은 동일한데, 타입만 ..
순회 순회(Traverse) => Stack을 다른 사람들이 내부 구조를 알지 못한다고 하더라도 순회를 하게 하고 싶다.컬렉션(Collection)의 내부 구조에 상관없이 요소를 순회(열거)하고 싶다 => Iterator나의 컬렉션이 Iterator를 제공하고 있다. => Iterable반복자(Iterator)를 사용할 때 주의할점 => 순회 동안 절대 내부 요소에 크기의 변경이 발생하면 안된다. : Concurrent Modification Exception import org.junit.Test; import java.util.Iterator; import java.util.Stack; // Iterator -> Enumerator // Iterable -> Enumrable class CountDo..