Java 31

java :) Stream[1탄], Stream 왜 배워야 하는가? (Stream을 이용한 코드, 이용하지 않은 코드의 비교)

goal java의 Stream class을 이해한다. Stream 왜 배워야 하는가?? Stream을 사용하지 않은 코드 Stream을 사용한 코드 Stream을 사용하지 않은 코드의 단점 Stream을 사용한 코드의 장점 Stream..너란 녀석 ^^; 난 분명히 java를 배우고 있다. 근데 Stream을 만나고 다른 언어를 배우는 느낌을 강하게 받았다. 이해하기가 힘들어 공부하는 시간이 매우 길어졌고, 지금은 어느정도 이해한 상태이다.(?) 완벽하게 이해하고 있는 것은 아니지만 Stream을 배우며 느낀 것과 사용법을 적어보려고한다. 이번 포스팅은 나에게 의미있는 포스팅이 될 것 같다. 그만큼 힘들었음 Stream, 매력적이면서 신세계를 만난 느낌이다. 처음 Stream을 공부했을 때, 이해가 하..

Java/java 2022.05.23

java :) [java1.8 이상] 메소드 레퍼런스... lambda의 적는 매개변수의 개수를 줄이자.

goal java의 메소드-레퍼런스 (Method Reference)를 이해한다. 잠깐 훑어보고 든 생각 .... "굳이?" 쓰는 이유가 람다(lambda)를 조금 더 쉽게 사용하기 위해 사용하고, 명시되는 매개변수를 줄이기 위해 사용한다는데 .... 굳이라는 생각이 든다. 각설하고 좀 알아보기나 하자; p.s) 내가 더 많은 코드를 작성해보면 유용함을 느낄 때가 올려나 1 ] 메소드 레퍼런스 (Method-Reference) 람다(lambda)표현식을 더 간단하게 표현하는 방법이다. 메소드 래퍼런스로 생성되는 객체는 익명 구현 객체이다. 람다(lambda) 표현식을 사용한 익명 구현 객체생성과 사용방법 import java.util.function.IntConsumer; @FunctionalInterf..

Java/java 2022.05.20

java :) lambda가 무엇이고 어떻게 사용하는가?, lambda를 사용하며 들었던 의문 (개념/사용법/의문)

goal java의 lambda를 이해한다. 1 ] 람다(Lambda)의 개념과 기본 사용법 java의 람다는 함수 지향 언어에 가깝다. 람다식의 형태는 매개변수를 가진 코드 블록이지만, 런타임에 익명 구현 객체를 생성한다. 메소드를 하나의 식으로 표현한 것을 의미한다. 람다식은 익명 함수라고도 한다. [1] 람다 사용의 이점 코드가 매우 간결해짐 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽계 집계 맛보기 전형적인 익명 구현 객체의 생성 Runnable runnable = new Runnable() { public void run() {......} } 람다식으로 익명 구현 객체를 표현 Runnable runnable = () -> {...}; [2] 람다식의 기본 문법 기본 사용방법 // 1..

Java/java 2022.05.19

java :) enum, 열거상수(각각의 객체)를 가지는 이넘(enum) 이놈을 이해하자.. 쉽지 아니하다.

goal 열거형 (enum)을 이해한다. 1. enum enum은 서로 연관된 상수들의 집합을 말한다. [1] enum 정의방법 enum 열거형이름 {상수명1, 상수명2, 상수명3...} enum 열거형이름 {상수명1(특정값1), 상수명2(특정값2), 상수명3(특정값3)..} {상수명1, 상수명2, 상수명3}을 열거상수라고 한다. 중요한 것은, 열거상수의 각각은 객체이다. [2] enum 사용예시 기본사용법 enum Week {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} public class When{ public static void main(String[] args) { System.out.println(Week.Monday) /..

Java/java 2022.05.19

java :) collection 프레임워크, collection의 전체 그림/collection의 주요 메소드/List인터페이스 및 구현체 설명/ Set인터페이스 및 구현체 설명

goal 자바의 collection framework 이해 자바의 collection 인터페이스의 주요 메소드 자바의 List 인터페이스의 개념과 설명 자바의 List 구현체 -> ArrayList 클래스 자바의 List 구현체 -> LinkedList 클래스 자바의 Set 인터페이스의 개념과 설명 자바의 Set 구현체 -> HashSet 클래스 자바의 Set구현체 -> TreeSet 클래스 1 ] 자바의 collection framework 1. 개념 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다. 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사..

Java/java 2022.05.18

java :) Generic 정말 끝내자..? Generic class / Generic method

goal java의 generic에 대해서 이해한다. Generic이란? 제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 파라미터 형태로 지정하면서 데이터 타입을 일반화 한다. 제네릭은 가상의 자료형을 정의함으로써 객체를 정의할 때 타입 매개변수를 선언하여 사용할 수 있다. Generic의 일반적인 표현법 타입인자 설명 Type Element Key Number Value Result Generic의 필요성 제네릭이 등장하기 이전에는 여러 타입을 사용하기 위해서 모든 클래스의 최상위 Object 클래스를 이용해 설계하였다. Object 클래스자체를 이용하는 것이 나쁜것은 아니지만, 기능(함수)를 사용하기 위해서는 수동 타입 변환이 많이 발생하게 되어 코드가 복잡해지고, 개발자의 실수로 잘못된 타입..

Java/java 2022.05.17

java :) collection framework의 순환 Iterator와 ListIterator

goal java의 interface Iterator와 interface ListIterator를 이해한다. 1. java의 interface Iterator java의 Iterator 인터페이스는 collection framework의 요소들을 읽어오는 방법중 하나이다. Iterator 인터페이스는 컬렉션의 요소에 접근할 때 한 방향으로만 이동할 수 있다. public interface Iterator{ boolean hasNext(); E next(); default void remove(){ throw new UnsupportedOperationException("remove"); }; default void forEachRemaining(Consumer

Java/java 2022.05.16

java :) final 키워드, final class/final method/final variable [+ final 변수 초기화 방법의 2가지 (반드시 기억)]

goal java의 final 키워드의 이해 final은 기본적으로 상수 취급 final은 기본적으로 변경을 하지 못하게 한다. final이 쓰인 곳에 따라 조금씩 의미는 달라지는데, 구체적인 내용은 아래와 같다. 위치 의미 공통점 클래스 더 이상 상속할 수 없는 마지막 세대 클래스 변경불가 메소드 오버라이딩 불가 변경불가 변수 값 변경이 불가능한 상수 변경불가 final class FinalClassEx { final int x = 1; // 상수 final int getNum() { final int localVar = x; return x; } } ※ final 클래스 부분에서 약간의 헷갈림이 있었는데, 다른 자식에서 final 클래스를 사용할 수 없다고 이해하자. 단, final 클래스는 다른 클..

Java/java 2022.05.13

java :) abstract, abstract class(추상클래스)/abstract method(추상메소드) [수정 1]

goal abstract class와 method에 대해서 이해한다. [수정전 내용 : 2022.03.13 작성] 1] abstract method child class에서 반드시 Overriding해야만 사용할 수 있는 메소드를 의미한다. abstract class에 선언된 abstract method를 반드시 선언하게하는 강제성 부여 추상 메소드는 선언부만 존재하며 구현부는 작성되지 않는다. (동작을 정의하지 않는다.) abstract 반환타입 메소드이름(); 1. 사용이점 모듈처럼 중복되는 부분, 공통적인 부분은 미리 다 만들어진 것을 사용하고 이를 받아 사용하는 쪽(child class)은 자신에게 필요한 부분만을 재정의하여 사용함으로써 생상선 향상, 배포 등이 쉬워진다는 이점을 갖는다. 2. a..

Java/java 2022.05.13

java 이론(?) :) 접근제어자, pulbic > protected > default > private

goal 접근제어자에 대해서 이해한다 1. 제어자의 종류 접근 제어자 public, protected, (default), private 기타 제어자 static, final, abstract, native, trasnsient, synchronized 등 [1] 접근 제어자 (Access Modifier) 접근 제어자 접근 제한 범위 private 동일 클래스에서만 접근 가능 default 동일 패키지 내에서만 접근 가능 protected 동일 패키지 + 다른 패키지의 하위 클래스에서 접근 가능 public 접근 제한 없음 1. 접근 제한의 구분 public(접근 제한 없음) > protected(동일 패키지 + 하위클래스) > default(동일 패키지) > private(동일 클래스) 접근 제어자 ..

Java/java 이론 2022.05.12

java 이론 + Object 대표 메소드 :) 간단한 정리, 메소드 오버라이딩 3가지 조건/Object class의 대표 메소드/캡슐화/package/import

goal 메소드 오버라이딩의 3가지 조건/Object class의 대표 메소드 1 ] 메소드 오버라이딩의 3가지 조건 메소드의 선언부 (메소드 이름, 매개변수, 반환타입)이 상위 클래스의 그것과 완전한 일치 접근 제어자의 범위가 상위 클래스의 메소드보다 같거나 넓어야한다. 예외는 상위 클래스의 메소드보다 많이 선언할 수 없다. 2 ] Object class의 대표 메소드 메소드명 반환타입 주요내용 toString() String 객체 정보를 문자열로 출력 equals(Object obj) boolean 등가 비교 연산(==)과 동일하게 스택 메모리값을 비교 hashCode() int 객체의 위치정보 관련. Hashtable 또는 HashMap에서 동일 객체여부 판단 wait() void 현재 쓰레드 일시..

Java/java 이론 2022.05.12

java :) 자바의 메모리 구조 (static, stack, heap)

goal 자바의 메모리 구조(JVM구조)를 이해한다. * 자바의 메모리구조 (static / stack / heap) 개념 설명 static 클래스들의 놀이터 - 클래스 멤버 변수가 할당되며 JVM이 종료될 때 까지 존재한다. stack 메서드들의 놀이터 - 메소드들의 각각은쓰레드라 볼 수 있다. - 메소드로 넘겨 받은 매개변수, 메소드 안의 지역변수가 할당 heap 객체들의 놀이터 - 객체 멤버 변수가 할당된다. (참조변수) - 객체는 사용되지 않을 경우 가비지 컬렉터에 의해 소멸 - 객체 소멸시에, Heap에 저장된 객체 멤버 변수도 같이 소멸된다. [1] static static - "정적" 컴파일 시간동안 할당 된 메모리이며, 고정된 공간을 차지한다. 런타임 중에 변경할 수 없는 특징을 가진다. ..

Java/java 2022.05.10

java :) java에서 정규표현식 사용하기, Pattern 클래스

goal java.util.regex의 Pattern 클래스의 static method인 matches를 알아본다. 참고자료 java 1.8 documentation, https://docs.oracle.com/javase/8/docs/api/index.html 기타 사용법 : Pattern 어렵지 않게 사용하기, https://gngsn.tistory.com/53, pageseo 금일 페어프로그래밍을 하며 알게된 클래스 페어프로그래밍의 페어님께서 java도 정규 표현식을 나타낼 수 있다는 것을 알려주셨고, 우연히 Patten클래스를 알게 되어 작성한다. 언젠가는 써먹을 일이 있을거라 생각한다. 하 api 문서를 보고 작성해보려고 시도했으나 영어가 너무 부족하여 패스 공부해야겠다. * Pattern 클래..

Java/java 2022.05.10

java :) 문자열의 문자 변경, replace() & replaceAll() 메소드 설명 ( + 정규표현식 [외부자료])

goal 문자열 치환을 돕는 replace()와 replaceAll()을 이해하고 사용법을 숙지한다. 문자열 치환을 어떻게 해야할까? 그냥 source에서 바꿔주지 뭐... 사실 틀렸다고 보긴 힘들다. 하지만, 필요에 의해서 많은 문자를 바꿔줘야할 때, 모든 문자열을 바꿔주기에는 큰 어려움이 있을 것이다. 아래에서 설명하겠지만 맛보기 아닌 맛보기를 보고 들어가보자. 아래 코드는 오늘 학습한 내용과 함께 더불어 작성해본 것이다. StringReplace.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class StringReplace { public static vo..

Java/java 2022.05.09

java :) System.arraycopy(), 매개변수가 5개가 들어가?(원본배열, 원본의복사시작점, 복사받을 배열, 복사받을 시작점, 복사받을 끝점)

goal System.arraycopy를 이해하고 사용법을 안다. * System.arraycopy() 사용방법 참고자료 : [Java] System.arraycopy 사용법, https://eunplay.tistory.com/118, 어제, 오늘 그리고 내일 SystemArraycopy.java import java.util.Arrays; public class SystemArraycopy { public static void main(String[] args) { int[] arr = new int[] {10,20,30,40,50}; int[] sys = new int[arr.length]; System.arraycopy(arr, 0, sys, 0, arr.length); System.out.prin..

Java/java 2022.05.09

java :) 얕은복사와 깊은복사, Arrays.copyOf()와 Arrays.copeOfRange() 사용방법

goal 배열의 복사와 다양한 배열의 복사 방법에 대해서 이해한다. 요약 개념 설명 얕은 복사 (Shallow copy) 얕은 복사가 된 경우, 원본배열 또는 복사된 배열의 값이 변경된다면 영향을 준다. - 영향이란, 같은 메모리를 가리키고 있다는 말이다. - 같은 메모리를 공유한다는 의미 깊은 복사 (Deep copy) 깊은 복사가 된 경우, 원본배열 또는 복사된 배열의 값이 변경이 있더라도 영향이 x - 각각 독립적인 메모리를 가진다. 얕은 복사와 깊은 복사를 알아야 하는 이유 기본타입(primitive type)의 변수 경우, 얕은 복사로도 사용이 가능하지만 참조타입(reference type)의 변수인 경우 깊은 복사를 사용해야 객체의 실제 데이터를 복사할 수 있다. 내용 설명 import jav..

Java/java 2022.05.09

java :) Arrays.toString으로 배열 간편하게 출력하기 ( + 출력할 때 괄호 없애는 방법)

goal Arrays.toString()을 이용한 배열의 값 출력방법을 이해한다. * 배열 출력하기 : Arrays.toString(arr) import java.util.Arrays; public class Note { public static void main(String[] args) { int[] arr = new int[]{20,51,23,56,78}; String arr_toString = Arrays.toString(arr); String repl = arr_toString.replaceAll("\\[","").replaceAll("\\]",""); System.out.println("Arrays.toString을 활용한 배열 출력 : " + arr_toString); System.out.p..

Java/java 2022.05.09

java :) StringBuilder, StringBuffer의 개념과 사용의 이해

goal StringBuilder와 StringBuffer의 이해 1 ] StringBuilder 기본적으로 String클래스의 연산은 연산이 진행될 때 마다 새로운 인스턴스를 생성한다. 이는 시스템의 악영향을 끼칠 수 있고 대안으로 나온것이 StringBuilder이다. StringBuilder는 String과 달리 기존의 데이터에 값을 더하는 방식을 사용한다. String클래스 연산보다 빠르다 메모리가 차지하는 부하가 적어진다. StringBuilder builder = new StringBuilder(); builder.append("자바는 ").append("조금 빡쳐"); String str = builder.toString(); System.out.println(str); StringBuild..

Java/java 2022.05.04

java 이론 :) OOP가 무엇이며 왜 쓰는가?

goal 객체지향의 개념을 이해한다. 절차 지향과 객체지향 "절차 지향과 객체 지향" 용어 설 명 절차 지향 "무엇을 어떤 절차로 할 것인가?" - 기능중심으로 바라보는 개발 - 순서 처리 초점 객체 지향 "누가 어떤 일을 할 것인가?" - 객체가 중심이 되는 개발 - 역할에 따른 개발 1 ] OOP (객체지향 프로그래밍) 1. 개념 - 생략 2. 특징 특 징 설 명 추상화 객체들의 특징(기능, 속성)을 도출 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다. 캡슐화 구현부를 외부에 숨겨 정보를 은닉하는 것 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리 코드가 묶여있어서 오류가 없어 편하다 상속성 부모 클래스가 가진 특징을 자식 클래스가 그대로 물려받는 것 상..

Java/java 이론 2022.04.24

java :) Arrays의 다양한 메소드 정리하기

goal Arrarys의 다양한 메소드를 이해한다. "Arrays사용법" import java.util.Arrays 1 ] Arrays의 다양한 메소드 1. binarySearch() 메소드 [1] 개념 특정 객체의 위치를 이진 검색 알고리즘을 사용하여 검색한 후, 해당 위치를 반환한다. ※ 이진 검색 알고리즘 원리 : 배열의 임의 중앙값과 찾고자 하는 값의 대소를 비교하는 방식 특징 : 오름차순으로 정렬된 리스트에서 특정한 값이 위치를 찾는 알고리즘 시간 복잡도의 이점을 얻을 수 있다. 순환 탐색의 경우 O(n) 이진 탐색의 경우 O(log n) 단, 배열이 정렬(sort())이 된 상태일 때 사용해야한다. 정렬이 되지 않은 상태에서 사용하게 된다면 엉뚱한 값을 얻을 수 있다. [2] 예제 소스코드 및..

Java/java 2022.04.23