JAVA/자바

    MSA 에 대해 알아보자

    MSA 에 대해 알아보자

    이번엔 MSA 에 대해 알아보려고 한다. 그간 개발자로 일을 하며 모놀로식으로 개발한 적도 있었지만 주로 MSA 환경에서 개발을 많이 했었다. MSA 에 대해 어느정도 알고 있다고 생각했지만 정작 정의나 특징에 대해 제대로 알아본 적이 없었다. 누군가 MSA 가 뭐야로 시작해서 사용하는 이유, 구체적인 장단점 및 어떤 상황에서 이점이 있는 지 등을 물어본다면 말문이 막히게 될 것 같다. 때문에 이번 기회에 정리를 해보려고 한다. MSA에 대해 설명하기 전에 먼저 Monolithic Architecture 에 대해 알아보자. 모놀로식 아키텍쳐는 모든 소프트웨어의 구성이 하나의 프로젝트, 하나의 아키텍쳐에 속해 있는 형태를 말한다. MSA가 화제가 되기 전에는, 보통의 방식이 모놀로식이였다. 모놀로식은 개발..

    [Java] 해시 알고리즘이란?

    해시 알고리즘(Hash Algorithm)은 임의의 길이를 가진 데이터를 고정된 길이의 해시 값으로 변환하는 알고리즘이다. 이 알고리즘은 입력 데이터에 대해 일관된 해시 값을 생성하고, 입력 데이터가 조금만 변경되어도 완전히 다른 해시 값을 반환하는 특징을 갖는다. 일반적으로 해시 함수라고도 불리며, 다양한 분야에서 데이터 무결성 검사, 데이터 식별, 암호화, 암호 인증, 자료구조 등에 활용된다. 해시 알고리즘은 다양한 종류가 있으며, 대표적인 예로 MD5(Message Digest Algorithm 5), SHA(Secure Hash Algorithm) 시리즈 등이 있다. 각 해시 알고리즘은 입력 데이터를 다양한 방법으로 변환하고 해시 값을 생성한다. 이러한 알고리즘은 충돌(collision)을 최소화..

    함수형 인터페이스

    코드를 작성하다 보면 비슷한 로직의 중복 코드가 생길 수 있고, 그로 하여금 관리 지점이 늘어나기 때문에 대부분 리팩터링의 대상으로 취급한다. 함수형 인터페이스를 사용하면 효과적으로 코드의 중복을 줄일 수 있고, 가독성을 높일 수 있다. Consumer 매개값은 있고, 반환값은 없다. 매개값을 전달받아 사용하고 아무것도 반환하지 않을 때 사용된다. 이를 소비 (Consume) 한다고 표현한다. accept 추상 메소드를 가지고 있다. 이름 기능 메소드 Consumer 객체 T를 받아 소비한다. void accept(T t) BiConsumer 객체 T와 U 두가지를 받아 소비한다. void accept(T t, U u) DoubleConsumer double 값을 받아 소비한다. void accept(d..

    [Java] Enum, 열거타입

    상수 목록을 담을 수 있는 데이터 타입 특정한 변수가 가질 수 있는 값을 제한 가능. Type-Safety를 보장 할 수 있다. 싱글톤 패턴을 구현할 때 사용하기도 한다. 문자열과 비교해 IDE의 폭넓은 지원을 받을 수 있다. ( 자동완성, 오타검증 등) 리팩토링 시 변경 범위 최소화 java의 Enum은 코드의 가독성을 생각하며 만든 기능을 갖춘 클래스이기 때문에 여러가지 장점이 있다. 1. 데이터들의 연관관계 표현 특정 값을 이용해 또다른 값을 만들어내야 하는 상황은 많이 발생한다. public String getTypeFromValue(String value){ if( "a".equals(value) ){ return "aaa"; } else if( "b".equals(value) ) { retur..

    [JAVA] SOLID 객체지향 설계 5원칙

    [JAVA] SOLID 객체지향 설계 5원칙

    이번 포스팅에선 객체지향 설계 5원칙인 SOLID에 대해 알아보려고 한다. 객체지향의 4가지 특성인 캡슐화, 추상화, 다향성, 상속과 더불어 설계 원칙을 공부해보자. SOLID 는 자기 자신 클래스의 응집도는 내부적으로 높이고 , 타 클래스들간 결합도는 낮추는 High Cohesion - Loose Coupling 원칙을 객체 지향의 관점에서 도입한 것 이다. 정보처리자격증을 공부할 때, 응집도가 높고 결합도가 낮을 수록 객체지향의 설계에 적합하고, 이렇게 설계된 SW는 재사용성이 증가하고, 수정이 최소화 되기 때문에 유지보수가 용이해진다고 배웠다. SRP ( Single Responsibility Principle ) 단일 책임 원칙 " 어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 한다" 클..

    [JAVA] Static과 Final

    Static이란? java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 일반적으로 우리가 만든 Class는 Static 영역에 생성되고 , new 연산을 통해 생성한 객체는 Heap 영역에 생성된다. 객체 생성 시 할당된 힙은 가비지 컬렉터를 통해 수시로 관리를 받는다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리가 되고, 가비지컬렉터의 관리 영역 밖에 존재하므로 프로그램 종료시 까지 메모리가 할당된 상태로 존재한다. 때문에 자주 사용하게 되는 static은 성능에 도움을 줄 수 있지만 자주 사용하지 않는 프로그램이나 static을 무분별하게 사용한다면 성능에 악영향을 주게 된다. 전에..

    [JAVA] 스택과 힙 , 가비지 컬렉터

    [JAVA] 스택과 힙 , 가비지 컬렉터

    자바에서 일반적으로 구성되는 메모리의 구조는 다음과 같이 Stack 과 Heap 메모리로 구성된다. Stack 스택 메모리는 heap 영역에 존재하는 객체들에 대한 참조를 가지고 있다. 또한 객체들 뿐만 아니라 기본형 타입 , main() 함수를 포함한 각 함수의 지역변수도 Stack 메모리 영역에 저장된다. Stack에 존재하는 변수들은 유효범위(scope)라고 하는 특정한 가시성을 가진다. 오직 활성화 된 범위의 객체들만 사용이 가능하다. scope란 무엇일까? 유효범위는 쉽게 말하면 명명충돌을 방지하는 기능이라고 생각하면 되겠다. public class DemoScope { static void a () { int i = 0; } public static void main(String[] args)..

    [JAVA] String에서 ==와 equals()의 차이점

    [JAVA] String에서 ==와 equals()의 차이점

    전에 작성한 포스팅 중, null과 inEmpty의 차이점에 대해 작성했던 적이 있었다. isEmpty와 ==null - 객체가 비어있는지 확인하는 방법 — 간편 웹프로그래밍 (tistory.com) isEmpty와 ==null - 객체가 비어있는지 확인하는 방법 객체가 비어있는지 확인할 때에는 'isEmpty'와 '==null'을 사용한다. 두가지의 차이점은 isEmpty()는 객체가 값이 존재하지 않으면 true를 리턴한다 ex ) String a =""; 이면 true 객체에 ""라는 값(a)이 들어가 kimfk567.tistory.com 이번엔 ==과 equals()에 대해 포스팅해보려고 한다. 일단 null은 메모리영역이 아예 비워있을 때 true이고, isEmpty는 객체가 비어있을 때 tru..

    Java 문자열 나누기 - substring , indexOf , charAt

    String substring( int A ) - substring 함수는 두가지가 있는데, 첫번쨰는 인자값을 하나만 받는 함수이다. 인자값은 int형으로 문자열 인덱스의 시작 부분을 지정하며, 해당 인덱스를 포함한 뒤의 모든 문자열을 리턴한다. String b = "012345"; b.substring(3); b라는 문자열이 있을때, substring(3)을 주게되면 "345"를 리턴한다. String substring ( int beginA , int endA ) 이 substring 함수는 인자값이 두개이다. 첫번째 입력을 받는 인자값이 가져올 문자열의 시작부분을 지정하고, 두번째 입력받는 인자 값은 가져올 문자열의 끝 부분을 지정한다. String b = "012345"; b.substring(3..