본문 바로가기

✨ Java/etc23

자바(JAVA) - 스트림(Stream) 스트림(Stream)은 한 번 사용되거나 닫힌 후에는 재사용할 수 없다. 일회성이기 때문에 닫힌 후에 다시 사용하려고 하면 IllegalStateException이 발생된다. 따라서 스트림에서 요소를 여러 번 사용하려면, 스트림을 다시 생성하거나 요소를 컬렉션에 수집한 후 해당 컬렉션을 사용해야 한다. 스트림을 사용하기 위해서는 컬렉션 또는 배열을 먼저 만들어줘야한다. 컬렉션( List, Set, Collection ) Stream 리스트를 생성해서 Stream에 리스트의 값을 넣고, .forEach( ) 메소드를 통해 하나씩 출력해보았다. 배열 ( Array ) Stream 배열을 생성해서 Stream에 배열의 값을 넣고, .forEach( ) 메소드를 통해 하나씩 출력해보는 코드이다. Stream.f.. 2024. 2. 21.
자바(JAVA) - 기본형(Primitive) VS 참조형(Reference) 변수의 데이터 타입을 가장 크게 기본형, 참조형으로 분류할 수 있다. 기본형 - int, long, double, boolean과 같이 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입 참조형 - People person1, int[ ] a 와 같이 데이터에 접근하기 위한 주소를 저장하는 데이터 타입 기본형 참조형 사용 바로 사용 가능 객체, 배열을 통해 메모리 상에 생성된 객체를 통해 사용 가능 연산 가능 불가능 연산 예시 ) 기본형 참조형 하지만, 참조형에서 멤버 변수에 접근한 경우에는 아래와 같이 연산을 할 수 있다. 정리해보자면, 기본형을 제외한 나머지는 모두 참조형이다. 기본형은 모두 소문자로 int, long, double, boolean이 있고, 그외 대문자로 시작하는 클래스는 모두 참조형.. 2024. 2. 16.
자바(JAVA) - String, StringBuffer, StringBuilder 각 성능차이 String 불변(immutable) 문자열을 조작하는 경우 유용하게 사용가능하다. 한번 생성되면 할당된 메모리 공간이 변하지 않는다. 문자열을 연결, 추가, 수정, 삭제 등을 하면 새로운 String 객체 생성 -> 메모리 낭비 스레드 안전함. 동기화 처리되어 있어 멀티스레드 환경에서도 안전하게 사용가능. (즉 , + 연산자 , concat 메서드를 통해 본래 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아니라, 새로운 String 객체를 만든 후, 새 String 객체에 연결된 문자열을 저장하고, 그 객체를 참조하도록 한다. ) 위 코드는 String 문자열을 이용하여 문자열을 추가해주었다. 이는 문자열이 변경되는 것처럼 보일 수 있으나, 또 다른 String 객체를 생성.. 2023. 7. 24.
자바(JAVA) - 직렬화(Serialization) 직렬화란? 객체 인스턴스의 데이터를 I/O스트림에 적합한 일련의 데이터로 변환하는 과정이다. 객체 인스턴스는 메모리 주소 값을 저장하고 있기 때문에, 메모리 주소 값을 그대로 송신하면 수신받는 쪽에서 아무 쓸모 없는 데이터가 된다. 따라서 객체 인스턴스의 값 형태로 변환이 필요하다. MemberClass HTML 삽입 미리보기할 수 없는 소스 클래스 객체에 직렬화를 가능하게 하려면, Serializable 이라는 인터페이스를 구현해야한다. Main메서드 HTML 삽입 미리보기할 수 없는 소스 I/O Stream을 통해 직렬화 객체를 입출력해보았다. transient : 직렬화 대상 제외 MemberClass 만약, 직렬화하려는 클래스에서 제외하고 싶은 필드가 있다면, transient를 붙여 직렬화 대상.. 2023. 7. 24.
자바(JAVA) - ByteArrayInputStream과 ByteArrayOutputStream ByteArrayInputStream이란? 바이트 배열('byte[ ]')에 저장된 데이터를 읽기 위한 입력 스트림이다. 객체가 생성될 때, 읽어올 데이터를 가리키는 바이트 배열이 전달된다. ByteArrayOutputStream이란? 바이트배열('byte[ ]')에 데이터를 쓰기 위한 출력 스트림이다. 객체가 생성될 때, 쓰여진 데이터를 저장할 바이트 배열이 생성되며 데이터를 기록할 때마다 해당 바이트 배열에 데이터가 쌓인다. HTML 삽입 미리보기할 수 없는 소스 input.read( ) 메서드는 스트림으로부터 바이트 데이터를 읽어와서 정수 형태로 반환한다. 반환된 정수 값은 실제 읽어온 바이트 데이터에 해당하며, 0부터 255 사이의 값을 갖는다. 읽을 데이터가 없을 경우 '-1'을 반환한다. ou.. 2023. 7. 24.
자바(JAVA) - equals와 '==' 차이 프로젝트를 하다보면 비교를 통해 값을 정해줘야하는 순간이 매우 많다. 그럴때 ==을 써보기도하고, equals 메소드를 써보기도한다. 늘 애매했던 부분이라 확실하게 알고쓰지 못해 찝찝했다. == 연산자란? == 연산자는 기본적으로 두 객체의 참조(Reference)를 비교한다. 즉, 두 변수가 동일한 객체를 가리키고 있는지를 확인한다. 만약 두 변수가 동일한 객체를 가리키고 있다면, == 연산은 true를 반환한다. 하지만 두 변수가 서로 다른 객체를 가리키고 있더라도 객체의 내용이 동일하다면, == 연산은 false를 반환한다. equals() 메소드란? equals() 메서드는 객체의 내용(값)을 비교하기 위해 사용된다. equals() 메서드는 기본적으로 Object 클래스에 정의되어 있으며, 자식.. 2023. 7. 20.
자바(JAVA) - 컴파일 타임(Compile Time) VS 런타임(Runtime) 차이 컴파일 타임이란? 작성한 코드를 바탕으로 기계가 읽을 수 있는 형태로 변환되는 과정 컴파일 에러 - 컴퓨터가 명령어를 번역하는 도중 잘못된 코드를 발견해 알려주는 것. ex) 위와 같이 화면상에서 컴퓨터가 빨간 줄로 오류를 띄워준다. 런타임이란? 컴파일 후 프로그램이 동작되어지는 때 런타임 에러 - 현재 코드에서는 알 수 없지만 프로그램을 실행했을 때 오류가 발생. 이를 위해 try ~ catch 문을 활용하여 예외처리 해준다. 2023. 7. 19.
자바(JAVA) - this , this() , super , super() 각각 차이점 this - 현재 객체를 가리키는 참조 변수로, 해당 객체의 인스턴스 멤버(필드, 메서드)에 접근할 때 사용한다. 이렇게 자바에서는 this 참조 변수를 사용해 인스턴스 변수에 접근가능하다. this 참조 변수를 사용할 수 있는 영역은 인스턴스 메소드 뿐이고, 클래스 메소드에서는 사용할 수 없다. *static 영역에서도 사용 불가 모든 인스턴스 메소드에는 this 참조 변수가 숨겨진 지역 변수로 존재하고 있다. this() - 같은 클래스의 다른 생성자를 호출하는데 사용한다. 생성자 내부에서만 사용할 수 있으며, 생성자 내에서 다른 생성자를 호출할 때, this()를 사용해 해당 클래스의 다른 생성자를 명시적으로 호출할 수 있다. 이는 생성자 오버로딩 시 코드의 중복을 피하고 재사용성을 높이는데 도움된.. 2023. 7. 18.
자바(JAVA) - 다형성(Polymorhpism) -1 다형성이란? 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다. 자바에서는 이러한 다형성을 부모클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 구현한다. 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나이다. How 오버라이딩 오버로딩 형변환 오버라이딩(Overriding) - 주로 클래스나 인터페이스를 상속받아 부모 클래스에 있던 함수를 재정의해서 사용하는 것이다. 오버로딩(Overloding) - 같은 함수라도 인수만 다르면 얼마든지 정의하고 사용할 수 있다. 타입변환 - 부모 클래스 변수에 자식객체 타입을 대입하면, 자동으로 타입 변환이 일어나는 것이다. Animal Class HTML 삽입 미리보기할 수 없는 소스 Dog Cl.. 2023. 7. 17.
자바(JAVA) - 문자열(String) 메소드 - charAt(), replace(), substring(), indexOf(), contains(), split() 1. 문자추출 - charAt() 매개값으로 주어진 인덱스의 문자를 리턴한다. 인덱스란 0에서 "문자열의 길이-1" 까지의 번호이다. ex) 2. 문자열 대체 - replace() 기존 문자열은 그대로 두고, 대체한 새로운 문자열을 리턴한다. ex) 3. 문자열 잘라내기 - substring() 문자열에서 특정 위치의 문자열을 잘라내 가져온다. ex) 4. 문자열 찾기 - indexOf() 주어진 문자열이 시작되는 인덱스를 리턴한다. ex) 5. 문자열 포함여부 - contains() 원하는 문자열이 포함되어있으면 true 리턴, 포함되어있지 않다면 false 리턴 ex) 6. 문자열 분리 - split() 분리된 문자열은 배열로 얻을 수 있다. ex) 2023. 7. 13.
자바(JAVA) - 퀵 정렬(Quick Sort) 보호되어 있는 글 입니다. 2023. 7. 12.
자바(JAVA) - 메모리 사용 영역(Method, Heap, Stack) 메모리의 사용 영역을 알기전에, 자료형은 크게 기본 자료형과 참조 자료형으로 나뉜다. 기본 자료형 8개(int, long, char ... 등)의 이름은 모두 소문자로 시작하는 반면, 참조 자료형은 모두 대문자(String, System, ...등)은 모두 대문자로 시작한다. 기본 자료형은 스택 메모리에 생성된 공간에 실제 변숫값을 저장하는 반면, 참조 자료형은 실제 데이터 값은 힙 메모리에 저장하고, 스택 메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장한다. 클래스(Class)영역, 메소드(Method)영역, 상수(Final)영역, 정적(Static)영역 - Static 영역이라고도 부르며, 전역 변수와 정적 멤버변수 (static 변수)가 저장되는 영역. 스택 (Stack)영역.. 2023. 7. 11.