본문 바로가기

Archived(CSE Programming)/Java

(16)
Java_메모리 구조 자바의 메모리 구조에 앞서 실제 자바가 어떤 식으로 동작되는지에 대한 이해가 필요하다. 우리가 java 파일을 작성하여 javac 컴파일러에 의해 컴파일 하면 .class의 바이트 코드를 생성한다. 이러한 바이트 코드를 Class Loader를 통해 JVM에 적재하고 Execution Engine에 의해 실행 중 메모리를 관리하고 Garbage Collector에 의해 Heap 영역에서 사용되지 않는 메모리를 해제하는 구조를 지닌다. 1. Class Loader .class의 바이트 코드를 엮어서 JVM의 Runtime Data area에 적재하는 역할을 한다. 2. Execution Engine .class의 바이트 코드들을 기계어로 번역하여 실행 단위의 명령어로 실행한다. (이 때, 명령어를 하나씩 ..
Java 예외처리 https://wikidocs.net/229 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net 예외란 프로그래밍 상 문법적으로는 이상이 없으나 프로그램 실행 중에 발생하는 예기치 못한 사건으로 발생하는 에러를 뜻한다. 처리 문법은 try~catch~finally public class Test { public void shouldBeRun() { System.out.println("ok thanks."); } public static void main(String[] args) { Test test = new Test(); int c; try { c = 4 / 0; } catch (ArithmeticException e) { c = -1; } finally { test.should..
Java 컬렉션(Collection) 자바의 Collection은 대표적으로 List, Set, Map(위에서는 상속하고있지만 Collection으로 분류) 이렇게 제시한다. 1. List List는 순서를 보장하는 데이터들의 집합(중복 허용). 1) Vector 동기화 처리가 보장되는 동적 Array로, 동기화 처리에 따른 성능이 떨어지기에 잘 사용하지 않는다. 2) ArrayList Array와 같은 구조로 이루어져 삽입/삭제 시에 Array의 복사로 처리한다. 그래서 중간 삽입이나 많은 삽입삭제 과정에 있어 성능이 저하된다. 그렇지만 Index를 통해 임의 접근은 성능이 우수하다. 3) LinkedList 다음 자료의 위치 정보를 통해 이어져있는 List이다. 삽입/삭제 시에 위치 정보만 수정하면 된다. 따라서 삽입/삭제가 많은 자료 ..
Java 추상클래스, 인터페이스 1. 추상클래스 자바의 추상클래스란 그 내용을 구체적으로 명시하지 않은 클래스를 뜻한다. 특정 메소드를 정의하지 않고 추상클래스를 상속하는 하위 클래스에서 이를 정의하도록 한다. 사용하는 이유는 간단하다. 클래스들에서 공통된 변수와 공통된 메소드를 필요로 한 상황에서 메소드는 구체적으로 내용이 다르게 정의되어야 할 경우 사용한다. 1) 필드와 메소드의 통일된 규격이 필요하고 이 규격 내에서 구체적으로 구현해야 하는 경우에 사용한다. 2) 실체 클래스 개발을 효율적으로 해야할 때 사용한다. // 추상클래스 public abstract class abclass{ // 공통 변수 int v1; int v2; // 추상메소드 public abstract void method1(); } // 실체클래스 class..
Java 오버로딩과 오버라이딩 Java에서 다형성(Polymorphism)을 지원하기 위한 대표적인 두 가지 방식인 오버로딩(Overloading)과 오버라이딩(Overriding). 비슷한 단어 때문에 헷갈려하곤 한다. 1. 오버로딩 오버로딩이란 특정 메소드를 같은 이름으로 매개변수 타입(자료형, 개수)만 다르게 하여 구성하는 것을 말한다. 참고로 반환형은 상관없다. 이러한 오버로딩은 생성자에도 적용되어 생성자 오버로딩도 가능하다(하나의 메소드로 볼 수 있기에). class Test{ public void method(void){ System.out.println("void 매개변수 메소드"); } public void method(int v1){ System.out.println(v1+ " int형 1개 매개변수 메소드"); } ..
Java 멤버 변수, 접근제어자 1. Java 멤버 변수 멤버 변수는 Class 내부에 선언이 되어있는 변수를 뜻한다. 이러한 멤버 변수는 다시 Class 변수와 Instance 변수로 구분을 한다. Class 변수는 해당 Class내에서 공유하는 변수를 뜻한다. 그래서 클래스가 메모리에 올라가는 시기에 생성이 되어 Class의 Instance로도 접근이 가능하며 Class 자체로도 접근이 가능하다. 반면에 Instance 변수는 클래스의 인스턴스 별로 따로 저장하는 변수를 뜻한다. 그래서 인스턴스가 생성되는 시기에 생성이 되어 Instance 들마다 따로 접근이 가능하다. 지역 변수는 메소드 내에서 유효한 변수이다. public class Member{ static int claVariable = 20; // 클래스 변수 int in..
Java 언어의 특징 1. Java와 C의 비교 1) 객체지향 vs 절차지향 Java는 객체지향언어(OOP)로 이루어져 Class 중심으로 코드를 동작되는 반면에 C는 절차지향으로 함수 중심의 절차에 따라 코드가 동작된다. 2) JVM의 유무 Java는 Virtual Machine(VM)위에서 동작되므로 플랫폼 독립적으로 코드가 동작할 수 있다. 3) Garbage Collection Java는 자동으로 Garbage Collection이 동작하여 빈 메모리를 비워주므로 개발자가 메모리 관리에 있어 편리함을 느낄 수 있는 반면에 C는 수동으로 Garbage Collection을 구성해야 한다. 4) 그 외 Unsigned int 지원 여부. Java는 Call-by-Value(reference도 참조값을 복사함). 2. Ja..
Java 자료형 자료형 자바의 자료형은 숫자(Number), 부울(boolean), 문자열(char, String), 스트링버퍼(String Buffer), 배열(Array), 리스트(List), 제네릭스(Generics), 맵(Map) 등이 있다. 1) 숫자는 우리가 흔히 쓰는 int, float, double, 8진수(0), 16진수(0x) 가 있다. 2) 부울은 boolean 으로 표현하며 실제 값은 true와 false 중 값을 대입한다. 3) 문자와 문자열은 char, String 으로 표현하며 사용한다. 이 때, String은 Immutable 객체로 변경할 수 없다. 이 때, 숫자와 부울, 문자는 원시자료형(Primitive)이라고 표현하는데 Java에서 상수(Literal) 값으로 바로 대입이 가능한 자료..