그래프정점 : 그래프 노드 또는 점간선 : 정점 간의 연결, 부모-자식 개념 없음가중치 : 간선(엣지)에 할당된 값차수 : 정점에 연결된 간선의 수진입 차수 : 방향 그래프에서 특정 정점으로 들어오는 간선의 수진출 차수 : 방향 그래프에서 특정 정점에서 나가는 간선의 수경로 :두 정점 간에 존재하는 간선의 연속사이클 : 시작 정점에서 출발하여 다시 시작 정점으로 돌아오는 경로. 트리와 가장 큰 차이연결 그래프 : 모든 정점이 서로 연결된 그래프포화 그래프 : v개의 정점을 가지는 그래프는 최대 V * (V-1) / 2 간선이 가능부분 그래프 : 원래 그래프의 일부 정점과 간선으로 구성된 그래프방향 그래프 : 간선에 방향이 있는 그래프무방향 그래프 : 간선에 방향이 없는 그래프 DFS최대한 깊이 들어간 후..
비선형 자료구조데이터가 선형적으로 배치되지 않고, 계층적 또는 비계층적으로 연결된 구조복잡한 관계를 표현하고, 효율적인 데이터 검색 및 관리 가능종류 : 트리, 그래프연속된 메모리 구조(선형) : 배열, 리스트, 셋, 큐, 스택 ... 트리 사이클x, 부모, 자식 존재 노드: 데이터의 단위(정점) 루트: 트리의 최상위 노드(첫 노드) 리프: 자식 노드가 없는 노드(끝 노드) 서브트리: 특정 노드를 루트로 하는 하위 트리 높이: 트리의 루트에서 가장 깊은 리프까지의 경로 길이(전체 깊이) 깊이: 특정 노드가 루트에서 얼마나 떨어져 있는지를 나타냅니다 간선: 부모 노드와 자식 노드를 연결,트리는 사이클이 없고, 항상 연결되어 있어야 함. 노드 수가 n이면 간선의 수는 항상 n-1 이진트리자식이 둘만 있는..
CollectionsStackLIFO(Last In First Out) 방식으로 동작 스택 메모리 구조 - 시스템 스택함수 호출 시 시스템이 사용하는 스택 (ex. 함수 호출 스택)우리가 직접 제어할 수 없음 (push/pop 불가능)- 인스턴스 스택우리가 만든 스택 객체에서 사용되는 공간직접 push/pop 가능 스택 주요 메서드empty() : 스택이 비었는지 확인 (비었으면 true, 아니면 false)peek() : 스택의 맨 위 요소를 반환pop() : 스택의 맨 위 요소를 반환하고 제거push() : 스택의 맨 위에 요소 추가search() : 요소의 위치 반환QueueFIFO(First In First Out) 방식으로 동작동적으로 크기 조절이 가능한 LinkedList를 가장 많이 사용 큐..
재귀함수가 자기 자신을 호출하는 프로그래밍public class Test { public static void main(String[] args) { int n=10; printNos(n); } public static void printNos(int n) { if(n>0) { printNos(n-1); System.out.print(n+" "); } }코드 동작 과정1. JVM이 Test 클래스를 Method Area에 load2. 메인 제외 static 멤버 초기화 (Method Area영역 내부의 static영역에 printNos() 저장)3. 상속관계 파악4. main 수행5. n이 printNos()의 local data이므로 stack 영역 할당(4byte 크기)6. pri..
Generic 클래스나 메서드에서 사용할 데이터 타입을 일반화하는 기능코드의 재사용성과 타입 안정성을 높여줌성능향상을 위한 제네릭 public class Test3 { public static void main(String[] args) { List list=new ArrayList(); list.add(new A()); list.add(new B()); }}class A{}class B extends A{}class Biz{ public static void service(List list) { for(A o:list) { //중요한 일...// if(타입 체킹) {// 타입 캐스팅// } } }}service 메서드에 list 전달은 가능타입의 list에 A객체와 B객체를 추..
Java api document 자주 보기! 마커 인터페이스 : 부류 없이 이름만 있는 인터페이스. 구현해도 별다른 메서드가 없음. 특정 기능을 제공하는 클래스임을 표시하는 역할.Serializable : 네트워크에서 이동할 수 있는 것은 데이터 가능하고 메서드는 불가능. 1byte(=stream)으로 흐르기 때문에 client에서 1byte씩 쪼개서 보내고, server에서 복원 절차 필요. 포장이사 느낌으로. 포장이사는 Serializable적용된 객체만 가능.Comparble : 비교 가능 계열. 객체 간의 크기 비교.CharSequence : 문자 시퀀스 계열. 문자열을 다루는 인터페이스Generic : 빌드 과정에서 타입이 정해지는 것. 타입을 동적으로 할당하여 코드의 재사용성을 높임. Mod..
배열int[] cars = {1, 2, 3}; // 선언 생성 초기화를 한 번에 기본 타입 배열: 배열 요소가 실제 값을 저장함참조 타입 배열: 배열 요소가 객체의 주소(참조값)를 저장함참조 타입 배열의 동작 원리 배열은 힙 영역에 객체로 생성됨.배열 변수는 참조값(주소)을 스택 메모리에 저장.요소가 기본 타입이면 값이 저장되고, 참조 타입이면 객체의 주소 저장됨.배열 자체는 크기가 불변String도 불변 (문자 배열 기반이므로 변경 불가) 상속class A{ int i = 10; public void printI(){ System.out.println(i); }}class B extends A{ // B는 A를 상속받아 A의 필드와 메소드를 가짐 int j = 100; publi..
main 메서드 외부에 필드를 선언하면 main 내부에서 호출되지 않는 이유- 객체를 생성하지 않으면 인스턴스 필드는 메모리에 올라가지 않기 때문.- static이 없는 필드는 인스턴스 멤버이므로 객체를 생성해야 접근할 수 있음.JDK 구조- JDK 내부에는 JRE가 포함됨.- JRE 구성 요소: ClassLoader(CL), Bytecode Verifier(BV), Memory Management(MG), rt.jar (런타임 라이브러리), JVM.new 키워드- 객체를 힙(Heap) 메모리에 올릴 때 사용.생성자의 역할- "생성자는 객체의 초기화 역할을 한다"는 표현은 부정확함.- 정확히는 "생성자 호출 시 객체가 메모리에 올라가고, 이를 통해 non-static 멤버를 초기화할 수 있음."- 생성자..
JAVA 특징플랫폼 독립성Java 코드는 컴파일되면 바이트코드(Bytecode)로 변환됨.특정 운영체제에 의존하지 않고, JVM(Java Virtual Machine) 이 설치된 환경에서 실행 가능.객체 지향 프로그래밍(OOP)캡슐화, 상속, 다형성, 추상화 등의 OOP 개념을 지원.코드의 재사용성 과 유지보수성 이 뛰어남.멀티스레딩 지원(Thread-Multi)여러 작업을 동시에 수행할 수 있는 멀티스레딩(Multithreading) 기능 제공.병렬 처리를 쉽게 구현 가능.가비지 컬렉션(Garbage Collection)Java는 자동 메모리 관리 를 지원.사용되지 않는 객체를 GC(Garbage Collector) 가 자동으로 제거하여 메모리 누수를 방지.보안(Security)바이트코드 검증 등으로 ..
implements(구현)부모 클래스에서 선언된 메서드를 하위 클래스에서 반드시 구현하게 하기위해 사용 inheritance(상속)부모 클래스의 속성과 메서드를 재사용하기위해 사용, 인터페이스끼리 상속하여 타입 확장 가능 override상속받은 부모 클래스의 메서드를 재정의 하는 것 abstract메서드 선언만 하는 것도 가능, 메서드 선언과 메서드 정의를 하는 것도 가능, interface는 메서드 선언만 가능하지만 abstract는 메서드 선언과 정의 둘 다 가능 추상 클래스인터페이스공통점- 하위 클래스에서 모든 추상 메서드를 구현해야 함- 그 자체가 객체로 인스턴스화 될 수 없음차이점- 추상 메서드, 일반 메서드, 일반 멤버 변수를 가질 수 있음- extends 키워드 사용- 추상 메서드와 상수만..