본문 바로가기

Java52

자바(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.
[Spring] Ajax 다양한 방법, @ResponseBody와 @RequestBody 컨트롤러 HTML 삽입 미리보기할 수 없는 소스 jsp, js HTML 삽입 미리보기할 수 없는 소스 다음과 같은 코드가 있다. EX1) 버튼을 클릭하게되면, console창에 'basicAjax1/ajaxData1' 이라는 문자열을 출력해보고자 한다. js에서 jQuery를 이용해 컨트롤러로 한번 거친다음, 컨트롤러에서 단순 문자 'basicAjax1/ajaxData1' 를 갖고 돌아온다. 이 예제가 Ajax 데이터를 뿌리는 가장 기초적인 방법이다. Ex2) 두번째 버튼을 클릭하게 되면, Map 형태로 Console에 데이터들이 나타난다. JS 데이터를 JSON 형태로 만들어 컨트롤러에 넘겨주는데, 이때 data를 JSON.stringify(jsonValue)를 지정해야한다. data: JSON.str.. 2023. 9. 13.
자바(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) - 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) - Exception 다양한 예외 종류 ArrayIndexOutOfBoundsException 초기에 정해진 배열의 크기보다 더 많은 양의 데이터를 넣고자 할 때 주로 발생하는 에러이다. m의 배열은 5까지인데, 마지막 i는 6번째의 배열에 값을 넣는것이므로, 오류가 나는 것이다. 초기에 정해진 배열의 크기보다 더 많은 양의 데이터를 넣을때 발생하는 에러가 ArrayIndexOutOfBounds에러이다. *finally는 에러가 발생하든 안하든 반드시 실행시킨다. ArithmeticException 0으로 나누는 등, 잘못된 산술 연산을 시도할 때 발생하는 에러이다. (0으로 나누는경우 정수 0으로 나누는 경우 등) 왼쪽 사진에 보면 data가 0인데, 0으로 나누려고해서 발생하는 오류이고, 오른쪽 사진 또한 (int)Math.random().. 2023. 7. 18.
자바(JAVA) - 전략 패턴(Strategy Pattern) 전략 패턴 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법. HTML 삽입 미리보기할 수 없는 소스 Character 클래스가 Attack 인터페이스를 통해 공격 전략을 갖고있고, changeWeapon 메서드를 통해 동적으로 공격 방식을 변경할 수 있다. 전략패턴의 핵심은 클라이언트(Character 클래스)와 전략(Attack 인터페이스와 이를 구현한 Gun, Sord 클래스)를 분리하여 클라이언트가 변경 없이도 새로운 전략을 추가하거나 교체할 수 있도록 하는 것이다. 장점 기존 컨텍스트를 변경하지 않고, 새로운 전략을 도입함으로써 "개방-폐쇄 원칙"을 만족한다. 유연성과 확장성이 증가 재사용성 증가 개방-폐쇄 원칙(Ope.. 2023. 7. 13.
자바(JAVA) - 상속(Inheritance) -3 Me 클래스 HTML 삽입 미리보기할 수 없는 소스 Father 클래스 HTML 삽입 미리보기할 수 없는 소스 GrandFather 클래스 HTML 삽입 미리보기할 수 없는 소스 FamilyWork 클래스 HTML 삽입 미리보기할 수 없는 소스 FamilyWork main 메소드가 있는 FamilyWork 클래스에서 Me 객체를 생성해, sleep 메소드를 호출해보았다. Me 하지만 보다시피 Me 클래스에는 sleep 메소드가 없다. 그렇다면 호출이 안되는 것일까? 위 사진을 보면 extends Father이라고 해서 Father의 상속을 받고있는 것을 확인할 수 있다. 그렇다면 Me 클래스는 Father의 클래스 안에 있는 것도 사용할 수 있게 되는 것이다. Father Father에는 sleep() .. 2023. 7. 13.
자바(JAVA) - 메모리 사용 영역(Method, Heap, Stack) 메모리의 사용 영역을 알기전에, 자료형은 크게 기본 자료형과 참조 자료형으로 나뉜다. 기본 자료형 8개(int, long, char ... 등)의 이름은 모두 소문자로 시작하는 반면, 참조 자료형은 모두 대문자(String, System, ...등)은 모두 대문자로 시작한다. 기본 자료형은 스택 메모리에 생성된 공간에 실제 변숫값을 저장하는 반면, 참조 자료형은 실제 데이터 값은 힙 메모리에 저장하고, 스택 메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장한다. 클래스(Class)영역, 메소드(Method)영역, 상수(Final)영역, 정적(Static)영역 - Static 영역이라고도 부르며, 전역 변수와 정적 멤버변수 (static 변수)가 저장되는 영역. 스택 (Stack)영역.. 2023. 7. 11.