본문 바로가기

Java

(17)
[부부개발단] 즐거운 자바 [섹션09] 쓰레드(Thread)와 네트워크 프로그래밍 병렬화 할 때 고려해야할 것들 메모리의 속도 CPU 캐시 메모리 디스크 네트워크 컨넥션 순차적 실행이 병렬 실행보다 빠른 경우도 있다. 동시 실행에 따르는 오버헤드가 없고, 단일 CPU 알고리즘은 하드웨어 작업에 더 친숙할 수 있기 때문이다. ... 암달의 법칙(Amdahl's Law) : 암달의 법칙은 암달의 저주라고도 불리며 컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼 최대 성능 향상이 있는지 계산하는 데 사용된다. 병렬 vs 병행 병행(Concurrent)은 멀티스레드 프로그래밍(동시성 프로그래밍)을 의미 병렬(Parallel)은 멀티코어 프로그래밍 --> CPU 여러개를 동시에 사용하는 것 각각의 프로세스들은 자신만의 메모리 영역을 확보한 상태로 실행되고 있다. 시간을 쪼개서 특정 시간에..
[부부개발단] 즐거운 자바 [섹션06] 주석문, 예외처리, enum 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. IntelliJ에서 JavaDoc 생성 shift키 2번 연속 누르기 generate javaDoc 을 입력 custom scope를 선택 후 JavaDoc을 생성할 패키지, 클래스, 인터페이스 등을 선택한다. exclude를 선택해서 생성하지 않을 것들도 지정할 수 있다. output directory에서 JavaDoc이 생성할 경로를 지정한다. other command line arguments에는 다음을 입력한다. -enncoding UTF-8 -charset UTF-8 -docencoding UTF-8 ASCII Art 예외처리 Error와 Exception : 비정상적으로 프로그램을 종료되게 하는 원인 Err..
[부부개발단] 즐거운 자바 [섹션05] 03강 제네릭(Generic)과 컬렉션 프레임워크(Collection Framework) 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. GenericBox public class GenericBox { private T t; public void add(T obj){ this.t = obj; } public T get(){ return this.t; } } ObjectBox는 어떤 Object든 저장할 수 있고, 어떤 Object를 꺼낼 수 있다. 꺼내서 사용할 때는 원래 타입으로 변환시키는 번거로운 과정 필요 이걸 해소해보자 해서 나온게 제네릭이다. 아직 정해져있지 않은 어떤 type을 쓰겠다라는 것 T는 제네릭과 관련된 부분 제네릭은 클래스이름 뒤나, 메소드의 리턴타입 앞에 붙을 수 있다. 부분은 T라는 이름의 제네릭 타입을 선언한다는 것을 의미 ..
[부부개발단] 즐거운 자바 [섹션05] 02강 배열2 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. java.lang 패키지의 클래스는 import 하지 않아도 사용할 수 있다 System 이나 String 클래스는 import 하지 않아도 사용할 수 있다 Arrays.copyOfRange(복사할 배열, from, to) 배열을 복사해주는데 from(몇번째 부터) to(몇번째) 앞까지 복사할 것인지 지정 Arrays.compare(배열1, 배열2) 자바에서 비교하는 메소드가 자주 나오는데 그럴때는 양수, 0, 음수를 기억해라! 배열1이 배열2보다 크면 양수 작으면 음수 같으면 0이 나온다. Arrays.sort(배열) 배열안에 있는 요소를 오름차순으로 정렬해주는 메소드, 배열에 Object[] 가 들어가는 sort ..
[부부개발단] 즐거운 자바 [섹션05] 01강 배열1 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. 배열 참조 타입으로 같은 타입의 변수가 여러개 필요할 때 사용 기본형 배열 : boolean, byte, short, char... 타입의 변수를 여러개 선언할 필요가 있을 때 사용 기본형타입[] 변수명; 기본형타입 변수명[]; 배열은 초기화 하지 않으면 null을 참조하므로 반드시 초기화 시켜주어야 한다. int[] array1; array1 = new int[5] array1은 정수를 5개 가질 수 있는 배열을 선언한다 배열 인스턴스를 만든다고 생각하면 됨 참조형 배열 배열 자체도 참조형인데 배열이 가지는 값이 참조형이라는 것을 말함 이차원 배열 : 배열의 배열, 배열안에 또 배열을 가질 수 있다 타입명[][] 변..
[부부개발단] 즐거운 자바 [섹션04] 07-09강 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. 인터페이스의 default method 만약에 interface를 작성한 후에 외부에 공개를 했는데 여러 사용자들이 해당 인터페이스를 이용해 각자의 클래스를 구현했다. 이 상황에서 원래 있던 인터페이스를 버전업 하면서 메소드 하나를 추가 하게 된다면 사용자들이 같이 버전업 하면 추가한 메소드 때문에 컴파일 오류가 발생할 것이다. 그래서 메소드가 미리 구현된 메소드를 제공함으로써 버전업된 메소드를 사용해도 문제가 발생하지 않도록 하기 위한 개념으로 생겨난 것 인터페이스의 static method 인터페이스를 구현한 클래스가 없어도 사용가능한 static method 팩토리 메소드 패턴 복잡한 생산 과정(객체가 만들어지는..
[부부개발단] 즐거운 자바 [섹션04] 03강-06강 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. 디자인패턴 : 객체지향 프로그래밍을 할 때 어떻게 하면 좋을까를 많이 고민하는데 거기서 많이 사용되는 형태,패턴을 보고 정리한게 디자인 패턴 템플릿 메소드 패턴(Template Method Pattern) package com.example.fw; /* 여러 종류의 Controller를 만들 생각 초기화 - 같은 코드 실행 - 다른 코드 마무리 - 같은 코드 */ public abstract class Controller { // protected 는 같은 패키지이거나 상속받았을 경우에 접근 가능하다. protected final void init(){ System.out.println("초기화 코드"); } prot..
[부부개발단] 즐거운 자바 [섹션03] 15강, [섹션04] 01강-02강 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. 아무것도 상속받지 않으면 자동으로 Object를 상속받는다고 했었는데 그러면 toString(), equals() & hashCode()와 같은 메소드를 그냥 쓸 수 있는데 하지만 그냥 사용하면 아무 의미가 없고 꼭 오버라이딩 해서 사용해야한다. public class Car { public void run(){ System.out.println("전륜구동으로 달린다"); } @Override public String toString() { return "자동차!"; } } public class CarExam02 { public static void main(String[] args){ Car c1 = new Car..
[부부개발단] 즐거운 자바 [섹션03] 10-14강 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. 상속 : oo는 oo다 , oo는 oo의 종류 중 하나다. 라고 표현할 수 있다면 이건 상속관계이다. 상속 = 일반화 + 확장 버스를 일반화하면 자동차가되고 자동차를 확장하면 버스가 된다. 상속은 굉장히 결합도가 높기 때문에 반드시 사용해야할 경우만 쓰고 되도록 쓰지 않는 것이 좋다 일반화 : 자식클래스를 부모클래스로 부를 수 있는 것, 여러 종류의 객체를 하나의 이름으로 부를 수 있는 것 Car car = new Bus(); 이전과 달리 생성한 인스턴스와 참조하는 타입이 다른데 이것은 버스를 보고 자동차다 라고 생각하면 이해하기 쉽다. Q. 왜 참조타입을 부모 타입으로 사용할까요? : 버스 인스턴스가 있을 때 자동차..
[부부개발단] 즐거운 자바 [섹션03] 03-09강 인프런에 있는 부부개발단 즐거운 자바라는 강의를 듣고 필요한 부분을 필기한 내용입니다. 클래스 메소드에서 인스턴스 필드를 사용하지 못하는 이유 : 인스턴스 필드는 인스턴스가 생성이 되어야 사용이 가능하다. 클래스 메소드는 인스턴스가 없어도 사용가능하지만 인스턴스 필드는 인스턴스가 생성되어야만 사용할 수 있어서 클래스 메소드를 사용할 때 인스턴스 필드가 아직 메모리에 존재하지 않기 때문에(서로 메모리에 생성되는 시점이 다르기 때문에) 인스턴스 필드를 사용하지 못하는 것이다. static 블록 클래스 필드는 static 블록에서 초기화 할 수 있다. static 블록을 이용하면 main메소드 보다 먼저 실행할 수 있다. 자바의 메모리 자바 8부터는 메타스페이스라는 영역이 사용된다. Java Heap은 JVM..