개요

Intellij로 Maven 기반의 Java 어플리케이션을 생성한 후 기본적인 설정을 마치고 실행해보니 `Error:java: error: release version 5 not supported` 에러가 발생했다.

요즘같은 시대에 무슨 5 버전인가 하여 Java 의 버전 문제일 것이라고는 생각도 못해서 고려를 안해보았는데 구글링해보니 비슷한 이슈가 많은 듯 하여 정리해본다.


해결방법

지금까지 Gradle만 사용해봐서 해당 이슈를 경험한 적이 없었던 것이었다. Intellij에서 maven 프로젝트를 생성하면 기본적으로 Java 1.5 버전으로 설정한다. 그래서 프로젝트의 컴파일과 관련된 버전들을 모두 추가로 세팅해주어야 한다.  

 

  • Preference > Build, Execution, Deployment > Compiler > Java Compiler 메뉴에 들어가 해당 모듈의 타겟 버전을 default 인 1.5버전을 클릭해 원하는 버전으로 변경해준다.  
  • File > Project Structure > Language level 을 기본 세팅되어 있는 5를 클릭해 원하는 버전으로 변경해준다.  

-끗-

반응형

'Dev > Java' 카테고리의 다른 글

MacOS Java11 버전 업그레이드  (0) 2021.02.27
[Java] 용어정리.zip  (0) 2020.09.29
[Java] Stateless Object  (0) 2020.04.11

개요

현재 본인의 Mac에 설치된 Java 버전은 8이다.

1
2
3
4
$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
cs

Java11이 LTS로 나온지 한참이 지났는데도 미뤄온 버전 업그레이드를 진행한다.

방법

MacOS에서 Java 버전을 업데이트 하기 위해서는 크게 두가지 방법이 있다.
Jdk 파일을 다운로드 받거나, MacOS용 패키지 관리자인 HomeBrew로 설치하는 방법이다.

Oracle에서 제공하는 OpenJdk는 현재 HomeBrew로 설치를 지원하지 않는다.
Oracle의 OpenJdk를 설치하려면 15버전 기준으로 jdk.java.net/15/ 링크에서 파일 다운로드가 가능하다.
새로운 Jdk 버전이 6개월에 한번씩 나오는 상황에서는 brew로 설치할 수 있어 관리가 용이한 AdoptOpenJdk를 설치하려 한다.

설치

1
2
3
4
5
6
7
# 무조건 최신 버전의 OpenJdk 설치
$ brew install --cask adoptopenjdk
 
# 원하는 버전의 OpenJdk를 선택하여 설치
# 설치 가능한 버전 확인은 brew search adoptopenjdk
$ brew tap AdoptOpenJDK/openjdk
# brew install --cask <version>
$ brew install --cask adoptopenjdk11
cs

설치가 완료된 후 아래의 이미지와 같이 java -version 명령어를 이용해 정상적으로 설치되었는지 확인이 가능하다.

참고

 

AdoptOpenJDK/homebrew-openjdk

AdoptOpenJDK HomeBrew Tap. Contribute to AdoptOpenJDK/homebrew-openjdk development by creating an account on GitHub.

github.com

 

반응형

'Dev > Java' 카테고리의 다른 글

[Intellij] Maven - Error:java: error: release version 5 not supported 에러  (0) 2021.07.02
[Java] 용어정리.zip  (0) 2020.09.29
[Java] Stateless Object  (0) 2020.04.11

개요

사소하게 쓰이는 단어들이지만 정확한 정의를 입으로 뱉지 못하는 일이 없도록 정리하고 조금씩 차이가 있는 단어들의 비교해서 명확한 차이를 파악하자!

목차


 

Parameter (매개변수) vs Argument (인수)

Effective Java를 읽다보면 매개변수와 인수라는 단어가 자주 나오는데 생각해보니 둘을 혼용해서 써왔던 것 같다.
두 단어의 정확한 정의는 아래와 같다.
Parameter : 메서드 선언에 정의한 변수
Argument : 메서드 호출 시 넘기는 '실젯값'

// value - parameter
void add(int value) { ... }
// 10 - argument
add(10)
반응형

코드리뷰 중 아래와 같은 질문을 받았다.

클래스가 서비스 형태로 사용되는 경우, 상태 정보를 가지고 있지 않은 무상태(stateless) 방식으로 만들면 어떤 장점이 있을까요?

클래스 내에 인스턴스 변수를 사용하지 않는다라는 생각을 해 본적이 없어서 살짝 당황했었다. 나름대로 고민을 해 보았지만 그렇다할 답이 생각이 나지 않아 구글링을 하다보니 관련된 stackOverflow 질문글이 있었다.


질문에 대한 답변은 아래와 같다.

Stateless object is an instance of a class without instance fields (instance variables). The class may have fields, but they are compile-time constants (static final).

A very much related term is immutable. Immutable objects may have state, but it does not change when a method is invoked (method invocations do not assign new values to fields). These objects are also thread-safe.

간단히 정리해보자면, Stateless Object란 인스턴스 변수가 없는 객체를 말한다.

 

코드로 예시를 들어보면 더욱 이해가 쉬울 것 같다.

아래와 같은 코드는 Stateless Object이다.

public class Car {
    void Car() {
    System.out.println("I'm car!");
    }
}

말그대로 인스턴스 변수가 없는 객채인데, 아래와 같은 컴파일 타임에 정의되어있고 변경되지 않는 상수를 가지는 경우도 Stateless Object라고 지칭할 수 있다.

public class Car {
  static final String CAR_MESSAGE = "I'm car!";

  void Car() {
    System.out.println(CAR_MESSAGE);
  }
}

Stateless Object와 연관된 헷갈릴 수 있는 개념으로는 Immutable Object가 있다.
객체지향 프로그래밍에서 Immutable Object는 상태를 바꿀 수 없는 객체이다.

public class Car {
  private static String message;

  void Car(String message) {
    this.message = message;
  }

  public void printMessage() {
    System.out.println(message);
  }
}

이와 같이 불변 객체는 상태가 한번 지정되면 바뀔 수 없지만 컴파일 시점에 값이 정의되는 것이 아니어서 Stateless Object라고 할 수는 없다.

 

완전한 정답은 없겠지만 내가 생각해본 stateless 객채의 장점은 아래와 같지 않을까 싶다.

  • SOLID 법칙중 확장에 열리고 수정에 닫힘을 보장
  • 쓰레드에 안전
  • 인터페이스화 하기 용이
반응형

+ Recent posts