Blog Posts

제네릭

제네릭

  • Java
  • 2021년 2월 24일

제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법으로 컴파일 시에 더 많은 버그를 탐지할 수 있도록해 코드의 안전성을 더한다. C++의 템플릿과 처리 과정이나 방법의 차이점이 존재하지만 타입을 제거기술이라는 개념에서는 비슷하다고 볼 수 도 있다. Java 제네릭 컴파일타임에 에러를 검출할 수 있찌만 실제 동작코드는 제네릭을 사용하지 않을때와 동일해 성능도 동일하다. static 변수는 모든 객체가 공유하고, 모든 타입은 Object를 상속해야 하기 때문에 원시형 타입이 사용이 불가능 하다. C++ 템플릿 : 사용하지 않으면 컴파일을 하지 않는다. 컴파일러는 각각 타입에 대해 별도의 템플릿 코드를 생성하기 때문에, static변수를 공유하지 않고, 원시형 타입이 사용가능하다. 1. 장점 강력한 타입 체크 : 런타임이 아닌 컴파일 타임에 에러를 출력한다. 편한 캐스팅 : Object로 선언하여 (Integer) 와 같이 캐스팅을 하지 않아도 컴파일러에 의해 자동으로 형변환이 이루어진다. 코드의 재사용성이 높아진다. (코드 중복 최소화) 2. 제네릭 사용법 다음과 같이 Object형 배열을 갖는 ArrayList를 만들어 Integer형 배열로 사용하려고 하는데 String을 넣고 사용한다면 컴파일 타임에는 에러가 발생하지 않는데 런타임시 에러가 발생하게 된다....

Read More
I/O

I/O

  • Java
  • 2021년 2월 9일

컴퓨터의 5대 기능인 입력/출력/연산/저장/제어 중 입력(Input)과 출력(Ouput)을 줄여 I/O라고 말한다. 1. 스트림 / 버퍼 / 채널 기반의 I/O 1) 스트림 입출력을 도와주는 모듈로써 Stream이라는 단어 그대로 흐름을 의미하며, 한 방향으로만 진행하는 단방향통신이다. 2) 버퍼 일종의 데이터 공간으로 메모리간, 컴퓨터와 사용자간의 속도차이로 생기는 병목현상을 줄이기 위한 공간...

Read More
클래스

클래스

  • Java
  • 2021년 2월 1일

객체 지향의 중심 객체를 정의하는 일종의 틀 같은 것으로 상태(변수) / 행동(메서드)이 있을 수 있다. 이로 인해 추상화, 캡슐화, 상속, 다형성 등을 가능하게 하여 개발 / 유지보수를 쉽게 해준다. 1. 클래스 정의하는 방법 class키워드를 통해 클래스를 새로 정의할 수 있다. 1) 필드 변수를 뜻하며 두가지 종류가 존재한다. 인스턴스 변수 : Fruit이라는 객체를 새로 생성할때마다 각각 독립적인 값을 갖는 변수로 heap 영역에 저장 된다. 클래스 변수 : 인스턴스 변수 앞에 static키워드를 붙여 선언한 변수이다. 딱 한번만 선언되는 변수로 static 영역에 할당되어 Fruit이라는 객체는 이 변수를 모두 공유한다. 2) 메서드 어떠한 행동을 정의한 형태로, 필드들을 수정하거나 참조, 반환을 할 수 있다....

Read More
어노테이션

어노테이션

  • Java
  • 2021년 1월 31일

메서드를 오버라이딩 할때 사용했던 @Override와 같이 @ 기호를 사용하는 문법 요소로 Java5부터 등장했다. 단어의 의미인 주석과는 비슷하지만 다른 역할로써 사용되는데 메서드/클래스 등에 의미를 단순히 컴파일러에게 알려주기 위한 표식이 아닌 컴파일타임 이나 런타임에 해석될 수 있다. 1) 장점 기존의 자바는 선언적 프로그래밍방식으로 개발을 하면서 각 계층별 설정 데이터들을 XML에 명시했었는데 서비스의 규모가 클 수록 설정양이 많아지고 도메인 처리의 데이터들이 분산되어 있어 수정이 힘들었다....

Read More
PointRee 프로젝트 3 - back 개발환경 셋팅과 db설계

PointRee 프로젝트 3 - back 개발환경 셋팅과 db설계

IntelliJ를 이용해서 pointRee폴더 내에 back폴더를 생성해주고 여기에 spring boot 2.4로 프로젝트를 시작했다. dependency는 위와 같이 추가해주었다. 1. db설계 포인트의 유효기간을 처음에 생각을 했었으나 db설계와 구현과정에 있어 많은 시간이 생각보다 소요될 것 같아 일단 유효기간이 없다고 생각하고 설계를 진행했다. 완성후 다른곳에 문제가 없다면 차차 추가할 생각이다....

Read More
Junit5

Junit5

  • Java
  • 2021년 1월 25일

자바 프로그래밍용 Unit 테스트 프레임워크 런타임시 Java 8이상이 필요하며 컴파일 타임시에 JAR로서 링크된다. Spring Boot를 이용하면 내부에 dependency가 포함되어 있다. 1. 구조 JUnit Platform : 테스트를 발견하고 계획을 생성하는 TestEngine 인터페이스를 갖고 있다. 이를 통해 테스트를 발견,실행,보고한다. JUnit Jupiter : TestEngine의 실제 구현체는 별도 모듈중 하나로 Juptier-API를 이용한 테스트 코드를 발견하고 실행...

Read More
제어문

제어문

  • Java
  • 2021년 1월 25일

1. 조건문 1) Switch 특정 데이터의 값에 따라 수행할 작업을 선택하는 구문으로 switch를 사용한다. 일반적인 사용법은 C/C++와 다르지 않다. switch() 매개변수에 데이터 값을 입력하고 case : 를 이용해 값에 따라 구문을 구분하면 된다. String이나 ,Integer과 같은 Wrapper타입이 올 수 있다. case의 값에는 리터럴 이나 상수가 와야 하고 중복해서는 안된다. Java 12버전 이후에 case -> 를 이용하여 작업할 구문을 작성할 수 있게 되었고 break를 생략이 가능해졌다. 또한, -> 와 yield를 사용하여 switch도 값을 반환할 수 있게 되었다. case에 따라 특정 변수의 값을 바꾸는 경우에는 위의 코드와 같이 외부의 변수에 값을 할당해주는 방법으로 비슷한 코드를 반복작성해야하는 단점이 존재했는데 쉽게 값을 바꿀 수 있게 되었다....

Read More
Enum

Enum

  • Java
  • 2021년 1월 24일

백기선님의 유튜브 로 진행하시는 스터디를 진행하며 올리는 정리 블로그입니다. Java의 Enum도 기본적으로 c나 c++의 enum과 같은 목적을 위한 클래스로 JDK 1.5이후에 생긴 클래스이다. 잠깐 C언어 얘기를 하자면 C언어의 C99 이전에는 boolean타입을 제공하지 않았기 때문에 다음과 같이 사용하고는 했었다. 1. Java에서의 Enum 특징 Enum 비교시에 값이 아닌 타입까지도 체크가 가능하고 Enum의 상수값이 재정의 되어도 다시 컴파일하지 않는다....

Read More
PointRee 프로젝트 2 - front 개발환경 셋팅과 전체적인 디자인

PointRee 프로젝트 2 - front 개발환경 셋팅과 전체적인 디자인

가장 먼저 vscode를 통해 wsl2에 접속하고 wsl2에 폴더를 만들어 주고 react-create-app으로 간단하게 react프로젝트를 시작했다. 그리고 npm run start로 시작해보면 정상적으로 프로젝트가 실행되는 것을 확인 할 수 있다. 이때 나처럼 wsl2로 실행시킨 사람이라면 window의 브라우저에 localhost:3060을 타이핑해서 들어간다면 접속이 되지 않을 것이다....

Read More
연산자

연산자

  • Java
  • 2021년 1월 23일

백기선님의 유튜브 로 진행하시는 스터디를 진행하며 올리는 정리 블로그입니다. 산술 연산자 두개의 피연산자를 갖는 이항 연산자로써, 기본적인 사칙연산을 다루는 연산자 ◾ 더하기 (+) 왼쪽의 피연산자에 오른쪽 피연산자를 더하는 연산자로 숫자+숫자, 문자열+문자열이 가능하고 문자열+숫자를 할 시 숫자를 자동으로 문자열로 변환하여 덧셈이 가능하다. 문자+숫자를 할 경우에는 아스키 코드를 이용하여 문자로 결과가 출력 된다. 문자에 맞는 아스키 코드값과 숫자를 더한 결과값에 해당하는 아스키코드를 return하기 때문이다....

Read More