language 36

15. 입출력

1.입출력(I/O)과 스트림(stream) 원리 외부와 자바프로그램간의 data를 주고 받는 과정 필요 data를 주고 받기 위해 외부와 자바프로그램을 연결시켜주는 다리가 필요 : stream stream은 14장의 Stream과 다르다. 연결시켜주는 다리(일방통행) : Input, Output 외부에서 자바로 들어가는 것 하나 : Input 자바에서 외부로 보내는 것 하나 : Output 목적 외부에서 데이터를 받아서 읽기 내부에서 데이터 작성해서 외부로 보내기 input과 output은 따로따로 이다. 연결해서 작동하는 경우가 많은 거지 서로 연결할 필요가 없다. read(), write() input과 output stream의 다른 method들이 분명 더 있겠지만 읽고 쓰기가 기본 원리이다. 외..

language/java 2023.03.26

Interface와 API

1. 인터페이스의 의미 인터페이스는 표준껍데기이다. 2가지 개념이 같이 움직인다. 표준이라는 것은 자신들이 만든 프로그램이 이런 표준이라고 상대방에게 알리는 것. 무슨 표준 규칙이 존재하는게 아니다. 상대방 기준에서 표준인 것. 2. 인터페이스 사용 하는 큰 개념들 2.1. 자바적 개념 추상메서드의 집합, 내부 변경이 쉽고 호환이 쉽다. 인터페이스와 연결된 객체는 인터페이스 내부의 실제 구현체와 의존하지 않아서 실제 구현체는 변경이 용의 구현체 : 인터페이스 구현체 연결체는 인터페이스 메서드 선언부로만 가지고 실제 구현체를 작동할수 있다. 인터페이스를 타입변수로 가진 실제 인터페이스 구현체는 설정창과 같은 곳에서 따로 관리 구현체 업데이트시 설정창의 인터페이스와 인터페이스 구현체를 새로 연결하면 된다. ..

language/java 2023.03.23

12. 지네릭스, 애너테이션

1. 지네릭스 정의 동적일 필요없는 타입을 정적으로 변환 → 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능 → 런타임 에러를 줄여준다. 클래스에서 지정한 지네릭스 타입으로 인해 다양한 타입의 객체들을 다루는 메서드에 type을 제한할 수 있다. type 제한: 지네릭스 타입 객체 및 지네릭스 타입의 자손 타입 객체 가능 method 중 지네릭스가 지정된 method는 반환시 지네릭스 타입을 반환한다 장점 타입 안정성을 제공한다 형변환 error(classCastException)을 방지한다. 의도치 않은 타입의 객체를 저장하는 것을 막고, 저장된 객체를 꺼내올 때 월래의 타입과 다른 타입으로 형변환되어 발생할 수 있는 오류를 줄여준다. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다. A..

language/java 2023.03.23

11. Collection framework 개념

1. Collection Framework 컬렉션 프레임워크 컬렉션을 다루기 위한 표준화된 프로그래밍 방식 컬렉션 = 객체 1.1. 컬렉션 프레임워크 사용 이유 배열 정적배열 전통적으로 프로그래밍에서 많은 양의 자료(데이터) 처리를 위해서는 배열을 이용 배열의 단점 배열에 담는 자료형은 동일해야 한다. 다른 자료형도 함께 넣지 못함 배열은 데이터의 크기를 알 수 없는 경우에는 부적합하다. 데이터의 크기가 미리 안정해진 경우, 파악하기 어려운 경우 배열 생성이 힘들다 기준을 많이 잡아놓고 다 사용하지 않는다면 메모리만 차지 기준을 낮게 잡아놓으면 기준치초과시 다시 생성해야 함 컬렉션 프레임워크 동적배열 객체만 받음 - 오토박싱을 통한 자료형을 객체로 변환 후 받을 수 있다. 배열의 단점을 보완하기 위한 프..

language/java 2023.03.16

JVM 메모리 구조

1. 이전에 알고 있었던 JVM 메모리 구조 Method Area: class가 올라올 때 제일 먼저 static method와 static variable 생성 Call Stack: method 호출시 stack 올라오고 해당 stack에 local valiable 생성 Heap : 인스턴스 - 내부에 instance method, instance valiable 존재 하지만 위의 개념은 반은 맞고 반은 틀렸다. 맞은 점은 iv, im은 객체를 생성해야 사용가능하고 cv, cm은 객체를 생성하지 않아도 사용이 가능하다는 원리가 핵심이고 가장 중요한 부분이다. 틀렸다는 점은 내부적으로 저장된 위치와 어떻게 호출되었는지 이기에 실제로는 몰라도 크게 상관이 없다. 2. JVM 내부 작동 원리 3가지 존재 s..

language/java 2023.03.16

6. oop 요약

01. 객체자향 언어 핵심 개념: 캡슐화, 상속, 추상화, 다형성 객체지향 언어는 기존 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 것 코드의 재사용성 높고 유지보수가 용이 중복 코드 제거 02. class 와 object class: object의 설계도 또는 틀, object를 생성에 사용 설계도 변수 + 메서드 사용자 정의 타입 object: 실제로 존재하는 것, 서로 관련된 변수의 묶음  + 메서드(실제 메서드는 객체에 존재하지 않는다.) 프로그래밍 순서: class 작성 후 class로부터 object를 생성하여 사용한다. 03. object 구성요소 - property(속성) 과 function(기능) object: 속성 + 기능 둘 중 하나만 있어도 상관없다. member: object..

language/java 2023.03.13

10. 날짜와 시간 & 형상화

1. calendar 추상 클래스 구현 객체: 서양력, 태국력, 음력 구현 순서 getInstance() -> clear() -> set() 1.1. 주요 method getInstance(); 호출 Calendar가 추상 클래스에서 getInstance를 통해서 구현 객체를 호출해야한다. clear(); 오차 제거를 위한 시간 초기화 clear(); 모든 필드 초기화 clear(Calendar.SECOND); 초 초기화 // 년, 월, 요일, 시간, 분 등 초기화 가능 set(); 원하는 날짜 시간 지정 void set(int field, int value); // 시간만 셋팅할 때는 이걸로만 지정해야함 void set(int year, int month, int date); void set(int y..

language/java 2023.03.12

9. java.lang 패키지와 유용한 클래스

java.lang package & util class Object 클래스 // 객체자신.ObjectClassMethod(); protected Object clone(); //객체자신의 복사본 반환 public boolean equals(Object obj); // 객체자신과 객체 obj가 동일한 객체인지 알려준다 public Class getClass(); // 객체자신의 클래스 정보를 담고있는 class instance를 반환 // class Class명 으로 출력 // getClass().getName()으로 출력시 Class명 만 출력 public int hashCode(); // 객체자신 해시코드 반환 public String toString(); // 객체자신 정보를 문자열로 반환 prote..

language/java 2023.03.11

8.예외 처리

1. 프로그램 오류 프로그램 오류, 프로그램 에러 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우 발생시점 컴파일 에러: 컴파일 시 발생하는 에러 * compiler: 구문체크, 최적화, 번역, 생략 코드 추가 런타임 에러: 실행 시 발생 모든 에러 논리적 에러: 실행은 되지만 의도와 다르게 동작 에러와 예외 컴파일러가 소스코드 *.java 검사 후 오류가 없을 시 *.class 파일이 생성되고 프로그램이 실행된다. 프로그램 실행시 발생하는 에러가 존재할 수 있으므로 해당 모든 경우의 수를 고려하여 대비하기 위해 에러와 예외를 둔다. 에러 : 프로그램 코드에 의해 수습될 수 없는 심각한 오류 - 복구 불가 OutOfMemoryError StackOverflowError ..

language/java 2023.03.10

7. oop(object-oriented Programming) 객체지향 프로그래밍

01, 02 상속 상속: 기존의 class를 재사용하여 새로운 클래스를 작성하는 것 상속의 특징 코드의 재사용성을 높인다. 코드의 중복을 제거한다. 프로그램의 생산성과 유지보수에 기여한다. class Parent { } class Child extends Parent {} 규칙 한 방향이다. Parent -> child. parent class의 변화는 child에 영향을 끼치지만 child의 변화가 parent에 영향을 주지 않는다. child 는 parent class의 모든 멤버를 상속받는다 (단, 생성자와 초기화 블럭은 상속 X) child 멤버 >= parent 멤버 class Point { int x; int y; } // Point class의 영향 안받음 class Point1 { int ..

language/java 2023.03.04