본문 바로가기

✨ Java57

자바(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) - 컬렉션프레임워크 HashMap과 HashSet 차이 https://bright-landscape.tistory.com/43 자바(JAVA) - 컬렉션프레임워크 Map Map의 가장 중요한 점은 Set과 List와 달리 안에 두가지 자료형을 받는다는 것이다. Map( K , V ) 와 같은 방법으로 쓴다. K= 키, V = 값을 저장한다. HTML 삽입 미리보기할 수 없는 소스 K의 값이 중복되 bright-landscape.tistory.com https://bright-landscape.tistory.com/42 자바(JAVA) - 컬렉션프레임워크 Set List : 데이터의 순번이 존재하고, 중복이 가능하다. Set : 데이터의 순번이 없고, 중복이 불가하다. Set은 List와 다르게 중복이 불가능하여 잘 사용하지 않는다. 하지만 유용한 기능.. 2023. 12. 24.
자바(JAVA) - 전략 패턴(Strategy Pattern) - 2 자바(JAVA) - 전략 패턴(Strategy Pattern) 전략 패턴 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법. HTML 삽입 미리보기할 수 없는 소스 Character 클래 bright-landscape.tistory.com 전략 패턴은 정말 많이 쓰이면서도 기초적인 디자인 패턴 중 하나이다. 그래서 또하나 예를 들어 만들어보았다. 이전 게시글에서는 한 파일로 된 코드만 짰기 때문에 다시 한번 보았을 때 이해가 가지 않을 수 있기 때문에, 하나하나 순서를 통해 구현해보았다. 전략 패턴이란? 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요.. 2023. 8. 20.
자바(JAVA) - 팩토리 패턴(Factory) 팩토리 패턴이란? 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 내리는 패턴. 즉, 여러 개의 서브클래스를 가진 슈퍼 클래스가 있을 때 인풋에 따라 하나의 자식 클래스의 인스턴스를 리턴해주는 방식 1. 인터페이스 정의하기 2. 여러 클래스 구현하기 3. 쥬스 공장 클래스 생성하기 4. 메인 클래스에서 쥬스공장 생성후 찍어보기 결과창 장점 유연성과 확장성 - 새 제품을 추가, 변경시 기존 코드 수정하지 않아도됨. 클라이언트 코드 분리 중복코드 제거 - 객체 생성 코드가 여러 곳에서 중복되지 않도록 한다면, 객체 생성에 불필요한 중복코드 제거 단점 복잡성 증가 - 이 패턴은 추가적인 클래스를 도입하므로, 코드의 복잡성이 증가할 수 있다. 추상화 비용 많은 클래스 2023. 8. 20.
자바(JAVA) - 템플릿 메소드 패턴(Template Method Pattern) 템플릿 메소드 패턴이란? 객체지향 프로그래밍에서 사용되는 설계 기법 중 하나로, 상위 수준의 알고리즘을 정의하고 하위 클래스에서 알고리즘의 일부 단계를 구체화할 수 있도록 하는 것이 목적. 템플릿 메소드 패턴은 추상 클래스를 사용한다. 부모 클래스에게 추상화를 시켜 이를 상속받은 자식 클래스에서 구체화하면서 완성할 수 있다. 즉, 변하지 않는 기능(템플릿)은 상위 클래스에 만들고, 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록 하여, 상위의 메소드 실행 동작 순서는 고정하며 세부 실행 내용은 다양화 될 수 있는 경우에 사용. 코드의 중복을 없애기 위함. Animal.class ( 부모 클래스를 추상 클래스로 만들어준다.) 부모 클래스역할을 하는 Animal 클래스에 하나 이상의 추상 메소드를 만들.. 2023. 7. 26.
자바(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) - Iterator 개념과 사용방법 이터레이터(Interator)란? 컬렉션 프레임워크에서 List, Set, Map을 순서대로 반복해서 조회할 수 있도록 해주는 객체이다. 위와 같이 프레임워크 ArrayList에 3개의 문자열을 넣고, foreach를 통해 출력해보았다. Iterator.hasNext() - Iterator 안에 다음 값이 들어있는지 확인한다. 들어있으면 true, 안들어있으면 false를 반환한다. Iterator.next() - Iterator의 다음 값 가져온다. Iterator.remove() - Iterator에서 next() 할 때 가져온 값을 컬렉션에서 삭제한다. *반드시 next() 이후에 사용해야한다. 2023. 7. 19.
자바(JAVA) - 컴파일 타임(Compile Time) VS 런타임(Runtime) 차이 컴파일 타임이란? 작성한 코드를 바탕으로 기계가 읽을 수 있는 형태로 변환되는 과정 컴파일 에러 - 컴퓨터가 명령어를 번역하는 도중 잘못된 코드를 발견해 알려주는 것. ex) 위와 같이 화면상에서 컴퓨터가 빨간 줄로 오류를 띄워준다. 런타임이란? 컴파일 후 프로그램이 동작되어지는 때 런타임 에러 - 현재 코드에서는 알 수 없지만 프로그램을 실행했을 때 오류가 발생. 이를 위해 try ~ catch 문을 활용하여 예외처리 해준다. 2023. 7. 19.