JAVA

· JAVA
💋 try-with-resources ✔️ 개념 try-with-resources 구문은 Java 7부터 도입된 기능으로, 리소스를 효율적으로 사용하고 자동으로 닫아주는 역할을 합니다. 주로 입출력 스트림, 데이터베이스 연결, 네트워크 연결 등 자원을 사용하는 경우에 유용하게 활용됩니다. ✔️ 사용방법 try-with-resources 구문은 다음과 같은 형식으로 사용됩니다: try (리소스를 선언 및 초기화) { // 리소스를 사용하는 코드 작성 } catch (예외 타입 변수) { // 예외 처리 } 여기서 "리소스"는 AutoCloseable 인터페이스를 구현한 객체를 말합니다. AutoCloseable 인터페이스는 close() 메소드를 정의하고 있으며, 이 메소드를 호출하여 리소스를 닫을 수 있..
· JAVA
💋 인트로 안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 이번 포스팅에서는, JAVA Reflectoin API에 대해서 알아보려고 한다. 개인적으로 공부하기 전에는 한없이 어렵게 느껴졌고, 개념이 뭔지 찾아봐도 잘 모르겠었지만, 스스로 Spring MVC 프레임워크를 구현하기 위해서 공부하고 사용한 이후로는 굉장히 개념이 명확하게 다가왔다. 이 개념이 많이 어렵게 느껴진다면, 아래 예시 코드부터 살펴보는 것을 추천한다! 💋 Reflection API ✔️ Reflection이란? 구체적인 클래스 타입을 알지 못해도 그 클래스의 정보(메서드, 타입, 변수 등등)에 접근할 수 있게 해주는 자바 API 컴파일한 클래스를 동적으로 프로그램이 가능하도록 자바에서 지원하는 기능 Java 클래스의 필드, 메서..
· JAVA
💋 인트로 이번 포스팅에서는, Java Reflection API에서 클래스의 이름을 가져오기 위해 사용하는 두 메서드에 대해서 비교해서 알아봅시다! 💋 getName() vs getCanonicalName() getName() 메서드 Class 객체의 이름을 반환합니다. 클래스의 패키지 이름을 포함한 전체 경로 getCanonicalName() 메서드 Class 객체의 정규화된 이름을 반환 클래스의 패키지 이름을 포함하지만, 내부 클래스의 경우에는 $으로 구분하여 표기 💋 코드 예시 ✔️ 실행 코드 public class ExampleClass { public static void main(String[] args) { // 클래스 객체 생성 Class classObj = ExampleClass.Inn..
· JAVA
💋 동기화 문제 발생 class SynchronizationTest { @Test void testSynchronized() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(3); SynchronizedMethods summation = new SynchronizedMethods(); IntStream.range(0, 1000) .forEach(count -> executorService.submit(summation::calculate)); executorService.awaitTermination(500, TimeUnit.MILLISECONDS); assertThat(summation..
· JAVA
💋 쓰레드 풀의 필요성 서버는 동시에 여러 사용자가 접속할 수 있습니다. 자바에서는 스레드를 운영 체제의 자원으로 사용합니다. 우리가 스레드를 계속해서 만들면, 운영 체제의 자원이 빨리 소진될 수 있어요. 서버는 동시 접속자가 많아지면 스레드가 무한대로 생성되면서 서버가 다운될 위험이 있습니다. 애플리케이션 프로세스에서 사용되고 있는 쓰레드의 개수를 관리하기 위해서 쓰레드 풀을 도입할 수 있습니다. 💋 쓰레드 풀이란? ✔ 개념 쓰레드 풀은 미리 일정 개수의 쓰레드를 생성하여 관리하는 기법입니다. 이렇게 생성된 쓰레드들은 작업을 할당받기 위해 대기 상태에 있게 되는데, 작업이 발생하면 대기 중인 쓰레드 중 하나를 선택하여 작업을 수행합니다. 작업이 완료되면 해당 스레드는 다시 대기 상태로 돌아가고, 새로운..
· JAVA
💋 인트로 과거의 컴퓨터는 한 번에 하나의 작업만 가능했다. 사진을 다운로드 받는 작업, 마우스나 키보드로부터 입력을 받는 작업, 브라우저로 사이트를 돌아다니는 작업을 동시에 할 수 없었다. 이후 컴퓨터는 동시에 여러 개의 작업을 하는 멀티태스킹이 가능해졌다. 배경에 있는 프로세스, 쓰레드에 대해 알아보자. 💋 개념 프로세스 실행중인 프로그램 프로그램을 실행하면 OS로부터 자원(메모리)을 할당받아 프로세스가 됨. 쓰레드 프로세스의 자원을 이용해 실제로 작업을 수행하는 것 프로세스의 구성 자원(데이터, 메모리) + 쓰레드 모든 프로세스는 1개 이상의 쓰레드가 존재 2개 이상의 쓰레드를 가진 프로세스는 ‘멀티 쓰레드 프로세스’ 💋 멀티쓰레딩의 장단점 장점 CPU 사용률 향상 자원을 효율적으로 사용할 수 있음..
· JAVA
💋 인트로 요즘 스프링 프레임워크의 사용 위주로 공부중이다. 스프링이 낯설다 보니깐 사용법 위주로 공부하게 되는데, 이전에 자바만을 공부하면서 지키려고 노력했던 다형성을 많이 신경쓰지 않으면서 개발하게 된 것 같다는 기분이 들었다. 물론 이건 내가 초짜라 그렇다. 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다! 잘 사용한다면 객체 지향 애플리케이션을 만들기 위해서 완전 빠방하게 잘 도와줄텐데, 일단 그전에 이번 포스팅을 통해서 좋은 객체지향이 뭔지에 대해서 공부해보자! 암튼 오늘은 로버트 마틴이 정리했던 객체지향의 5가지 원칙에 대해서 정리해보려고 한다! 💋 SOLID 로버트 마틴이 정리한 5가지 원칙이다. 그냥 앞글자를 따서 SOLID 원칙이라고도 하고, 암튼 내용을 잘..
· JAVA
IoC(Inversion Of Control)는 제어의 역전이다. IoC가 무엇인지에 대해서는 이 글을 참고하면 이해가 쉬울 것 같다! 우리가 다루고 있는 모든 객체를 하나의 부품이라고 생각해보자...! 그렇다면 스프링이 갖고있는 아주 기본적인 역할 중 하나는 부품을 조립해주는 능력이다. 스프링은 객체의 생성과 객체 간의 의존성을 관리해주는 기능을 한다. 이 개념을 이해하기 위해서는 DI(Dependency Injection)과 IoC(Inversion of Control) 컨테이너이라는 두 용어에 대해 알고 있어야 한다. 지난 포스팅에서 DI에 대해 다루었으니, 오늘은 IoC 컨테이너에 대해 알아보려고 한다! 부품을 조립(객체를 생성)하기 위해서는 주문서가 있어야 한다. 어떤 부품이 얼마나 필요하고, ..
· JAVA
💋 구현 순서를 지키자 클래스 내에서 순서가 있다. 상수, static 변수, 인스턴스 변수, 생성자, 메서드 순으로 작성한다. 메서드는 public 메서드 내에서 호출하는 private 메서드를 바로 아래에 적는 것이 더 읽기 편하다. (이 부분에 대해서는 사람들 의견이 다양하다.) 기능별로 모아서, 호출하는 순서대로 배치한다면 읽기 편할 것이다. getter와 equals 오버라이딩 같은 것은 맨 아래에 둔다. 나는 getter => equals, hashCode, toString 오버라이딩 메서드 순서로 놓는 것을 좋아하는데, getter를 맨 아래에 두어야 한다는 사람들도 좀 있다. 이런 부분은 그냥 우리팀 하는대로 해서 일관성만 유지하면 될 것 같다. public class Car { priva..
· JAVA
💋 제네릭이란? 데이터의 타입(data type)을 일반화(generalize)하는 것을 의미한다. 💋 제네릭 사용 이전의 코드 ArrayList values = new ArrayList(); values.add("this is string"); values.add(1); values.add(new Position(1, 2)); String first = (String) values.get(0); int second = (int) values.get(1); Position third = (Position) values.get(2); 제네릭을 통해서 타입을 지정하기 이전의 세상은... 이렇게 리스트가 자유로웠다! 한 리스트에 String, int, 참조타입 등등 원하는건 다 넣을 수 있었다. 완전 좋은거 ..
깃짱
'JAVA' 카테고리의 글 목록