Back-end139 스레드를 무한정 만든다면? 상황 가정 public class Main { public static void main(String[] args) { while (true) { Test test = new Test(); test.start(); } } private static class Test extends Thread { @Override public void run() { try { Thread.sleep(Long.MAX_VALUE); } catch (InterruptedException e) { throw new RuntimeException(e); } } } } 스레드를 무한정 생성해 sleep 시켜본다. 이때 무슨 상황이 발생할까? 결과 Exception in thread "main" java.lang.OutOfMemor.. 2023. 8. 31. PSA(Portable Service Abstraction) PSA란? PSA는 Portable Service Abstraction의 약자이다. 서로 다른 기술과 환경에서 일관된 방식으로 서비스를 구성할 수 있도록 도와주는 개념이다. PSA의 등장 배경 서로 다른 기술과 환경에서 소프트웨어를 개발하거나 관리할 때, 각각의 기술마다 다양한 설정, API 등 다루어야 하는 게 많아 코드가 복잡해지고 유지보수가 어려워진다. PSA는 이런 문제를 해결하기 위해 등장 했고, PSA를 통해 일관된 방식으로 다양한 기술과 환경을 다룰 수 있으며, 이를 통해 코드의 가독성과 유지보수성을 향상시켰다. Spring에서 PSA가 적용된 곳 데이터 액세스 : JDBC, JPA, Hibernate 등 데이터 액세스 기술을 일관된 방식으로 사용할 수 있도록 PSA를 제공한다. DataSo.. 2023. 8. 30. IoC/DI IoC란? IoC란 Inversion of Control의 약자로, 제어의 역전의 의미를 가진다. 일반적으로 컴퓨터 프로그램의 제어 흐름을 개발자가 제어하지만, IoC 패턴을 적용하면 프레임워크가 프로그램의 제어 흐름을 제어합니다. 이를 IoC라고 합니다. IoC의 장단점 컨테이너가 직접 객체를 생성/관리 하기 때문에 코드에 객체를 선언하지 않아도 주입만 시켜주면 된다. → 클래스간 결합도가 줄어든다. DI를 통한 IoC라면, 해당 서비스 객체를 여러 곳에서 재사용할 수 있게 된다. DI란? DI는 Dependency Injection의 약자로, 의존성 주입이라는 의미를 가진다. Di는 객체가 자신이 사용하는 의존성을 직접 생성하거나 결정하지 않고 외부에서 주입받도록 하는 패턴이다. DI의 장단점 의존성.. 2023. 8. 30. JDBC JDBC란? JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속하고 관리하기 위한 API이다. JDBC를 사용하면 다양한 데이터베이스 시스템에 대해 일관된 방식으로 데이터베이스에 접속하고 데이터의 CRUD 작업을 수행할 수 있습니다. 자바 CRUD 예제 import java.sql.*; public class JDBCCrudExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String username = "username"; String password = "password"; try { // 1. 데이터베이스에 연결 Connection c.. 2023. 8. 24. 가상 머신(스택 기반, 레지스터 기반) 가성 머신 가상 머신(VM : Virtual Machine)은 물리적인 CPU에 의해 처리되는 동작을 흉내낼 수 있어야 한다. 실제 하드웨어와 유사한 환경을 소프트웨어로 구현한 것이다. 이를 통해 여러 운영체제나 응용 프로그램등을 물리적 하드웨어상에서 실행하는 것처럼 실행할 수 있다. 가상 머신은 호스트 머신(실제 물리적 하드웨어) 위에서 동작하며, 각 가상 머신은 독립적으로 실행되는 것 처럼 보이지만, 실제로는 호스트 머신의 자원을 공유한다. 가상 머신은 아래의 개념을 구현해야 한다. 소스 코드를 VM이 실행할 수 있는 바이트코드로 변환 명령어와 피연산자를 포함하는 데이터 구조 함수를 실행하기 위한 콜스택 다음 실행할 명령어를 가리키는 IP(Instruction Pointer) 가상 CPU Fetch .. 2023. 8. 24. Object.equals()를 재정의 해야 하는 이유 Object Object 클래스는 모든 클래스의 최상위 클래스이다. 항상 모든 클래스는 Object 클래스를 extend 한다. 즉, Object 클래스에 있는 메서드도 사용이 가능하다. 왜 equals()를 오버라이딩 해야하는가? equals()는 자바에서 동등성 비교를 할 때 사용하는 연산이다. 즉, 값 비교를 할 때 사용한다. public boolean equals(Object obj) { return (this == obj); } 해당 equals()는 Object 클래스에 구현되어 있는 메서드이다. 즉, Object.equals()를 재정의 하지 않을 경우 동일성 비교만 한다. 자바에서 == 연산은 동일성을 비교하는 것이고, 동일성을 비교한다는 것은 같은 주소를 가지고 있는지 비교하는 것이다. .. 2023. 8. 24. 이전 1 2 3 4 5 6 7 ··· 24 다음