목록분류 전체보기 (150)
forDevLife
드디어 쓰레드에 왔다. 열심히 해보자. 1. 프로세스와 쓰레드 - 프로세스란 간단히 말해서 실행 중인 프로그램이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. - 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. - 모든 프로세스는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드 가질 경우 멀티쓰레드 프로세스라고 한다.
2.1 열거형이란? - 서로 관련된 상수를 편리하게 선언하기 위한 것으로, 여러 상수를 정의할 때 사용하면 유용 - 타입에 안전한 열거형(typesafe enum)으로, 실제 값이 같아도 타입이 다르면 컴파일 에러 발생 2.4 열거형의 이해 - 열거형 상수 하나하나는 Direction 객체이다. - 모든 열거형은 추상클래스 Enum의 자손이다. - 추상클래스는 객체를 생성할 수 없다. 추상클래스의 자손은 자동으로 만들어진다? > 객체를 생성할 수 없고, 미리 추상클래스의 정의에서 만드는 것으로 보인다. - 열거형 예제(p700)에 대해서 많은 고민 결과, 그냥 받아들인다. > 추상메서드 없이도 추상 class로 정의 가능하다. > 열거형에 추상메서드를 추가하면, 각 열거형 상수의 정의에 메서드를 정의해야..
1.1 ~ 1.5) 지네릭스 주요 정리 - 반드시 타입을 지정하여 지네릭스 경고가 나오지 않도록 하자.(호환성을 유지하기 위해 지네릭스 사용안한 코드를 허용하는 것일 뿐) - static 멤버에는 타입변수 사용 불가하다. 모든 객체에 동일하게 동작해야 하므로 - 지네릭 타입의 배열 생성 허용하지 않는다.(참조변수 선언은 가능) -. T[] itemArr; // ok, T타입의 배열을 위한 참조변수 -. T[] tmpArr = new T[itemArr.length]; // error, 지네릭 배열 생성 불가 - 컴파일 시점에 T가 뭔지 모르므로 에러 발생 -. 같은 이유로, instanceof 연산자 / new 연산자에서도 사용 불가 -. 꼭 사용해야 하는 경우, 'Reflection API'의 newIn..
너무 어렵다. 아래는 최고의 정리 사이트이다. 요약하자면, 1) Arrays는 모두 static 메서드이다. 따라서 인스턴스 생성 없이 array.method_name으로 사용한다. 2) Arrays.sort()를 통해 배열을 정렬할 수 있다. 이 때 실제로는 sort에서 자동으로 comparator / comparable의 compare / compareTo를 호출하여 정렬한다. 3) comparable을 구현하려면, compareTo(Object o)를 오버라이딩 해야한다. 4) comparator를 구현하려면, compare(object o1, object o2)를 오버라이딩 해야한다. 5) comparable은 기본 정렬을 구현하는데 사용된다. 예를 들어 오름차순 / 내림차순이다. 6) compa..
- 간단한 프로젝트 실습 https://start.spring.io/ 1) Maven / Gradle : 프로젝트 관리해주는 툴, 대부분 Gradle : 지금은 그냥 버전, 라이브러리 땡겨오는 거라고만 생각하자. 2) thymeleaf(View) : template engine(html 만드는) spring web 두 개를 dependancy로 하여 spring initializr 진행 3) Gradle, Maven은 의존관리를 관리해 줌 > 예를들어 내가 web을 땡기면, 알아서 다 땡겨주는 편리함(external library에서 땡긴거 볼 수 있음) > 실행만 했는데도, 웹서버(tomcat)이 뜸.(자동으로 tomcat library를 불러오는 것을 볼 수 있다) > sprint boot core도..
1. 4 Stack / Queue - Stack : 후입 선출인 자료구조. stack, arraylist 등으로 구현 가능하다. -. stack에서는 search로 전달된 객체의 위치를 반환함. 이때 위치는 배열의 0이 아닌 1부터 시작함. - Queue : 선입 선출인 자료구조. queue는 인터페이스라, 해당 인터페이스를 구현한 클래스 사용(LinkedList 등) -> 먼저 들어간 놈을 지울때 빈 공간 채우기 위해 데이터 복사 발생(arraylist 배열기반 사용하면) -> 따라서 linkedlist로 구현됨 - PriorityQueue : 저장된 순서에 상관없이 우선순위가 높은 것부터 꺼낸다. 그리고 null은 저장 불가이다. -> 얘는 배열을 사용하며, 각 요소를 힙(heap)이라는 자료구조 형..
내부 클래스의 이해가 생각보다 시간이 많이 소요되었다. 간단하게 요약만 하자면, 1) 인스턴스 클래스, static 클래스, local 클래스(메서드 내 또는 초기화 블럭), 익명 클래스로 나뉜다. 2) 내부 클래스도 클래스이므로, abstract, final와 같은 제어자 및 private, protected 접근 제어자도 사용 가능하다. 3) 내부 클래스 중에서 static 클래스만 static 멤버를 가질 수 있다. 4) static 메서드 내부에서는 인스턴스 멤버에 접근할 수 없다. 강제로 하려면, 외부 클래스를 생성할 필요가 있다. InnerEx2 outer = new InnerEx2(); // 외부 클래스 선언 InstanceInner obj1 = outer.new InstanceInner()..
16.1 ) 추상 클래스 추상화와 구체화를 다음과 같이 정의하면 이해하기가 쉽다. 1) 추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업 2) 구체화 : 상속을 통해 클래스를 구현, 확장하는 작업 즉, 상속계층도를 따라 내려 갈수록 세분화되며, 올라갈 수록 공통요소만 남게된다. 코드는 없지만, 해당 내용을 요약하자면 1) 추상클래스로부터 상속받은 자손클래스는 오버라이딩을 통해 조상의 추상메서드를 모두 구현해줘야 한다. 2) 일부만 구현될 경우, 자손 클래스 역시 추상 클래스로 지정되어야 한다. 3) 자손 클래스에게 추상 메서드의 구현을 반드시 하도록 강요하기 위해 abstract, 즉 추상 메서드를 사용한다. 4) 복습으로, 메서드는 참조변수의 타입과 관계없이 실제 인스턴스의 메서드가 호..
5.3) instanceof 연산자 해당 연산자를 이용하여 a instanceof b의 결과를 보면, a가 b를 상속한다면 true, 아니면 false를 반환한다. 이를 이용하여 해당 인스턴스가 어떤 클래스를 상속하는지 여부를 확인하고, 형변환이 가능한지 확인할 수 있다. package test_java; public class InstanceofTest { public static void main(String[] args) { FireEngine1 fe = new FireEngine1(); Car1 car = new Car1(); if(car instanceof FireEngine1) { System.out.println("this is a fireEngine instance and I want th..
1) 다시 한번, 오버로딩 - 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩'이라 함. - 조건 : -. 메서드 이름이 같아야 함. -. 매개변수 개수 또는 타입이 달라야 한다. -. 반환 타입은 오버로딩에 영향을 주지 않는다! -. 예시 : println - 매개변수가 여러 개일 때, 자료형의 순서가 서로 다른 경우도 오버로딩으로 간주 (long add(int a, long b) / long add(long a, int b) 2) 오버라이딩의 조건 - 조건 : -. 메서드 이름이 같아야 함. -. 매개변수가 같아야 한다. -. 반환타입이 같아야 한다. -. 요약하면, 선언부가 서로 일치해야 한다. -. 다만 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있..