💻 < 프로그래밍 언어 >

프로그래밍 언어는 컴퓨터가 이해할 수 있는 명령을 작성하기 위한 도구를 말한다.

 

컴퓨너는 0과 1만 이해할 수 있고, 사람의 말은 이해할 수 없다. 따라서 JAVA,C,C++과 같은 프로그래밍 언어를 사용해야 한다. 이런 프로그래밍 언어들은 기계어로 바뀌어 컴퓨터에 전달된다.


프래그래밍 언어는 크게 고급언어, 어셈블리어,기계어로 나뉜다.

 

📟 < 고급 언어 >

고급 언어는 인간이 이해하기 쉬운 문장을 사용해, 컴퓨터가 수행해야 할 작업을 정의한 언어로,

C,C++,JAVA 등이 있다.

📟 < 어셈블리어 >

고급 언어와 기계어 사이에는 어셈블리어가 있다. 어셈블리어는 기계어와 1 대 1로 대응되는 언어로, 굳이 따지 자면 기계어와 좀 가깝다고 할 수 있다.

📟 < 기계어 >

기계어는 2진 데이터(0010100100111...)로 구성돼 있어 컴퓨터가 직접 알아들을 수 있는 언어를 말한다.

 

즉, 람이 이해할 수 있는 언어를 구사하는 것이 '고급 언어',

이를 컴퓨터가 이해할 수 있는 언어로 번역한 것이 '기계어'인 셈이다. 따라서 고급 언어를 사용해 컴퓨터에게 명령을 전달 하려면 반드시 '번역'이라는 과정을 거쳐야 한다. 그림 1-1을 살펴보자.

고급언어로 사람이 코드를 작성해서, 컴파일러(번역) 하면 기계어로 컴퓨터가 해석..

 

C 언어와 같은 프로그램을 배운 경험이 있다면 위 이야기는 익숙할 수 있다.

 

하지만 잠시 기계어가 무엇인지 생각해 보자.. 기계어는 '컴퓨터가 이해할 수 있는 언어'라고 했다. 여기서 반드시 짚고 넘어가야 할 점은 '모든 컴퓨터는 똑같은 기계어를 사용할까?'라는 것 이다.

 

답은 당연히 '다르다'이다. 인간이 사는 지역마다 서로 다른 언어를 사용하듯이 컴퓨터도 자신의 플랫폼에 따라 서로 다른 언어를 사용한다. 예를 들어 Window 컴퓨터와 MAC 컴퓨터는 서로 다른 기계어를 사용한다.

 

따라서 동일한 고급 언어로 작성된 프로그램이라 하더라도 다른 플랫폼상에서 동작하도록 하기 위해서는 다른 컴파일러를 사용해야 한다. 

 

 

출처 : Do it! 자바 완전 정복 

http://www.yes24.com/Product/Goods/103389317

 

Do it! 자바 완전 정복 - YES24

이 책은 ‘이제 막 프로그래밍에 입문한 사람’에게 꼭 필요한 기본기부터 ‘찐개발자’라면 꼭 알아야 할 내용까지 국내 집필서 중 가장 많은 도해와 그림을 이용해 설명한다. 특히 프로그래

www.yes24.com

 

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
DI(Dependency Injection) Explanation and Code  (0) 2023.04.03
JAVA IllegalStateExecption  (0) 2023.04.03
java UncheckedException nullpointerexception  (0) 2023.04.03

🤔 < Dependency Injection ? >

Object간의 관계를 정의하며, 관계에 의해 필요한 객체를 제공하는 것.

예를 들어, Service Class가 Repository Class를 사용할 때, Service Class는 Repository Class에 대한 의존성이 생긴다.

이런 의존성을 줄이는 방법 중 하나가 바로 "Dependency Injection" 이다.

 

🔥 < Dependency Injection Code in Java >

public class Service {
private final Repository repository;

public Service(Repository repository) {
this.repository = repository;
}

public void doSomething() {
 repository.performAction();
 }
}

위의 Code에서 Service Class는 Repository Class의 performAction() method를 사용한다. 이 method는 Repository Class에서 구현된다.

public class Repository{
  public void performAction() {
    //..
  }
}

이제 Service Object를 생성할 때, Repository 객체를 생성자에게 전달해주면 된다.

Repository repository = new Repository();
Service service = new Service(repository);
service.doSomething();

이렇게 하면, Service Class는 Repository Class의 기능을 사용할 수 있다. 이것이 바로 Dependency Injection의 개념이다.

 

🤔< Dependency Injection의 장점 ? > 

DI를 사용하면 코드의 재사용성,테스트 편의성,유연성이 향상된다. 특히 클래스 간의 의존성을 줄이므로 테스트와 리팩토링이 수월해진다.

 

 

Reference : Martin Fowler의 Dependency Injection

Wikipedia: Dependency Injection

 

Inversion of Control Containers and the Dependency Injection pattern

Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.

martinfowler.com

 

Dependency injection - Wikipedia

From Wikipedia, the free encyclopedia Software programming technique Dependency injection is often used alongside specialized frameworks, known as 'containers', to facilitate program composition. In software engineering, dependency injection is a design pa

en.wikipedia.org

 

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
프로그래밍 언어와 자바  (0) 2023.04.03
JAVA IllegalStateExecption  (0) 2023.04.03
java UncheckedException nullpointerexception  (0) 2023.04.03

JAVA IllegalStateExecption

IllegalStateException은 잘못된 상태에서 코드가 실행될 때 발생하는 예외

public class Main {
   public static void main(String[] args) {
      List list = new ArrayList<>();
      list.add("Hello");
      list.add("World");
      list.clear();
      if (!list.isEmpty()) {
         list.get(0); // throws IllegalStateException
      }
   }
}

위 예시 코드에서 list.clear() 메서드를 호출하여 list가 비워짐.그 후, list.isEmpty() 메서드를 호출하여 비어있는지 확인하고, 비어있지 않을 경우 (if (!list.isEmpty())) list.get(0) 메서드를 호출.하지만, list가 비어있기 때문에 list.get(0) 메서드 호출 시 IllegalStateException이 발생.



1.Iterator에서 next() 메서드 호출 전에 remove() 메서드가 호출된 경우

2.ArrayList에서 add() 메서드 호출 후, size() 메서드와 같은 메서드로 크기 제한이 초과된 경우

3.이미 닫힌 데이터베이스 연결을 사용하려고 시도한 경우

4.이미 닫힌 파일에 쓰려고 시도한 경우

5.이미 종료된 스레드에서 실행을 시도한 경우

6.이미 닫힌 소켓에서 데이터 전송을 시도한 경우

7.이미 실행된 메서드를 다시 실행하려고 시도한 경우

8.스레드 풀에서 이미 실행된 작업을 다시 실행하려고 시도한 경우

9.이미 닫힌 세션에서 데이터 전송을 시도한 경우

10.이미 닫힌 스트림에서 데이터 쓰기를 시도한 경우에서 발생 한다.

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
프로그래밍 언어와 자바  (0) 2023.04.03
DI(Dependency Injection) Explanation and Code  (0) 2023.04.03
java UncheckedException nullpointerexception  (0) 2023.04.03

java UncheckedException nullpointerexception

1.NullPointerException (NPE):

NullPointerException은 Java에서 객체가 존재하지 않음을 나타내는 오류.

객체를 사용하려고 했을 때 발생하며, 객체를 먼저 생성하거나 null 값을 확인하지 않아 발생.

String name = null; // name 변수에 null 값을 할당

System.out.println(name.length()); // name 변수의 길이를 출력하려 하지만 name이 null이므로 NullPointerException이 발생.

String str = null;
System.out.println(str.length());

2.ArrayIndexOutOfBoundsException:

ArrayIndexOutOfBoundsException은 배열의 범위를 벗어난 인덱스에 액세스하려고 할 때 발생한다. 배열의 인덱스는 0부터 시작하므로, 인덱스는 0에서 배열 크기의 -1 사이의 값이어야 한다. 이 예외를 피하기 위해 배열 인덱스의 유효성을 확인하고, 반복문에서 범위를 벗어나지 않도록 주의해야 한다.

int[] numbers = new int[5];
numbers[5] = 10; // ArrayIndexOutOfBoundsException 발생

3.ArithmeticException:

ArithmeticException은 산술 연산에서 잘못된 연산이 발생할 때 발생하는 예외이다. 가장 일반적인 경우는 0으로 나누려고 할 때 발생한다. 이 예외를 피하기 위해 연산 전에 분모가 0이 아닌지 확인하거나, 예외 처리를 사용하여 적절한 처리를 수행해야 한다.

int x = 10;
int y = 0;
int result = x / y; // ArithmeticException 발생 (0으로 나누기)

이러한 Unchecked Exceptions를 처리하려면 프로그램 로직을 주의 깊게 검토하고, 예외가 발생할 수 있는 상황을 파악하여 적절한 방어 코드를 작성해야 한다. 필요한 경우 try-catch 블록을 사용하여 예외를 처리하고, 프로그램이 예외 발생 시 적절한 동작을 수행할 수 있도록 해야 한다.

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
프로그래밍 언어와 자바  (0) 2023.04.03
DI(Dependency Injection) Explanation and Code  (0) 2023.04.03
JAVA IllegalStateExecption  (0) 2023.04.03

+ Recent posts