[JAVA] 리소스(resource) 자동 닫기
Language/Java2023. 7. 25. 00:45[JAVA] 리소스(resource) 자동 닫기

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 리소스란 데이터를 제공하는 객체(DB 등)를 뜻한다. 리소스를 사용하기 위해선 열어야 하고, 사용이 끝나면 반드시 닫아야 한다. 리소스를 사용하고 닫지 않으면 불안정한 상태로 남게 된다. try-catch-finally문 리소스를 자동으로 닫는 기본적인 방법은 try-catch-finally문에서 finally 부분에 리소스를 닫는 코드를 넣어주면 된다. finally는 예외가 발생하든 안 하든, 메소드가 return문을 만나도 무조건 실행되기 때문이다. FileInputStream fis = null; try { fis = new FileInputStream("file.tsxt");..

[Java] Getter와 Setter 메소드
Language/Java2023. 7. 24. 09:10[Java] Getter와 Setter 메소드

일반적으로 객체 지향 프로그래밍에서는 객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막는다. 왜냐하면 예를 들어 속력은 음수가 될 수 없는데, 외부에서 속력을 저장하는 변수에 음수를 저장하면 문제가 생긴다. 이를 무결성이 깨졌다고 한다. 이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해서 필드를 변경하는 방법을 선호한다. 필드는 외부에서 접근할 수 없게 하고(private 접근 제한자 사용), 메소드는 접근할 수 없는 필드에 접근할 수 있도록 한다. 이러한 메소드를 Setter라고 한다. 외부 객체에서 데이터를 읽을 때도 메소드를 사용하는 것이 좋다. 왜냐하면 필드값을 직접 사용하면 부적절한 경우도 있기 때문이다. 이런 경우에는 메소드로 필드값을 가공한 후 외부로 전달하면 된..

[JAVA] 리플렉션(Reflection)과 어노테이션(Annotation)
Language/Java2023. 7. 23. 00:55[JAVA] 리플렉션(Reflection)과 어노테이션(Annotation)

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 리플렉션 리플렉션이란 실행 도중에 타입(클래스, 인터페이스 등)을 검사하고 구성 멤버를 조사하는 것을 말한다. 이클립스 개발환경에서 outline과 비슷하다고 생각하면 된다. 자바는 클래스와 인터페이스의 메타 정보를 Class 객체로 관리한다. 메타 정보 패키지 정보, 타입 정보, 멤버(생성자, 필드, 메소드) 정보 등을 말한다. 이러한 메타 정보를 프로그램에서 읽고 수정하는 행위를 리플렉션이라고 한다. 프로그램에서 Class 객체를 얻으려면 아래의 3가지 방법 중 하나를 이용한다. Class clazz = 클래스이름.class; //클래스로부터 얻는 방법 Class clazz = C..

[JAVA] 전이 의존과 집합 모듈
Language/Java2023. 7. 22. 00:33[JAVA] 전이 의존과 집합 모듈

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 전이 의존 이러한 의존 관계를 아래의 의존 관계로 바꾸었다고 해보자. 이렇게 되면 myapp1은 module_1에 있는 내용은 접근할 수 있지만, module_2의 내용은 접근할 수 없다. myapp1에서 module_1과 module_2에 있는 내용 전부 접근하고 싶다면 전이 의존을 이용해야 한다. 이 상황에서 전이 의존은 module_1의 모듈 기술자에 transitive 키워드와 module_2를 의존 설정하면 된다. module myapp1 { requires module_1; } module module_1 { requires transitive module_2 } 당연히 m..

[JAVA] 모듈(응용 프로그램 모듈화)
Language/Java2023. 7. 21. 00:31[JAVA] 모듈(응용 프로그램 모듈화)

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 모듈 Java 9부터 지원함 모듈은 패키지 관리 기능까지 포함된 라이브러리 모듈을 만들려면 필수로 모듈 기술자(module-info.java)가 있어야 한다. 모듈 기술자가 없으면 라이브러리이고, 있으면 모듈이다. 라이브러리와 달리 모듈은 패키지를 은닉하여 모듈 밖인 외부에서는 접근할 수 없게 할 수 있다.(접근 제한자 private와 비슷한 기능) 패키지 은닉 패키지를 은닉하는 이유는 아래와 같다. -패키지 1은 공개하고 패키지 2와 3은 은닉하여, 패키지 1로 사용방법을 통일할 수 있기 때문이다. -모듈 성능 향상을 위해 패키지 2와 3을 수정하더라도 외부에서는 모듈 사용 방법(패..

[JAVA] 자바 표준 모듈, java.base 모듈
Language/Java2023. 7. 20. 00:14[JAVA] 자바 표준 모듈, java.base 모듈

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 자바 표준 모듈 표준 라이브러리는 Java 9부터 모듈화가 되어 아래의 그림처럼 Java 17 표준 모듈이 완성되었다. 화살표는 모듈 간의 의존 관계를 표시한다. java.base는 모든 모듈이 의존하는 기본이자 핵심 모듈이다. 또한 requires 하지 않아도 사용할 수 있다. java.base 모듈에는 java.lang, java.util, java.io 등의 핵심 패키지가 있고, java.lang을 제외하고 import 해서 사용할 수 있다. java.se는 JDK가 제공하는 모든 모듈을 제공하는 집합 모듈이다. 표준 라이브러리를 제한 없이 사용하고 싶을 경우에는 java.se를..

[JAVA] 라이브러리 생성 및 불러오기
Language/Java2023. 7. 19. 00:26[JAVA] 라이브러리 생성 및 불러오기

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 라이브러리는 프로그램 개발 시 활용할 수 있는 클래스와 인터페이스들을 모아 놓은 것을 말한다. 일반적으로 JAR(Java ARchive) 압축파일 형태로 존재한다. JAR 파일에는 클래스와 인터페이스의 바이트 코드 파일(~.class)들이 압축되어 있다. 라이브러리를 사용하면 개발 시간이 단축되고 유지보수가 용이하다. 나만의 라이브러리 생성하기 1. 새 프로젝트 생성 주의할 점은 Create module-info,java file에 체크를 하지 않는 것이다. 프로젝트 이름은 my_lib로 하였고, 패키지 pack1과 pack2를 생성하고 각 패키지에 A와 B 클래스를 선언했다. 2. ..

[JAVA] 중첩 인터페이스 (nested interface)
Language/Java2023. 7. 18. 00:54[JAVA] 중첩 인터페이스 (nested interface)

이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 중첩 인터페이스 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 뜻한다. 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계이기 때문이다. 즉, 인터페이스 외부의 클래스가 존재하지 않는다면 해당 인터페이스는 쓸모가 없기 때문이다. 중첩 인터페이스는 아래와 같이 선언된다. class A{ [public | private] | [static] interface B{ //상수 필드 //추상 메소드 //디폴트 메소드 //정적 메소드 } } 외부의 접근을 막지 않으려면 public A 클래스 내부에서만 사용하려면 private 접근 제한자를 붙이지 않으면 같은 패키지 안..

image