Java

Java

[Java] JAVA_HOME 자바 환경변수 설정

Java 프로젝트를 컴파일하려면 jdk가 필요하다.컴퓨터가 java를 컴파일 하기 위한 javac를 찾을 수 있도록 환경변수를 설정해서 jdk의 위치를 지정해줘야 한다.컴퓨터한테 jdk 위치를 알려주는 과정..간단하지만 알아두면 앞으로 자주 쓸 것 같아서 기록해 둔다.이 글은 2024년 10월 14일, Windows 11 버전을 사용하는 환경에서 작성했다.0. jdk 설치우선 jdk를 설치해야 한다.여기선 C:\dev_files\jdk\openjdk-1.8에 위치한다는 것을 가정하고 설명한다.1. 시스템 환경변수 검색해서 "시스템 환경변수 편집"으로 들어가도 되고,제어판 - 시스템 - 고급 시스템 설정(시스템 속성) - 환경변수로 들어가도 된다.2-1. 시스템 변수 설정중요한 것은 jdk 위치이다.그런데..

Java

[Java] 소켓 프로그래밍(Socket Programming) 예제 / ServerSocket, Socket, Thread 프로그래밍

들어가기 전에, 소켓에 대한 글을 보고 오시는 걸 추천합니다.[컴퓨터 공학/Web & Network] - [Network] 포트(PORT), 소켓(Socket)이란? (웹소켓 아님 Web Socket != Socket) [Network] 포트(PORT), 소켓(Socket)이란? (웹소켓 아님 Web Socket != Socket)포트(Port)Port는 운영체제 통신에서의 네트워크 연결이 시작되고 끝나는 논리적인 접속 지점을 말한다. 보통 http://192.168.1.1:8080과 같이 프로토콜/호스트/포트로 구분되어 도메인이 정의된다. 여innovation123.tistory.com Java 소켓 Java에서 Socket을 직접 열고, 소켓 통신을 하는 방법을 알아보자. ServerSocket과 C..

Java

[Java] 문자열 붙이기 - StringJoiner와 String.join() 알아보기

여러 문자열을 이어 붙일 때 보통 StringBuilder를 사용했었습니다. 그런데 특정 상황에서 더 유용한 클래스가 있어서 소개하려 합니다. StringBuilder를 썼을 때 아쉬운 점 아래와 같이 반복문으로 문자열을 이어 붙일 때 마지막에 구분자가 append 되는 것을 처리해야 하는 문제가 있다. String[] arr = {"one", "two", "three"}; StringBuilder sb = new StringBuilder(); for(int i = 0; i < arr.length; i++){ if(i == arr.length - 1){ sb.append(arr[i]); break; } sb.append(arr[i]).append(","); } System.out.println(sb); ..

Java

[Java] 깊은 복사(Deep Copy) vs 얕은 복사(Shallow Copy)

깊은 복사 vs 얕은 복사 Java에서 객체를 복사할 때, 깊은 복사와 얕은 복사라는 개념이 있다. 간단하게 정리하자면 깊은 복사 : 실제 값을 새로운 메모리 공간에 복사하는 것이고, 얕은 복사 : 주소 값을 복사하는 것이다. 간단 예제 아래 예제를 통해 일단 간단히 알아보자. int[] original = new int[]{1,2,3}; int[] shallowCopy = original; //얕은 복사 int[] deepCopy = original.clone(); //깊은 복사 //주소 값 확인 System.out.println("주소-original = " + System.identityHashCode(original)); //주소-original = 191382150 System.out.print..

Java

[Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유

Java의 모든 객체는 Object 클래스를 상속받고 있다. Object 클래스는 객체의 동일성을 비교하기 위한 equals와 hashCode 메서드가 정의되어 있다. 따라서 Java의 모든 객체는 필요에 따라 equals와 hashCode를 재정의할 수 있다. equals() equals()는 두 객체의 값이 같은지 여부를 비교할 때 사용하는 메서드이다. 객체를 비교할 때 기본적으로 객체의 주소를 비교한다. public static void main(String[] args) { Car car1 = new Car(1111, "blue"); Car car2 = new Car(1111, "blue"); System.out.println(car1 == car2); //두 객체는 주소가 다르기 때문에 fals..

Java

[Java / CS] JVM과 Java의 메모리 구조

(운영체제) 프로세스 메모리 구조 일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠진다. 스택(stack), 힙(heap), 데이터(data), 코드(text) 영역 stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역이고, data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역이다. Stack : 임시 데이터 (함수 실행을 위한 지역 변수 등)가 저장된다. Heap : 코드에서 동적으로 만들어지는 데이터가 저장된다.(동적으로 할당된 데이터) data : 전역 변수, 초기화된 데이터 등 code : 프로그램 코드 JVM(Java Virtual Machine) Java의 특징 객체지향 프로그래밍 언어 기본 자료형(Primitive type : 원시 자료형)..

Java

[JAVA] 문자열 다루기 String, StringBuilder, StringBuffer

StringBuilder, StringBuffer 클래스 내부적으로 가변적인 char[ ]를 멤버변수로 가짐 문자열을 여러번텍스트 연결하거나 변경할때 사용함 새로운 인스턴스를 생성하지 않고 char[ ]을 변경함 StringBuilder : 단일 쓰레드에서 사용 StringBuffer : 멀티 쓰레드에서 사용 - 동기화 append()을 이용하여 StringBuilder에 문자열 추가 String, StringBuilder로 문자열을 붙이는 예제이다. StringBuilder sb = new StringBuilder(); String str1 = "Hello"; String str2 = "World!!"; //StringBuilder 이용 sb.append(str1).append(" ").append(s..

Java

[Java] Scanner, BufferedReader, BufferedWriter

Scanner와 BufferdReader의 차이 BufferedReader, BufferedWriter은 버퍼를 사용하여 읽기, 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은 키보드의 키를 누르는 즉시 프로그램에 전달된다. 버퍼를 사용하는 입력은 키보드의 입력 이 있을 때마다 한 문자씩 버퍼로 전송한다. 이 버퍼가 가득차거나 줄 바꿈을 하면 버퍼의 내용을 한 번에 프로그램에 전달한다. Scanner은 1KB의 버퍼를 갖고, BufferedReader는 8KB의 버퍼를 가진다. 즉, Scanner은 더 자주 프로그램에 전달하고, BufferedReader은 조금 더 모아놨다가 프로그램에 전달한다. ( 쓰레기가 생길때마다 나가서 버리는 거랑, 쓰레기통에 모아놨다가 한 번에 버리는 차이 ) 버퍼는 키보드..