프로젝트 개발 기록51 [Java] 람다와 스트림 (Lambda & Stream) 람다식 (Lambda Expression) 함수(메서드)를 간단한 '식(expression)'으로 표현하는 방법 익명 함수(이름이 없는 함수, anonymous function) 함수와 메서드의 차이 근복적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적 // 반환 값이 있는 경우 (int a, int b) -> a > b ? a : b // 매개변수의 타입이 추론 가능하면 생략가능(대부분 경우 생략가능) (a, b) -> a > b ? a : b ✔️ 함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음 MyFunction f = (a, b) -> a > b ? a : b; .. 2022. 11. 13. [Java] 코딩테스트 대비 정리 (2) 처음부터 다 알려고 하지 말자! 문제 풀면서 새로 알게 된 개념. 기억하고 싶은 개념을 기록하자. 형변환 ✔️ String -> int 1) Integer.parseInt(String s) int 타입을 리턴한다. 2) Integer.valueOf(String s) parseInt와 다르게 Integer Object를 리턴한다. 그리고 .intValue()를 사용하여 int 타입으로 형변환할 수 있지만 붙이지 않아도 자동으로 형변환이 된다. ✔️ String -> char[] 1) str.toCharArray() 이때 str은 String 타입이다. ✔️ int -> String 1) Integer.toString(int i) 2) String.valueOf(int i) 3) i (int타입의 값) + .. 2022. 11. 7. [Java] 코딩테스트 대비 정리 (1) 동적 타입 언어인 파이썬과 자바스크립트에 적응한 나란 몸.. 정적 타입 언어 자바를 쓰려니 참 어렵다... 휴 자바 미션과 코딩테스트를 대비해서 헷갈렸던 개념을 정리하면서 공부해보자! List 클래스 자바에서 List를 만들때 List 인터페이스를 구현한 ArrayList나 LinkedList와 같은 객체를 생성하게 되는데 Arrays.asList()와 List.of() 메소드로도 생성할 수 있다. 1) Arrays.asList() List strList = new ArrayList(Arrays.asList(splitArray)); 2) List.of() List.of() 메서드는 JAVA 9 부터 지원하는 메서드이다. char 배열과 String 클래스 차이 코드를 짤 때 문자열 저장은 String 타.. 2022. 10. 29. [IntelliJ] project마다 JDK 버전 관리하기 나는 기존에 JDK 8을 사용하고 있었고 스프링 강의에서는 JDK 11을 사용한다. 엇.. 그러면 IntelliJ 버전은 어떻게 해야할까. Project A Project: Gradle Project Language: Java Java: 11 Project B Project: Gradle Project Language: Java Java: 8 Project Setting (CTRL+ALT+S, CMD+,) ✔️ Gradle JVM 변경 Build, Execution, Deployment > Build Tools > Gradle 여기서 Gradle JVM을 변경한다. 내가 원하는 JDK 버전을 추가해줬다. ✔️ Project bytecode version 변경 Build, Execution, Deploym.. 2022. 10. 25. [Java] 예외처리 예외처리 (exception handling) 프로그램 오류 컴파일 에러(compile-time error): 컴파일할 때 발생하는 에러 런타임 에러(runtime error): 실행할 때 발생 하는 에러 에러(error): 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception): 프로그램 코드에 의해서 수습될 수 있는 미약한 오류 -> 예외는 처리하자!! 논리적 에러(logical error): 작성 의도와 다르게 동작 예외 처리 정의: 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것 목적: 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것 방법: try-catch문, 예외 선언하기 ✔️ Exception Exception 클래스들: 사용자.. 2022. 10. 23. [MySQL 8.0] 초기 세팅 이번에 MySQL 세팅을 다시 하면서 다시 검색하는 번거로움을 줄이고자 정리해본다! 1. 서버 접속 $ mysql -u root -p 이때 -u 옵션은 user를 뜻하고 -p 옵션은 password를 뜻한다. 이때 접속하고자 하는 사용자를 선택한다. 2. 사용자 추가 CREATE USER 'user-name'@'localhost' IDENTIFIED BY 'user-password' FLUSH PRIVILEGES; 이렇게 수정을 해주고 FLUSH PRIVILEGES; 명령어를 사용하게 되는데 FLUSH는 버퍼 내용을 지우고 버퍼링된 데이터를 파일에 저장해준다. 그래서 위에서 변경한 내용이 적용시켜 주는 명령어이다. 3. 유저 정보 확인하기 SELECT USER, HOST FROM mysql.user; 3.. 2022. 10. 19. 잃고나니 보이는 것들... 랜섬웨어 평화롭던 어느날.. 이전 프로젝트에서 인공지능 파트 서버를 실행시켰는데 엥 디비가 왜 없지? 🤔 급하게 mysql 서버에 접속해봤다. 🤔 골드? 아 아니네. 갓? 래...랜..서엄??????? 원래 내 사랑스러운 테이블이 없더라.. 내 자식들은 사라지고 남의 자식이 이사와 있네? 누구냐 넌 그래 내 데이터 훔쳐가고 너 뭐 넣어놨니? 정성스럽게도 적어놨다... 그래... 데이터 빼앗긴 기념으로 랜섬웨어가 무엇인지 공부해보자! ^_^ 공부할 기회다! 랜섬웨어 몸값을 의미하는 랜섬(Ransom)과 소프트웨어(Software)의 합성어로 시스템을 잠그거나 데이터를 암호화하고 잠금 해제나 복호화를 빌미로 금전을 요구하는 악성프로그램이다. 위에서는 데이터를 빌미로 비트코인을 달라고 했다; 이때, 랜섬웨어 공격수법은.. 2022. 10. 18. [Java] 알아두면 좋을 것! (JDK, JRE, JVM, build, run) 자바 기본 자바와 스프링 공부를 함께 하고 있는데 기본 원리를 놓치고 공부하고 있다는 생각을 했다. 그래서 오늘은 기본적인 Java 원리를 정리하고 이해해보자. 1. JAVA 언어를 컴퓨터가 이해하는 과정 1) 코드 작성 .java public class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World"); } } 기계는 Java Source code를 이해할 수 없다. 2) 컴파일러(Compiler)가 컴파일(Compile) 함. 0과 1의 코드로 바꿔줌. 3) 바이트 코드 (바이너리 코드) 컴퓨터가 이해함. [ 정리 ] 컴파일: 인간이 이해하기 쉬운 언어를 기계어로 번역하는 과정 컴파일러: .. 2022. 10. 16. [Java] 다형성(polymorphism), 추상 클래스, 인터페이스, 내부 클래스 다형성 (polymorphism) 여러 가지 형태를 가질 수 있는 능력 (하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것) 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다. 조상: TV, 자손: SmartTV Tv t = new SmartTV(); // OK SmartTv s = new TV(); // 에러 멤버의 개수가 7가진데 5가지만 참조변수로 사용할 수도 있다. ✔️ 참조변수의 형변환 사용할 수 있는 멤버의 개수를 조절하는 것 조상 자손 관계의 참조변수는 서로 형변환 가능하다. 자손타입 -> 조상타입(up-casting) : 형변환 생략가능 조상타입 -> 자손타입(down-casting) : 형변환 생략불가 FireEngine .. 2022. 10. 12. [Java] package와 import, 제어자 패키지 (package) 서로 관련된 클래스의 묶음 클래스의 실제 이름(full name)은 패키지를 포함. (java.lang.String) ✔️ 패키지의 선언 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다. 패키지 선언이 없으면 이름없는 (unnamed) 패키지에 속하게 된다. package com.codechobo.book; src 아래에서 New -> Package 로 패키지를 생성할 수 있다. 패키지를 생성하면 class를 생성할 수 있다. 다음과 같이 패키지 선언이 자동으로 삽입된다. 패키지 사용 이유 클래스의 분류가 용이하다. (비슷한 것 끼리 묶는다) 패키지가 다르다면 동일한 클래스명을 사용할 수 있다. import문 클래스.. 2022. 10. 11. [Java] 상속 (Inheritance), 오버라이딩, super, super() 상속 (Inheritance) 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. (코드의 재사용) 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화 블록 제외) 자손의 멤버 개수는 조상보다 적을 수 없다. class Parent { int age; } class Child extends Parent {} : 이때 부모 멤버 1개를 모두 상속받았기 때문에 자식 또한 멤버 1개이다. 자손의 변경은 조상에 영향을 미치지 않는다. 예시 class Point { int x; int y; } class Point3D extends Point { int z; } ✔️ 포함 관계 클래스의 멤버로 참조변수를 선언하는 것 작은 단위의 클래스를 만들고, 이들을 조합해서 클래스를 만든다. 예시 class Poi.. 2022. 10. 9. [Node.js] Nest.js 폴더 구조 설계하기 0. 개요 [ 기존의 구조 ] 보통 express에서는 컨트롤러, 서비스 별로 쭈욱 파일이 모여있다. 아래는 과거에 진행한 프로젝트 구조이다. 프로젝트를 진행하면서 mvp가 많아질수록 컨트롤러와 서비스는 많아졌고 점점 도메인 별로 코드를 찾기 어려워졌다. 이 구조는 서비스가 확장되면 도메인 별로 흩어져 있기 때문에 파일을 찾아서 개발하는 것이 힘들다. 그래서 좀 더 대규모 서비스의 폴더 구조는 어떻게 설계하는지 궁금해졌고, 이번에는 nest에서 최대한 DDD할 수 있는 폴더 구조를 알아보려 한다. ┣ 📂controllers ┃ ┣ 📜bookMarkController.ts ┃ ┣ 📜checklistController.ts ┃ ┣ 📜scheduleController.ts ┃ ┣ 📜subscribeContro.. 2022. 9. 25. [Java] 클래스와 객체, 변수와 메서드, 오버로딩, 생성자 1. 객체지향언어 ✔️ 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. ✔️ 특징 코드의 재사용성이 높다. 코드의 관리가 용이하다. 신뢰성이 높은 프로그래밍을 가능하게 한다.(캡슐화) ✔️ 핵심개념 캡슐화 상속 추상화 다형성 자바 언어 자바 언어의 다형성을 활용 역할 = 인터페이스 구현 = 인터페이스를 구현한 클래스, 구현 객체 객체를 설계할 때 역할과 구현을 명확히 분리 객체 설계시 역할(인터페.. 2022. 9. 17. [Node.js] Nest.js에서 프로젝트 시작하기 0. 개요 [ 왜 Nest.js 인가 ] 이전 프로젝트에서는 Node.js에 express 프레임워크를 사용해서 개발을 해왔다. 하지만 express가 불편하다는 생각을 가지고 있었다. 명확하게 정해져 있는 구조가 없다보니 개발자마다 폴더 구조 등이 자유로웠고 가끔은 이런 것들이 꼬이기도 했다. (그리고 나는 프로젝트 문서화를 중요하게 생각하는데 Express에서는 하나하나 yaml 파일로 작성하고 있었다. 물론 express에서도 좀 더 자동화할 수 있지만 nest에서는 좀 더 간편하게 swagger 문서를 자동으로 달 수 있었다.) ( 참고 ) express에서 nest.js처럼 사용할 수 있는 방법도 있다. expresss 서버 구조 : https://jhyeok.com/node-backend-st.. 2022. 9. 14. [Java] 비트연산자(bitwise operator) "& | ^ ~ << >>" 비트 연산자는 피연산자를 비트단위로 논리 연산한다. 비트 연산의 우선순위: 논리 연산 (쉬프트 연산자) ex) 7 > .. 2022. 7. 19. 이전 1 2 3 4 다음 반응형