반응형

Programming/Java 67

전문통신이란? Java 전문통신(Fixed Length Format) 문자열 길이 맞추는 메서드

전문 통신이란, 먼저 'Fixed Length Format'은 전문을 구성하는 field들의 길이를 입력받을 수 있는 최대 사이즈로 고정시키는 방식입니다. 대규모의 프로젝트를 진행하다 보면 서로 다른 시스템끼리 데이터를 주고받아야 하는 상황이 생깁니다. 이 경우 시스템 간의 통신에서 데이터 송수신 format을 정하는 것도 중요한데요. 일반적으로 데이터를 송수신하는 전문의 형태는 JSON, XML, Fixed Length 등 여러 가지로 구성할 수 있습니다. (요즘은 XML, JSON 등의 format 형태가 많이 사용되지만 C언어와의 통신에서는 데이터 송수신 format으로 C언어에서 사용하기 편리한 형태인 Fixed Length 형태도 많이 사용됩니다.) 전문은 일정한 크기의 공통된 데이터를 가진 h..

Programming/Java 2022.01.19

Java 대출 이자 계산기 구현하기 (원금균등, 원리금균등, 만기일시)

'자바 대출 이자 계산기 구현하기 (원금균등상환, 원리금 균등상환, 만기 일시상환)' 대출 시 이자 상환 방식에는 원금균등상환, 원리금 균등상환 그리고 만기 일시상환 세 가지가 있으며, 각 방식에 따라서 이자 금액에 차이가 있을 뿐만 아니라 재정 계획에 영향을 줄 수 있습니다. 아래에서는 각 방식에 대한 간단한 내용과 구현된 코드를 볼 수 있습니다. '원금균등상환' 매월 동일한 원금과 남은 잔금에 상응하는 이자를 더한 금액을 매월 상환하는 방식입니다. 즉, 1천만 원을 3%의 이율로 12개월간 대출한 경우 매월 833,333원의 원금을 상환하며, 대출 잔금에 3% 이자율을 적용한 이자를 함께 상환합니다. 잔금이 매월 줄어들기 때문에 그에 따른 이자가 줄어들어 3가지 방식 중 총이자 금액이 가장 저렴하다는..

Programming/Java 2022.01.13

Java 날짜와 문자열 LocalDateTime, String 변환하기

'LocalDateTime to String, String to LocalDateTime' 자바에서는 기존의 Calendar 클래스와 Date 클래스의 불편한 점을 보안하기 위해 JDK1.8부터 java.time API를 도입하였습니다. java.time 패키지에는 날짜와 시간을 나타내는 LocalDateTime, 날짜를 나타내는 LocalDate, 시간을 나타내는 LocalTime 외에 OffsetDateTime, ZonedDateTime, Instant 등의 클래스들이 있습니다. (LocalDateTime과 String의 변환에 대해 먼저 살펴보고, 아래에서는 OffsetDateTime, ZonedDateTime, Instant 등 java.time 패키지 내에 시간을 다루는 클래스들에 대해 간단하게..

Programming/Java 2022.01.08

자바 추상 클래스와 인터페이스의 차이점 이해하기

'is a kind of(~의 한 종류) 추상 클래스'와 'be able to(~할 수 있는) 인터페이스' - 추상 클래스 public abstract class 클래스이름 { ... public abstract void 메서드이름(); } class 앞에 'abstract' 키워드를 사용하여 정의하며, 하나 이상의 추상 메서드를 가지는 클래스를 말합니다. 추상 메서드를 선언하여 상속을 통해서 하위 클래스에서 (반드시) 구현하도록 강제하는 클래스입니다. (추상 메서드를 포함하지 않는 클래스에서도 abstract를 붙여서 추상 클래스로 지정할 수 있으며, 반대로 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 합니다.) abstract로 선언된 추상 클래스는 상속을 위한 클래스이기 때문에 new 키..

Programming/Java 2022.01.06

메소드 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이 이해하기

'다형성과 오버로딩, 오버라이딩' 다형성이란 하나의 메서드나 클래스가 있을 때 그것이 다양한 방법으로 동작하는 것을 말하며, 자바에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해서 다형성을 지원합니다. 오버로딩과 오버라이딩은 이름이 비슷하여 헷갈릴 수 있지만 전혀 다른 개념이기 때문에 헷갈리지 않도록 확실한 차이점을 알아두는 것이 좋습니다. '오버로딩(Overloading) / 확장' 같은 이름의 메서드 여러 개를 가지면서 매개변수의 유형과 개수가 다르도록 사용하는 것 '오버라이딩(Overriding) / 재정의' 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것 '오버로딩(Overloading)' 오버로딩은 메서드 오버로딩과 생성자 오버로딩이 ..

Programming/Java 2022.01.03

자바 예외 처리 방법과 CheckedException, UncheckedException

*** Throwable 클래스는 예외 처리를 하기 위한 최상위 클래스로, 직접 사용되는 경우는 없지만 Throwable 타입과 이 클래스를 상속받은 서브 타입만이 JVM이나 throw 키워드에 의해 던져질 수 있습니다. '에러(Error) vs 예외(Exception)' '에러'는 시스템이 비정상적인 상황에서 발생합니다. 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나 자바 가상 머신(JVM) 실행에 문제가 생겼을 때 발생하는 것이며, 시스템 레벨에서 발생하는 심각한 수준의 오류이기 때문에 예외와 다르게 개발자가 미리 예측할 수도 없고, 애플리케이션 코드에서 잡아서 처리할 수도 없습니다. (에러의 예로는 OutOfMemoryError, ThreadDeath, StackOver..

Programming/Java 2021.12.30

Java Generic 제네릭 기본적인 개념 이해하기

'제네릭(Generic) 기본적인 개념 이해하기' '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법' 어떤 자료 구조를 만들어서 사용하려고 할 때 String 타입도 지원하고 싶고, Integer 타입도 지원하고 싶고, 다른 타입들도 지원하고 싶은 경우가 있습니다. 그럴 때 String에 대한 클래스, Integer에 대한 클래스 등 타입에 따라 각각의 클래스들을 모두 만드는 것은 너무 비효율적입니다. 자바에서는 이러한 문제를 해결하기 위해 java 1.5부터 제네릭을 사용하게 되었는데요. 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌, 외부에서 사용자에 의해 지정되는 것을 의미하며, 한마디로 특정(Specific) 타입을 미리 지정해주는 것..

Programming/Java 2021.12.24

역할 분리를 위한 Entity, DTO 개념과 차이점

'Entity, DTO 개념과 차이점 (+ VO)' - Entity Entity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체입니다. (DB의 테이블과 1:1로 매핑되며, 테이블이 가지지 않는 컬럼을 필드로 가져서는 안 됩니다.) Entity는 데이터베이스 영속성(persistent)의 목적으로 사용되는 객체이며, 때문에 요청(Request)이나 응답(Response) 값을 전달하는 클래스로 사용하는 것은 좋지 않습니다. 또 많은 서비스 클래스와 비즈니스 로직들이 Entity 클래스를 기준으로 동작하기 때문에 Entity 클래스가 변경되면 여러 클래스에 영향을 줄 수 있습니다. *** Entity에서는 setter 메서드의 사용을 지양해..

Programming/Java 2021.12.21

Java AES-256 양방향 암호화 제대로 알고 사용하기

'Java 양방향 암호화 AES-256 제대로 알고 사용하기' /* 프로젝트에서 양방향 암호화를 하기 위해서 AES-256 코드를 구글링 하여 사용하였는데, 나중에 알고 보니 사용하던 것이 AES-256이 아닌 AES-128인 경우가 있었습니다. 코드를 가져와서 사용하더라도 기본적인 원리는 알고 사용해야겠다는 생각에 AES-256 암호화를 정리하게 되었습니다. */ 본격적인 시작에 앞서 단방향 암호화 알고리즘과 양방향 암호화 알고리즘의 차이점에 대해서 간단하게 알아보겠습니다. 먼저 단방향 암호화는 평문을 암호화 했을 때 다시 평문으로 되돌리는 것(복호화)을 할 수 없는 암호화 방식으로 패스워드 암호화에 사용되며 대표적으로 'SHA-256'이 있습니다. 양방향 암호화는 평문에서 암호문으로, 암호문에서 평문..

Programming/Java 2021.12.15

Java 직렬화, 역직렬화 방법 Serializable interface

'자바 직렬화(Serialization)와 역직렬화(Deserialization)' 자바 시스템 내부에서 사용되는 객체(Object) 또는 데이터(Data)를 외부 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술을 '직렬화(Serialization)'라고 합니다. 반대로 바이트로 변환된 데이터를 원래대로 객체(Object)나 데이터(Data)로 변환하는 기술을 '역직렬화(Deserialization)'라고 합니다. 시스템적으로 본다면 JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술이 '직렬화'이며, 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM에 상주시키는 것을 '역..

Programming/Java 2021.12.13
반응형