자바(Java)

자바(Java)

[자바] 터미널에서 Spring프로젝트 빌드 시 자바 버전 오류 해결 방법

인텔리제이에서 실행(문제 없음) 스프링으로 프로젝트 생성 후에 인텔리제이에서 실행시킨모습이다. 정상적으로 잘 작동하였고 localhost도 잘 띄워진다 터미널에서 실행(문제 생김) 문제 발생 문제는 터미널에서 실행시켰을때 문제가 발생한다. 참고로 윈도우 기준이다 Spring프로젝트 폴더인 hello-spring디렉터리 안에서 gradlew.bat 파일을 명령어 ./gradlew.bat build 를 통해서 실행할려는 순간 오류가 발생한다(참고로 맥은 gradlew파일을 빌드하면 되는걸로 안다) 오류 내용 쉽게 얘기하면, 실행할려는 파일의 자바 버전은 17인데 컴퓨터가 빌드하는데 사용하는 자바 버전은 8이라는 내용이다. 문제는 여기부터다. 버전 관련 내용들 자바 버전이 알맞게 17로 설정되어있는것을 알 수..

자바(Java)

[자바] 람다식(lamda)

람다식 설명 자바 1.8부터 추가되었다 함수랑 메서드는 약간은 다르다(메서드는 객체지향의 의미를 가진 함수, 클래스가 필요함) 사용이유 불필요한 코드를 줄이고, 가독성을 높이기 위함, 컴파일러가 문맥을 살펴 타입을 추론하고 람다식으로 선언된 함수는 1급 객체이기 때문에 Stream API의 매개변수로 전달가능 람다식 작성법 //기존 반환 타입 메서드이름(매개변수 선언){ 문장들 } //람다식 (매개변수 선언) -> { 문장들 } //return 식 대체 //기존 (매개변수 선언) ->{ return a>b ? a:b; } //람다식 (매개변수 선언) -> a > b ? a:b //심지어 타입까지 생략가능(int형인 a,b가 있다고 가정) (a, b) -> a > b ? a : b //파라미터하나일경우 a..

자바(Java)

[자바] 제네릭(Generic)

제네릭 정의 JDK 1.5에 처음 도입, 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크해주는 기능이다. 추가로 에러는 언제나 런타임보다 컴파일 타임에 잡는것이 좋다(런타임 에러는 프로그램이 실행되는 동안 발생하는데 이는 프로그램 실행 중단으로 이어질 수 있다) 제네릭의 장점 타입 안정성을 제공 리스트의 형을 정함으로써 컴파일러가 들어오는 데이터의 타입을 자동으로 체크해준다(리스트에 타입이 다른 데이터가 못들어오게함 = 안정성) 타입체크와 형변환을 생략 할 수 있으므로 코드가 간결해진다 ex. 원래는 list의 객체를 가져올때 object()형으로 반환되서(String)list.get(0)이런식으로 문자열을 가져와야하는게 이제는 쓸 필요가 없다 예시 //제네릭 미사용 Lis..

자바(Java)

[자바] 자바 I/O

I/O 입출력 I/O는 input, output의 약자로 입출력 통칭하는 용어로 I/O라고 부르며 읽을때는 Input, 파일쓰거나 외부전송은 Output이다(JVM기준) 한마디로 프로그램간의 데이터를 주고 받는것을 말한다 키보드로부터 데이터를 입력받는것 print문을 이용해 화면에 출력하는것 스트림(Stream)/ 버퍼(Buffer)/ 채널(Channel) 기반의 I/O Stream Stream 데이터를 운반하는데 사용되는 연결통로 자료의 입출력을 도와주는 중간 매개체 역할을 한다. 응용 프로그램과 입출력 장치를 연결하는 소프트웨어 모듈 단방향: 입력, 출력 다안하고 하나만 가능하다(따라서 동시에 수행할려면 스트림이 2개 필요하다), 추가로 도달하는것은 큐를 생각하면 됨(선입선출) Buffer 데이터를 ..

자바(Java)

[자바] 자바 어노테이션

어노테이션 어노테이션이란? 어노테이션은 자바 1.5부터 추가된 요소로 사전적 의미로는 주석을 의미한다. 하지만 자바에서는 단순 주석이 아닌 클래스에 특수한 의미를 부여하거나 기능을 주입하기 위한 메타데이터라고 볼 수 있다. 어노테이션은 인터페이스 일종으로 @를 사용하여 선언한다. 전에 JUNIT 테스트시 사용하는 @Test도 어노테이션이다. 단지 이게 테스트해야한다는 것을 프로그램에게 알리는 역할을 할 뿐, 메서드가 포함된 프로그램에는 아무런 영향을 미치지 않는다. 어노테이션의 용도 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공 인텔리제이 같은 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공 런타임 시 특정기능을 실행하도록 정보를 제공 어노테이션의 종류 Buil..

자바(Java)

[자바] 자바 Enum

열거형 열거형이란 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 자바 1.5전에는 C언어와 달리 별도의 열거형이라는 것이 존재하지 않았으나 1.5부터 새로 추가되었다. enum은 여러 상수를 정의한 후, 정의된 것 이외의 값은 허용하지 않는다. 아래는 Enum이 컴파일러에 의해 정의되는것부터 Enum의 상수들이 바이트코드로 포함되고 이후 런타임때 클래스 로더에 의해 로드되는 과정을 아래 그림으로 표현했다 사용 이유와 장점 코드 가독성 향상: Enum은 관련된 상수들을 그룹화하고 이름을 부여하여 코드의 가독성을 향상시킵니다. 이 경우, 각 단위(Unit)는 Enum 상수로 정의되어 있으며, 코드에서 해당 상수를 사용하면 의미가 명확하게 전달됩니다. 타입 안정성..

자바(Java)

[자바] 자바 멀티쓰레드 프로그래밍

Thread 클래스와 Runnable 인터페이스 먼저 프로세스와 쓰레드가 뭔지 알아보자 Process 독립적인 실행 단위로, 운영체제에서 자원과 메모리를 할당받아 실행되는 프로그램의 인스턴스를 나타낸다 각 프로세스는 자체 메모리 공간을 가지며, 서로 간섭하지 않고 독립적으로 실행된다. Thread 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다 모든 프로세스에는 1개 이상의 쓰레드가 존재하여 작업을 수행한다 두 개 이상의 쓰레드를 가지는 프로세스를 멀티 쓰레드 프로세스 라고한다 Thread 클래스와 Runnalbe 인터페이스 쓰레드 생성 방법 2가지 Runnable 인터페이스 사용 Thread 클래스 이용 아래는 자바내에 정의된 Thread클래스의 코드다(Thread관련 메서드와 변수를 java...

자바(Java)

[자바] 자바 예외처리

자바에서 예외 처리 방법 try, catch, finally try-catch 프로그램 실행 도중 발생된 에러는 어쩔 수 없지만 이외엔 대비처리를 해야한다. 이럴때 이제 대비 처리하는 try-catch문을 작성해줘야한다. try{ //예외 발생 가능성이 있는 코드 } catch(Exception1 e1){ //Exception1 이를 처리하기 위한 코드 } catch(Exception2 e2) { //Exception2가 발생시 이를처리하기 위한 코드 } 예시로 문자열을 정수형으로 변환하는 과정중에 발생하는 NumberFormatException 예외를 생각했지만 자바 문서 찾아보니 RuntimeException클래스의 자식이라 try~catch문 예시로 안좋을것같다. 그래서 RuntimeExceptio..

자바(Java)

[자바] 자바 인터페이스

인터페이스 정의 인터페이스 자바 인터페이스는 자바 프로그래밍 언어의 초기 버전부터 존재한다.(Java 1.0, 1996년) 인터페이스는 추상화의 한 형태로, 메서드의 선언만 있고 구현 내용이 없는 추상 메서드들로 이루어져있다. 클래스가 이 모든 메서드들을 구체적으로 구현해야한다. 선언 모든 기능을 추상화로 정의한 상태로 선언만 해야한다 접근 제어자로는 public 또는 default를 사용한다 interface MyInterface { void myMethod(); } 내장 인터페이스 이미 자바에서는 다양한 내장 인터페이스가 있다. 아래 그림과 예시를 보면 인터페이스와 클래스간의 관계, 필요성이 더 잘 느껴지지않을까 싶다. 아래는 내장되어있는 Collection의 구조이다. 그마저도 일부분이고 실제로 자..

자바(Java)

[자바] 자바 패키지(package)

package 클래스의 묶음, 클래스를 구분짓는 폴더 개념으로 생각하면 좋을 것 같다 클래스를 패키지로 구분짓는 이유는 이 체계를 유지함으로써 다른 개발자가 개발한 라이브러리의 클래스와 이름 충돌을 피할 수 있다 jdk내부를 살펴서 클래스를 찾을려했지만 아쉽게도 이제는 jdk- jre - lib - rt 구성으로 되어있는데 이때 rt는 Java Runtime Environment이다. rt에서 필요한 패키지를 호출하는 식으로 이루어져있다 (ex. 사용자가 java.util패키지를 호출하면 JVM이 rt.jar 내부에서 해당 피키지를 찾는다) 패키지는 규칙이 있다 패키지 이름과 위치한 폴더의 이름이 같아야 한다 패키지 이름을 java로 시작하면 안된다 모든 클레스에는 정의된 클래스 이름과 패키지 이름 이 ..

Ash_jisu
'자바(Java)' 카테고리의 글 목록