목록Java (31)
forDevLife
6.3 RandomAccessFile - 추가로, writeInt() 등으로 value를 저장했을 경우, readInt()를 통해 정상적인 값을 읽어올 수 있다. readShort()등 다른 메서드로 읽게 되면, 파일 포인터의 위치는 Short(2 byte)씩 변하긴 하지만 아무런 값도 읽어오지 못한다. 6.4 File - 파일 포인터는 추후 정리. 자주 쓰이는 것이므로, 모를때마다 찾아봅시다. 7. 직렬화 (Serialization) - 객체를 컴퓨터에 저장 / 불러오기 및 네트웍을 통해 컴퓨터 간 객체를 주고받는 방법은 없을까에서 만들어진게 직렬화이다. - 직렬화란 객체를 데이터 스트림으로 만드는 것을 뜻한다. - 객체에 저장된 데이터를 스트림에 쓰기(Write)위해 연속적인 데이터로 변환하는 것을 ..
스레드, 람다, 스트림 양이 많아 우선 가장 중요한 부분부터 진행하고, 스프링 공부하면서 필요한 부분 있으면 다시 돌아와서 공부할 예정이다. 계속 언어 공부만 하다보니 살짝 지겨운 감이 있어서, 얼른 웹 개발을 경험해보고자 하였다. 1. 1 입출력이란? - I/O란 Input / Output 약자로, 컴퓨터 내/외부 장치와 프로그램 간의 데이터를 주고 받는 것을 의미한다. 1.2 스트림(stream) - 다행히도, 14장의 스트림과는 전혀 다른 개념이다. 자바에서 입출력을 수행하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이를 스트림이라고 정의한다. - 스트림은 데이터를 운반하는데 사용되는 연결통로이다.(TV - DVD를 연결하는 입력선/출력선 역할을 한다고 보면 된다.) - 스..
드디어 쓰레드에 왔다. 열심히 해보자. 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..
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..