분류 전체보기

    [개발환경] 2일차 Gradle

    Gradle 안드로이드를 위해 만들어진 빌드 툴 장점: 스크립트 언어기 때문에 좀 더 유연하게 개발을 할 수 있다. 멀티 프로젝트 지원. 단점: 빌드 스크립트 언어와 DSL에 대한 학습 필요. gradle의 스크립트 초기화 스크립트: init.gradle 설정 스크립트: settings.gradle 빌드 스크립트: build.gradle build.gradle: 라이브러리에 내 프로젝트가 의존한다면 의존성 설정도 여기에 넣음 필요한 의존성을 끼워넣으면 된다. 라이브러리, 프레임워크 라이브러리와 프레임워크의 차이?! 둘 다 누군가가 만들어 놓은 걸 쓰는 건 동일하지만.. 라이브러리는 나의 코드와 상대방의 코드를 호출해야 하는 경우 내가 주도권을 가지고 상대방의 코드를 호출하는 경우 log라는 라이브러리에 ..

    [연결 리스트]

    포인터로 연결 리스트 만들기 class Node{ E data; //데이터를 참조 Node next; //다음 노드를 참조 } Node는 데이터용 필드인 data와는 별도로 자기 자신과 같은 클래스형의 인스턴스를 참조하는 (가리키는) 참조용 필드 next를 가진다. (이런 클래스 구조를 자기 참조 (self-referential)형이라고 함) Node는 제네릭으로 구현되므로 데이터형 E는 임의의 클래스형이 허용된다. 필드 data의 자료형인 E가 참조형이므로 클래스형 변수 data가 나타내는 것이 데이터 그 자체가 아니라 데이터를 넣어 두는 인스턴스에 대한 '참조'이기 때문이다. 👉 다음 노드를 참조하는 next를 뒤쪽 포인터이다. 뒤쪽 포인터 next에 넣어 두는 것은 다음 노드에 대한 참조이다. 다음..

    스레드

    큐는 내가 처리한 데이터 대부분이 줄을 세워서 순차적으로 처리가 된다. 큐를 구현할때 배열, 링크드 리스트로 구현하는 방법, 여러개가 있겠지.. 알아야할 것은 큐다. 어떠한 프로그램을 돌리는데 같은 것을 수 없이 함. 프로세스에 올리면 영역을 계속 같은 걸 써야하잖아 감당이 안되기 떄문에 등장한 개념이 스레드. 스테틱, 힙, 코드를 공유함. 별도로 안 잡아도 됨. 하지만 스택 영역은 동작과 밀접한 연관이 있기 때문에 같이 잡을 수가 없다. 레지스터도 공유 불가능. 스레드를 쓰면 문제는 static, heap은 공유한다. static 영역을 공유하면 여러 코드가 한꺼번에 공유 영역에 접근할 수 있음. 스레드 1이 참고 중인 영역을 스레드2가 바꿔버리면 문제가 생긴다. 그래서 생긴 개념이 락 어떠한 자원을 ..

    [스레드] - sleep, join, wait, interrupt, notify, notifyAll, yield

    일시 정지로 가기 위한 메소드 & 벗어나기 위한 메소드 구분 메서드 실행 일시 정지로 보냄 sleep(long millis) 주어진 시간 동안 스레드를 일시 정지 상태로 만든다. 주어진 시간이 지나면 자동적으로 실행 대기 상태가 된다. join() join() 메서드를 호출한 스레드는 일시 정지 상태가 된다. 실행 대기 상태가 되려면, join() 메서드를 가진 스레드가 종료되어야 한다. wait() 동기화 블록 내에서 스레드를 일시 정지 상태로 만든다. 일시 정지에서 벗어남 interrupt() 일시 정지 상태일 경우, interruptedException을 발생시켜 실행 대기 상태 또는 종료 상태로 만든다. notify() notifyAll() wait() 메서드로 인해 일시 정지 상태인 스레드를 실..

    [스레드] 스레드 동기화, 동시성 제어

    스레드 동기화 멀티 스레드는 하나의 객체를 공유해서 작업할 수도 있다. 이 경우, 다른 스레드에 의해 객체 내부 데이터가 쉽게 변경될 수 있기 때문에 의도했던 것과는 다른 결과가 나올 수 있다. 예시) User1Thread는 Calculator 객체의 memory 필드에 100을 먼저 저장하고 2초간 일시 정지 상태가 된다. 그동안 User2Thread가 memory 필드값을 50으로 변경한다. 2초가 지나 User1Thread가 다시 실행 상태가 되어 memory 필드의 값을 출력하면 User2Thread가 저장한 50이 나온다. 이런 경우, Uers1Thread에 저장되니 데이터가 날아가버린다. 👉 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없도록 하려면 스레드 작업이 끝날 때까지 객체에 잠..

    스레드: 스레드 풀

    Thread Pool Thread Pool의 장점: 스레드 생성과 삭제에 따른 시간과 리소스를 절약할 수 있다. Thread Pool 사용시 주의할 점 Deadlock: 다중 스레딩과 관련된 모든 프로그램에서 교착 상태가 발생할 수 있다 작업간 데이터 교환이 필요한 경우, 실행 작업과 대기 작업의 교착 상태가 발생할 수 있다. Thread Leakage 비정상 종료에 의한 실행 종료 Resource Thrashing 지나치게 큰 스레드 풀을 사용할 경우, 스레드간 컨텍스트 전환시 느려지는 문제가 발생할 수 있다. Thread Group Java는 단일 객체에서 여러 스레드를 그룹화하는 편리한 방법을 제공한다. 이러한 방식으로 단일 메서드 호출로 스레드 그룹을 일시 중단, 재개 또는 중단할 수 있다.

    배열

    배열의 초기값 ▷ 배열을 생성할 때 각 구성 요소에 넣는 초기값을 기본값이라고 한다. 자료형 기본값 byte zero, 곧 (byte) 0 short zero, 곧 (short) 0 int zero, 곧 0 long zero, 곧 0L float zero, 곧 0.0f double zero, 곧 0.0d char null 문자, 곧 \u0000 boolean 거짓, 곧 false 참조형 null 참조, 곧 null -> 기본값은 '일부러 값을 설정하지 않아도 기본으로 값이 설정된다'는 사전적 의미가 있다. 배열의 구성 요소 뿐만 아니라 클래스의 필드 (인스턴스 변수와 클래스 변수)도 기본값으로 초기화 된다. 배열의 구성 요소는 자동으로 0으로 초기화되는 규칙이 있다. ▷ 배열의 요소 값을 초기화하며 배열..

    공대 2호관 전산실 5번 문제: 다형성과 공변성, 메서드 오버라이딩

    https://kizoo.gitlab.io/docs/archive/java/005/ 5 class F { X m() { System.out.println("F"); return new X(); } } class G extends F { Y m() { System.out.println("G"); return new Y(); } public static void test() { F f = new G(); f.m(); } } G.test(); G G가 찍히도록 X와 Y를 정의하세요. 이와 같 kizoo.gitlab.io class F { X m() { System.out.println("F"); return new X(); } } class G extends F { Y m() { System.out.print..

    공대 2호관 전산실

    https://kizoo.gitlab.io/docs/archive/java/002/ 2 HashSet으로 1들의 집합을 만듭니다. import java.util.*; class Sameness { public static void 집합크기(Set 집합, Object[] elements) { Collections.addAll( 집합, elements ) ; System.out.println( 집합.toString() + "의 원소 수는 " + 집 kizoo.gitlab.io 1번) identityHashCode HashCode 1. 해쉬코드가 같은 경우에는 equals를 한번 더 하는데 그래도 같으면 같은 객체로 취급한다. 해쉬코드가 같다고 같은게 아니라 equals해서 나온 결과 마저도 같으면 같은 객체..

    값 전달과 참조 전달

    https://kizoo.gitlab.io/docs/archive/java/001/ 1 Java에서는 call-by-value로 인자 값을 주고 받습니다. class 물체 { private int n = 0; public 물체( int m ) { n = m; } public void modify( int m ) { n = m; } public String toString() { return "" + n; } } class ParameterPassing { public stati kizoo.gitlab.io 1. 스택에 복사본이 생김. 값이 변경된 후 종료되면 사라진다. 2. source의 힙 주소값을 받음. 주소 자체를 받는게 아니라 주소 값을 받아 변경하기 때문에 참조 존달이 아닌 값 전달이다.