전체 글
내 꿈은 배짱이
-
I/O ?데이터의 입력(Input) 및 출력(Output)을 의미한다.내가 키보드로 무언가를 입력하면 입력 스트림으로 프로그램에 입력이 되고, 프로그램에서 출력스트림을 통해 콘솔로 출력한다.이때 키보드와 콘솔은 노드, 이러한 과정을 노드스트림이라고 지칭한다.스트림은 단방향으로만 통신이 가능하다.(하나의 스트림으로 입/출력을 같이 할 수 없음) Node Stream의 종류 Input Stream(Byte)의 메서드- read(): byte 하나를 읽어서 int로 반환한다. 더 읽을 값이 없으면 -1을 리턴한다.- read(byte b[]): b만큼 읽어서 읽은 바이트 개수를 리턴, 더 읽을 값이 없으면 0을 리턴한다.- read(byte b[], int offset, int len): len만큼 데이..
14. File I/OI/O ?데이터의 입력(Input) 및 출력(Output)을 의미한다.내가 키보드로 무언가를 입력하면 입력 스트림으로 프로그램에 입력이 되고, 프로그램에서 출력스트림을 통해 콘솔로 출력한다.이때 키보드와 콘솔은 노드, 이러한 과정을 노드스트림이라고 지칭한다.스트림은 단방향으로만 통신이 가능하다.(하나의 스트림으로 입/출력을 같이 할 수 없음) Node Stream의 종류 Input Stream(Byte)의 메서드- read(): byte 하나를 읽어서 int로 반환한다. 더 읽을 값이 없으면 -1을 리턴한다.- read(byte b[]): b만큼 읽어서 읽은 바이트 개수를 리턴, 더 읽을 값이 없으면 0을 리턴한다.- read(byte b[], int offset, int len): len만큼 데이..
2024.07.28 -
Exception과 Error의 차이오류(Error): 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미예외(Exception): 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생* 예외의 경우 별도의 처리 코드를 작성하여 방지할 수 있다. Try ~ Catchpublic static void main(String[] args) { FileInputStream is = null; try { // 예외가 될만한 코드를 try영역에 지정한다. is = new FileInputStream("number.txt"); int num = 0; System.out.println("code 1, ..
13. ExceptionException과 Error의 차이오류(Error): 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미예외(Exception): 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생* 예외의 경우 별도의 처리 코드를 작성하여 방지할 수 있다. Try ~ Catchpublic static void main(String[] args) { FileInputStream is = null; try { // 예외가 될만한 코드를 try영역에 지정한다. is = new FileInputStream("number.txt"); int num = 0; System.out.println("code 1, ..
2024.07.28 -
Stream API???람다를 활용해서 배열이나 Collection 자료구조들을 딸깍(?)할 수 있게 만들어주는 API다.데이터의 CRUD가 필요할 때, for문을 이용하거나, Iterator를 사용하는 방식이 있었지만 코드가 길어지고,타입마다 다르게 다뤄야 하는 불편함을 해결하기 위해 나왔다. 데이터를 다루는데 자주 사용되는 메서드를 미리 정의해 놓았기 때문에 사용자는 메서드만 주렁주렁 달면쉽게 다룰 수 있는 그런 API가 되시겠다. Stream의 특징- 생성 - 중간 처리 - 최종 처리 순서로 이어진다.- 원본 데이터를 건드리지 않는다. 각 단계가 끝날 때마다 만들어진 처리를 다음 메서드에 넘기는 방식이다.- 최종 처리가 끝나면 다시 중간처리로 갈 수 없고, 재사용이 불가능하다.- 중간 처리는 최..
12. Stream APIStream API???람다를 활용해서 배열이나 Collection 자료구조들을 딸깍(?)할 수 있게 만들어주는 API다.데이터의 CRUD가 필요할 때, for문을 이용하거나, Iterator를 사용하는 방식이 있었지만 코드가 길어지고,타입마다 다르게 다뤄야 하는 불편함을 해결하기 위해 나왔다. 데이터를 다루는데 자주 사용되는 메서드를 미리 정의해 놓았기 때문에 사용자는 메서드만 주렁주렁 달면쉽게 다룰 수 있는 그런 API가 되시겠다. Stream의 특징- 생성 - 중간 처리 - 최종 처리 순서로 이어진다.- 원본 데이터를 건드리지 않는다. 각 단계가 끝날 때마다 만들어진 처리를 다음 메서드에 넘기는 방식이다.- 최종 처리가 끝나면 다시 중간처리로 갈 수 없고, 재사용이 불가능하다.- 중간 처리는 최..
2024.07.25 -
Lambda(람다)가 뭐예요람다는 정의하자면 함수형 프로그래밍의 형태로 재사용 가능한 코드 블록이다.이전에 정의했던 익명 함수를 지칭하는 용어이기도 하면서 대충 클래스를 선언해서 메서드를 만들고... 이게 너무 비효율적이라고 여겨서 나오게 된 거 + 코드를 간결하게 하기 위함의 이유로 나온 함수이다. 람다 왜 쓰냐코드가 간결해진다. public class LambdaTest { public static void main(String[] args) { MyInterface m1 = new MyInterface() { //1.익명을 이용한 MyInterface 구현부 @Override public int max(int a, int b){ ..
11. LambdaLambda(람다)가 뭐예요람다는 정의하자면 함수형 프로그래밍의 형태로 재사용 가능한 코드 블록이다.이전에 정의했던 익명 함수를 지칭하는 용어이기도 하면서 대충 클래스를 선언해서 메서드를 만들고... 이게 너무 비효율적이라고 여겨서 나오게 된 거 + 코드를 간결하게 하기 위함의 이유로 나온 함수이다. 람다 왜 쓰냐코드가 간결해진다. public class LambdaTest { public static void main(String[] args) { MyInterface m1 = new MyInterface() { //1.익명을 이용한 MyInterface 구현부 @Override public int max(int a, int b){ ..
2024.07.24 -
서론객체 간의 sort를 수행하던 중 Comparable이라고 하는 것과 Comparator라고 하는 것이 존재해 둘 중 어떤 걸 어느 상황에 써야 하나..라는 생각으로 작성했다. 공통점- 모두 인터페이스다.- 원하는 객체에 추가하고, 각각 요구로 하는 메서드(비교 메서드)를 구현해주면 된다. Comparable- compareTo(T o) return: int- 자기 자신과 매개변수 객체를 비교한다.- 자기 자신을 기준으로 내가 더 크면 양수, 상대가 더 크면 음수를 반환하여 사용한다.- 문자열의 경우 좀 다른데, 기준값에 비교대상이 포함되어 있다면, 서로의 문자열 길이의 차이값을 리턴한다.- 뭔소리냐하면 예시를 보자String str = "abcd";System.out.println(str.com..
10. Comparable? Comparator?서론객체 간의 sort를 수행하던 중 Comparable이라고 하는 것과 Comparator라고 하는 것이 존재해 둘 중 어떤 걸 어느 상황에 써야 하나..라는 생각으로 작성했다. 공통점- 모두 인터페이스다.- 원하는 객체에 추가하고, 각각 요구로 하는 메서드(비교 메서드)를 구현해주면 된다. Comparable- compareTo(T o) return: int- 자기 자신과 매개변수 객체를 비교한다.- 자기 자신을 기준으로 내가 더 크면 양수, 상대가 더 크면 음수를 반환하여 사용한다.- 문자열의 경우 좀 다른데, 기준값에 비교대상이 포함되어 있다면, 서로의 문자열 길이의 차이값을 리턴한다.- 뭔소리냐하면 예시를 보자String str = "abcd";System.out.println(str.com..
2024.07.23 -
서론어디선가 자바로 만든 코드를 본 적이 있다면 ArrayList 같은 형식의 문장을 본 적이 있을 것이다.저 안에 내가 원하는 타입을 넣으면 그 타입에 맞는 객체가 생성이 되는데 이러한 방식이 Generic이다. Generic Generic은 데이터 형식에 의존하지 않고, 하나의 값이 여러 개의 다른 데이터 타입을 가지도록 해주는 방법이다.이걸 조금 더 있어 보이게 표현하자면 컴파일 때 타입을 체크하게 해주는 방법이다.Generic은 객체의 타입에 대한 안전성을 높이고, 형 변환의 번거로움을 줄이기 위해 사용된다.가 표면적인 이유이지만, 한 가지 예시를 들어 생각해 보면 왜 쓰는지 바로 이해할 수 있다.서론에서 언급한 ArrayList의 타입이 만약 지정되어 있다면, 개발자는 수많은 타입의 Array..
9. Generic서론어디선가 자바로 만든 코드를 본 적이 있다면 ArrayList 같은 형식의 문장을 본 적이 있을 것이다.저 안에 내가 원하는 타입을 넣으면 그 타입에 맞는 객체가 생성이 되는데 이러한 방식이 Generic이다. Generic Generic은 데이터 형식에 의존하지 않고, 하나의 값이 여러 개의 다른 데이터 타입을 가지도록 해주는 방법이다.이걸 조금 더 있어 보이게 표현하자면 컴파일 때 타입을 체크하게 해주는 방법이다.Generic은 객체의 타입에 대한 안전성을 높이고, 형 변환의 번거로움을 줄이기 위해 사용된다.가 표면적인 이유이지만, 한 가지 예시를 들어 생각해 보면 왜 쓰는지 바로 이해할 수 있다.서론에서 언급한 ArrayList의 타입이 만약 지정되어 있다면, 개발자는 수많은 타입의 Array..
2024.07.22 -
서론이전 글에서 가볍게 정의한 추상에 대해 작성했다. 추상 클래스추상 클래스는 부모가 상속은 하는데 막상 자식 클래스에서 재정의를 계속하다 보니 '이럴 거면 부모 클래스 쪽에 굳이 메서드를 작성할 필요가 있나..?' 해서 나오게 된 클래스이다. 키워드로는 abstract라는 키워드를 이용해 선언만 하고 구현부는 ;로 대체한다.-> 상속 전용 메서드라는 뜻으로 자식은 해당 메서드를 무조건 재정의해야 한다. 특징으로는 구현부가 없는 메서드가 있는 만큼 객체를 생성할 수 없다(참조는 가능하다) 만약 상속 받은 abstract 메서드를 재정의를 안 했다면 자식 클래스도 abstract 클래스가 된다. 추상클래스의 목적은 구현을 강제하여 프로그램의 안정성이 향상되게끔 하는 것이다. abstract class ..
8. 추상서론이전 글에서 가볍게 정의한 추상에 대해 작성했다. 추상 클래스추상 클래스는 부모가 상속은 하는데 막상 자식 클래스에서 재정의를 계속하다 보니 '이럴 거면 부모 클래스 쪽에 굳이 메서드를 작성할 필요가 있나..?' 해서 나오게 된 클래스이다. 키워드로는 abstract라는 키워드를 이용해 선언만 하고 구현부는 ;로 대체한다.-> 상속 전용 메서드라는 뜻으로 자식은 해당 메서드를 무조건 재정의해야 한다. 특징으로는 구현부가 없는 메서드가 있는 만큼 객체를 생성할 수 없다(참조는 가능하다) 만약 상속 받은 abstract 메서드를 재정의를 안 했다면 자식 클래스도 abstract 클래스가 된다. 추상클래스의 목적은 구현을 강제하여 프로그램의 안정성이 향상되게끔 하는 것이다. abstract class ..
2024.07.20 -
Encapsulation- 외부에서 데이터의 접근을 막기 위한 기법이다.- 멤버 변수들을 private을 선언해 외부에서의 접근을 차단- 접근 경로는 getter, setter로만 유도하는 방식을 사용한다. Singleton- 객체를 처음 한번 선언해 두고,재사용함- 여러 개의 객체가 필요 없거나, 객체의 비용이 커 삽입/삭제에 불편함이 생기는 경우class SingletonClass { private static SingletonClass Instance; //private한 Instance 객체를 static으로 생성 private SingletonClass() { //생성자 사용을 제한 Instance = new SingletonClass(); // 클래스 로딩중 생성 }public s..
7. 다형성Encapsulation- 외부에서 데이터의 접근을 막기 위한 기법이다.- 멤버 변수들을 private을 선언해 외부에서의 접근을 차단- 접근 경로는 getter, setter로만 유도하는 방식을 사용한다. Singleton- 객체를 처음 한번 선언해 두고,재사용함- 여러 개의 객체가 필요 없거나, 객체의 비용이 커 삽입/삭제에 불편함이 생기는 경우class SingletonClass { private static SingletonClass Instance; //private한 Instance 객체를 static으로 생성 private SingletonClass() { //생성자 사용을 제한 Instance = new SingletonClass(); // 클래스 로딩중 생성 }public s..
2024.07.18 -
서론이 글의 제목을 어떻게 정해야 할지 잘 모르겠다. 보통 우리가 생각하는 문법적인 코드 외에 작성할 부분들에 대해 얘기해보려고 한다. Annotation(주석)- 컴파일러, JVM, 프레임 워크들이 참고하는 주석이다.- 소스코드에 메타 데이터를 삽입하는 형태로 코드에 대한 정보를 추가한다.- 용도에 맞지 않은 Annotation을 넣는다면 컴파일 중 에러가 날 수도 있다.- @Deprecated: 해당 메서드(변수)가 하위 버전의 호환성 문제로 삭제하기 곤란할 때 사용한다.- @Override: 해당 메서드가 상위 클래스의 메서드를 재정의 했다는 것을 알리기 위한 주석이다.- @SuppressWarnings: 컴파일 경고 메시지를 출력하지 않게 해주는 주석이다. Package + Impor..
6. 코드 외 작성할 것들서론이 글의 제목을 어떻게 정해야 할지 잘 모르겠다. 보통 우리가 생각하는 문법적인 코드 외에 작성할 부분들에 대해 얘기해보려고 한다. Annotation(주석)- 컴파일러, JVM, 프레임 워크들이 참고하는 주석이다.- 소스코드에 메타 데이터를 삽입하는 형태로 코드에 대한 정보를 추가한다.- 용도에 맞지 않은 Annotation을 넣는다면 컴파일 중 에러가 날 수도 있다.- @Deprecated: 해당 메서드(변수)가 하위 버전의 호환성 문제로 삭제하기 곤란할 때 사용한다.- @Override: 해당 메서드가 상위 클래스의 메서드를 재정의 했다는 것을 알리기 위한 주석이다.- @SuppressWarnings: 컴파일 경고 메시지를 출력하지 않게 해주는 주석이다. Package + Impor..
2024.07.17 -
상속- 기존(상위) 클래스의 자산(멤버)을 자식(하위) 클래스에서 재사용하기 위해 정의하는 것이다.- extends 키워드를 사용하여 표기한다.- 모든 클래스의 조상 클래스는 Object이다. 해당 그림을 보면 SpiderMan이라는 클래스에 extends를 추가해 Person의 상속 클래스로 정의하였다. 이렇게 하면 SpiderMan도 Person의 변수와 메서드인 name, jump(), eat()를 가지게 된다. 상속의 유의점- 자바에서는 자식 클래스를 선언하여 메모리에 올리게 되면 자식부터 위의 모든 부모 클래스들이 같이 올라간다.- 자바가 무겁다는 말이 나오게 된 중요 포인트인 것 같다.- 부모 클래스를 선언 후, 자식 클래스를 넣으면 자식의 부모 클래스를 참조한다.- 여기서 변수를 선언하..
5. 상속상속- 기존(상위) 클래스의 자산(멤버)을 자식(하위) 클래스에서 재사용하기 위해 정의하는 것이다.- extends 키워드를 사용하여 표기한다.- 모든 클래스의 조상 클래스는 Object이다. 해당 그림을 보면 SpiderMan이라는 클래스에 extends를 추가해 Person의 상속 클래스로 정의하였다. 이렇게 하면 SpiderMan도 Person의 변수와 메서드인 name, jump(), eat()를 가지게 된다. 상속의 유의점- 자바에서는 자식 클래스를 선언하여 메모리에 올리게 되면 자식부터 위의 모든 부모 클래스들이 같이 올라간다.- 자바가 무겁다는 말이 나오게 된 중요 포인트인 것 같다.- 부모 클래스를 선언 후, 자식 클래스를 넣으면 자식의 부모 클래스를 참조한다.- 여기서 변수를 선언하..
2024.07.17 -
객체객체란 두 가지 의미로 설명할 수 있다.1. 자신의 속성을 가지고 있으면서 식별이 가능한 것2. 클래스에서 정의한 것을 토대로 메모리에 할당된 것 객체지향 프로그래밍(Object-Oriented Programing, OOP)주변의 사물이나 추상가능한 것을 객체로 만들고, 객체들 간의 상호작용을 이용하여 프로그래밍하는 방법객체지향 언어의 특징으로는- 추상화(Abstruction): 현실의 객체를 추상화( 본질적이고 공통적인 부분을 모아 정의하는 것)- 다형성(Polymorphism): 하나의 객체를 여러가지 타입으로 참조- 상속(Inheritance): 부모 클래스를 자식 클래스로 정의하여 코드의 재사용- 캡슐화(Encapsulation): 데이터를 외부에 노출시키지 않게 보호 => 현실의 객체는 추..
4. 객체객체객체란 두 가지 의미로 설명할 수 있다.1. 자신의 속성을 가지고 있으면서 식별이 가능한 것2. 클래스에서 정의한 것을 토대로 메모리에 할당된 것 객체지향 프로그래밍(Object-Oriented Programing, OOP)주변의 사물이나 추상가능한 것을 객체로 만들고, 객체들 간의 상호작용을 이용하여 프로그래밍하는 방법객체지향 언어의 특징으로는- 추상화(Abstruction): 현실의 객체를 추상화( 본질적이고 공통적인 부분을 모아 정의하는 것)- 다형성(Polymorphism): 하나의 객체를 여러가지 타입으로 참조- 상속(Inheritance): 부모 클래스를 자식 클래스로 정의하여 코드의 재사용- 캡슐화(Encapsulation): 데이터를 외부에 노출시키지 않게 보호 => 현실의 객체는 추..
2024.07.16 -
배열배열은 다른 언어들과 같이 크기가 고정되어 있고, idx로 접근 가능이라는 특징이 있다.int [] arr = new int [5];int [] arr2 = {1,2,3,4,5};System.out.println(Arrays.toString(arr2)); // 이거 하면 파이썬에서 한번에 출력하듯이 나옴 // 다차원 배열용은 Arrays.deeptoString(arr);int [][] arr3 = new int[3][]; // 놀랍게도 이거 됨arr3[0] = new int[1];arr3[1] = new int[2];arr3[2] = new int[3];for(int [] t : arr3){ System.out.println(..
3. 자료구조배열배열은 다른 언어들과 같이 크기가 고정되어 있고, idx로 접근 가능이라는 특징이 있다.int [] arr = new int [5];int [] arr2 = {1,2,3,4,5};System.out.println(Arrays.toString(arr2)); // 이거 하면 파이썬에서 한번에 출력하듯이 나옴 // 다차원 배열용은 Arrays.deeptoString(arr);int [][] arr3 = new int[3][]; // 놀랍게도 이거 됨arr3[0] = new int[1];arr3[1] = new int[2];arr3[2] = new int[3];for(int [] t : arr3){ System.out.println(..
2024.07.15