일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 패스트캠퍼스후기
- 직장인자기계발
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- albert
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- 패스트캠퍼스
- R
- 직장인인강
- SKT
- 알버트
- AI
- 패캠챌린지
- Today
- Total
제주 탈출 일지
패스트캠퍼스 챌린지 23일차 본문
오늘은 꼭 최근의 게으름을 모두 만회하고 자도록 하겠읍니다.
스따뚜
04. Class 클래스 사용하기
자바의 클래스와 인터페이스들은 컴파일을 하면 .class파일을 생성한다. .class 파일에 모든 클래스에 대한 정보들이 들어있는데 그 정보를 가져오거나 인스턴스를 생성하거나 그런 기능을 할 수 있는 여러 메소드들이 정의된 클래스가 Class 클래스이다.
Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공됨ClassforNmae("클래스 이름") 메소드로 클래스를 동적으로 로드함.
이 클래스에서 forName메소드를 꼭 기억해야함.
forName(String classname) classname에 해당되는 클래스나 인터페이스에 대해서 매핑을 해주는(동적 바인딩)을 해주는 역할을 한다. 종종 씀.
동적 로딩
컴파일 시에 데이터 타입이 binding 되는 것이 아닌, 실행(runtime) 중에 데이터 타입을 binding 하는 방법
프로그래밍 시에는 문자열 변수로 처리했다가 런타임시에 원하는 클래스를 로딩하여 binding 할 수 있다는 장점
컴파일 시에 타입이 정해지지 않으므로 동적 로딩시 오류가 발생하면 프로그램의 심각한 장애가 발생할 수 있음
Class의 newInstance() 메서드로 인스턴스 생성
new 키워드를 사용하지 않고 newInstance로 인스턴스 생성 가능(곧 deprecated 됨)
클래스 정보 알아보기
reflection 프로그래밍 : Class 클래스를 사용하여 클래스의 정보(생성자, 변수, 메서드)등을 알수 있고 인스턴스를 생성하고 메서드를 호출하는 방식의 프로그래밍
로컬 메모리에 객체가 원격 프로그래밍, 객체의 타입을 알 수 없는 경우에 사용
java.lang.reflection 패키지에 있는 클래스를 활용하여 프로그래밍
ClassTest
package ch04;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
Class c1 = Class.forName("ch04.Person");
Person person = (Person)c1.newInstance(); // 반환값이 object
person.setName("Lee");
System.out.println(person);
Class c2 = person.getClass(); // 인스턴스가 있어야 함.
Person p = (Person)c2.newInstance();
System.out.println(p);
//로컬에서 Person이 없을때 사용.
Class[] parameterTypes = {String.class, int.class};
Constructor cons = c2.getConstructor(parameterTypes);
Object[] initargs = {"Kim", 15};
Person kim = (Person)cons.newInstance(initargs);
System.out.println(kim);
System.out.println(kim.getAge());
}
}
Person 클래스를 동적으로 가져와서 사용하는 예제. Person은 age, name, getter/setter 메소드와 toString 정도만 정의했다.(따로 올리진 않겠다.)
같은 메모리 상에 Person이 존재한다면 import해서 간단하게
Person p = new Person(); 해버리면 되겠지만, 런타임에 Person을 가져오기 때문에 그렇게 할 수가 없다.
그래서 생성자를 getConstructor로 가져오고 parameterType을 정해주고 하는 등의 작업을 미리 해주는 것...
이것을 reflection 프로그래밍이라고 한다. 나중에 쓸일이 있을 때 다시한번 보면 될듯?

이건 위의 예제 실행결과.
ch05. 자바와 자료구조
01. 여러가지 자료구조에 대해 알아봅시다.
자료구조란 무엇인가? (data structure)
프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현방법들.
배열 : 선형으로 자료를 관리, 정해진 크기의 메모리를 먼저 할당받아 사용하고, 자료의 물리적 위치와 논리적 위치가 같음.
연결리스트(Linked List) : 선형으로 자료를 관리, 자료가 추가될 때마다 메모리를 할당 받고, 자료는 링크로 연결됨. 자료의 물리적 위치와 논리적 위치가 다를 수 있음.
스택 : 가장 나중에 입력 된 자료가 가장 먼저 출력되는 자료 구조(Last in First Out)
(스택 메모리)
큐 : 가장 먼저 입력 된 자료가 가장 먼저 출력되는 자료 구조(First in First Out)
02. 여러가지 자료구조에 대한 설명
트리 : 부모 노드와 자식 노드간의 연결로 이루어진 자료 구조
차수(degree) 자식이 몇개인지 나타내는 값
힙을 이용해서 Priority queue를 구현 ( Complete binary Tree )
sub_tree가 부모보다 다 작음(max_heap)
sub_tree가 부모보다 큼 (min_heap)
이를 통해 힙정렬에 활용할 수 있음
이진 검색 트리(binary search tree) : 검색을 위해 만들어 진 트리
- 내부의 키는 중복 될 수 없다.
검색속도는 평균 log2 n
최악의 경우 n이기 때문에
그냥 만들지 않고 avl or 레드블랙 트리로 만듬.(레벨에 대한 밸런싱을 해줌)
(----.... 레드블랙 트리에 대한 PTSD가..)
순회하는 순서에 따라 inorder, preorder, postorder(부모를 언제 탐색하는지에 따라서)
binary search tree에서 inorder로 출력하면 값이 정렬되어 출력됨.
(java의 이진 탐색 트리는 레드블랙트리로 구현되어 있음.)
그래프 : 정점과 간선들의 유한 집합 G= (V, E)
그래프를 구현하는 방법 : 인접 행렬, 인접 리스트
해싱(Hashing) : 자료를 검색하기 위한 자료 구조
key는 유일하고 이에 대한 value를 쌍으로 저장
key를 해시Funtion에 넣었을 때 index를 반환해준다.
해당 index 위치에 자료를 저장하거나 검색하게 됨.
다른 key이지만 동일한 인덱스를 반환하게 될수도 있음 (충돌)
해시 = 딕셔너리(파이썬)
해시는 검색속도가 매우 빠르다.(O(1))
해시테이블 : 충돌에 대한 오버해드를 줄이기 위해서 큰 이차원 배열을 두고 충돌이 발생하면 해당 index에 값을 둠
버켓이 너무 커지면 공간의 낭비 또한 같이 커진다.
체이닝 : 배열 + 링크드리스트
jdk 클래스 : HashMap, Properties
03. 배열(Array) 구현하기
package ch03;
public class MyArray {
int[] intArr;
int count;
public int ARRAY_SIZE;
public static final int ERROR_NUM = -999999999;
public MyArray() {
count = 0;
ARRAY_SIZE = 10;
intArr = new int[ARRAY_SIZE];
}
public MyArray(int size) {
count = 0;
ARRAY_SIZE = size;
intArr = new int[ARRAY_SIZE];
}
public void addElement(int num) {
if(count >= ARRAY_SIZE) {
System.out.println("not enough memory");
return;
}
intArr[count++] = num;
}
public void insertElement(int position, int num) {
if (position < 0 || position > count) {
return;
}
if (count >= ARRAY_SIZE) {
return;
}
for(int i = count-1; i >= position; i--) {
intArr[i+1] = intArr[i];
}
intArr[position] = num;
count++;
}
public int removeElement(int position) {
int ret = ERROR_NUM;
if( isEmpty() ) {
System.out.println("Array is Empty");
return ret;
}
if (position < 0 || position > count-1 ) {
return ret;
}
ret = intArr[position];
for(int i = position; count-1 > i; i++) {
intArr[i] = intArr[i+1];
}
count--;
return ret;
}
public boolean isEmpty() {
if(count == 0) {
return true;
}
else return false;
}
}
이 정도만 강의따라서 구현했는데, 예전에 해둔게 많아서 그냥 더 안하려고 함, 게으름뱅이ㅋㅋ..
선형리스트(arrList)
C++의 템플릿을 이용해서 선형 리스트를 나름대로 구현해 보았다. 야매로 짠 코드라 따로 파일을 분할하여 짜지는 않았고, 윤성우 저자의 자료구조를 참고하여 작성했기 때문에 무조건 참조 후
soh9646.tistory.com
뭐 C++로 짜긴했는데,, 사실 개념은 다르지 않으니까.. ㅎㅎ
나중에 내키면 한번 짜보도록 하겠다.
04. 연결리스트(LinkedList) 구현하기
jdk에 LinkedList 클래스가 있다.
연결 리스트(LinkedList) - C++
후기. C로 짤때는 쉬웠던 것이 template과 객체 지향 등 C++의 문법들을 생각하면서 짜보니 쉽지 않았다. 특히 C에서는 맘대로 구조 변형하고 그랬던 것이 C++에서는 에러로 돌아왔다.. ㅋㅋ; 결국 다
soh9646.tistory.com
이 역시 C++로 작성해보긴 했다.
근데 자바는 포인터가 없어서 어떻게 짤지 궁금해서 강의를 들어봐야겠다.
public class MyListNode {
private String data; // 자료
public MyListNode next; // 다음 노드를 가리키는 링크
public MyListNode(){
data = null;
next = null;
}
public MyListNode(String data){
this.data = data;
this.next = null;
}
public MyListNode(String data, MyListNode link){
this.data = data;
this.next = link;
}
public String getData(){
return data;
}
}
그냥 간단하게 자기 자신의 자료형 변수로 했다. 한수 배웠다.
ㅋㅋ 나머지 개념은 삽입, 수정, 삭제는 소름돋게 동일해서 패스
이것도 나중에 내키면 짜보겠다.
오늘 이정도 강의 들었으면, 이전의 게으름을 어느정도 만회하지 않았나 생각이 든다.
사실 뺴먹은게 있지만, 다음번에 더 빡세게 공부하도록 하겠다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패스트캠퍼스 챌린지!' 카테고리의 다른 글
패스트캠퍼스 챌린지 25일차 (0) | 2021.09.30 |
---|---|
패스트캠퍼스 챌린지 24일차 (0) | 2021.09.29 |
패스트캠퍼스 챌린지 22일차 (0) | 2021.09.27 |
패스트캠퍼스 챌린지 21일차 (0) | 2021.09.26 |
패스트캠퍼스 챌린지 20일차 (0) | 2021.09.25 |