내부 클래스에 static이 권장되는 이유
개발 공부/Java2022. 4. 26. 20:24내부 클래스에 static이 권장되는 이유

강의를 듣던 중 강사님께서 내부 클래스를 static으로 선언하시길래 이유가 궁금하여 찾아보았다. 찾아보니 이팩티브 자바에 해당 내용에 대한 설명이 나와있다고 한다. 나중에 꼭 읽어봐야지,, 결론은 내부 클래스에서 외부 클래스의 인스턴스 변수에 접근하지 않는다면 내부 클래스는 static으로 선언하는 것이 좋다는 것이다. 그 이유는 크게 두 가지로 정리할 수 있는데 static으로 선언되지 않은 내부 클래스는 외부 클래스에 대한 숨은 참조를 저장해야 하기 때문에 이를 위한 시간/공간적 복잡도가 증가해 성능이 떨어진다. 내부 클래스가 외부 클래스에 대한 숨은 외부 참조를 갖기 때문에 가비지 컬렉션이 제대로 이루어 지지 않아 메모리 누수가 발생할 수 있다. 숨은 외부 참조 숨은 외부 참조라는 개념이 잘 와닿..

함수형 인터페이스와 람다식
개발 공부/Java2022. 4. 26. 16:27함수형 인터페이스와 람다식

스프링 및 자바 공부 중에 람다식을 통한 익명 내부 클래스를 종종 사용하게 되었는데 원리를 모르고 따라 사용하기만 하고 있는 듯해서 관련 내용을 공부하고 정리했다. 1. 함수형 인터페이스? 추상 메서드가 한 개만 선언된 인터페이스를 말함. 추상 메서드 외에 다른 static, default 메서드 존재 여부 및 개수는 관계 없음 @FuncationalInterface 어노테이션을 붙여 해당 인터페이스가 함수형 인터페이스인지 검증할 수 있다. (필수는 아니나 함수형 인터페이스가 아닐 경우 오류 발생) 자바에서는 기본적으로 여러 종류의 유용한 함수형 인터페이스를 제공한다. ex) 함수형 인터페이스 Function Generic으로 T 타입 인자를 받아 R 타입을 반환한다. 수학의 ‘function’과 같은 ..

ISP (인터페이스 분리 원칙) in 스프링 프레임워크
개발 공부/Java2022. 4. 17. 00:03ISP (인터페이스 분리 원칙) in 스프링 프레임워크

제목이 너무 거창한가 스프링 공부 중 아래와 같이 스프링 컨테이너인 ApplicationContext 의 구현체로 AnnotationConfigApplicationContext 를 설정하고 BeanDefinition을 반환하는 ac.getBeanDefinition() 메서드를 호출하려는데 계속 메서드를 찾을 수 없다는 오류가 발생했다. ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 알아보니 ac의 타입을 인터페이스인 ApplicationContext가 아닌 구현체 자체로 설정해주어야 했고, 이러한 일이 발생하는 이유는 객체 지향 설계 원칙인 SOLID 중 ISP 때문이라고 한다. ORP나 DIP, SRP에 ..

소나무 언어에 다른 기술 접목 아이디어
프로젝트/졸업 프로젝트2022. 4. 12. 09:31소나무 언어에 다른 기술 접목 아이디어

M -> 1 번역 후 다시 1 -> M 번역 시 머신러닝 활용 다대일로 번역 후 다시 일대다로 번역될 때 항상 동일한 실행을 보장하는 코드로 번역이 되어야 할텐데 이때 머신러닝 기술을 활용하여 적절한 번역 내용을 도출하고 번역 수행할 수 있을 것 같다. 소나무 언어의 범위 외의 Solidity 코드를 소나무 언어로 번역 시 머신러닝 활용 기존에 네트워크에 존재하는 Solidity 코드를 가져다 소나무 언어로 번역하고자 할 때 정의된 소나무 언어의 범위를 벗어나는 Solidity 문법이 발견될 경우 원래대로라면 번역 자체가 이뤄지지 않겠지만 여기에 머신러닝을 활용할 수 있을까? 어떻게 학습을 시켜야할지는 모르겠다. Solidity -> 소나무 언어로 번역 시 적절한 변수명 도출 Solidity는 기본적으로..

인프랩 CTO 이동욱 님과의 멘토링 후기
기록/후기, 회고2022. 4. 4. 13:20인프랩 CTO 이동욱 님과의 멘토링 후기

과학기술정보통신부에서 주최하는 디지털 청년고민해결단 온라인멘토링에 참여하여 인프런 CTO 이동욱 님 (a.k.a. 향로님) 과의 멘토링을 진행하게 되었다. 이번 멘토링을 통해 얻은 정보와 교훈, 그리고 앞으로의 다짐 등을 정리해보았다. 0. 지원 계기 예전에 한번 학과 홈페이지의 공지사항에 올라오는 여러 게시물 중 정말 해보고싶은 활동이 있었는데 지원 마감일 이후에 글을 확인하여 너무나 아쉽게 기회를 놓친 기억이 있었다. 깊이 탄식하고,, 그 이후로 하루에 꼭 한 번은 사업단 공지를 확인하는 습관이 생겼다. 이번 청년고민해결단 멘토링도 그렇게 매일 확인하던 학과 공지사항에서 발견하게 되었다. 사실 몇 달전까지만 해도 대학원 준비를 하고 있었고 서버 개발자로 진로를 정하게 된 건 정말 최근의 일이라 아직 ..

solidity contract 분석 및 한글 계약서와의 비교
프로젝트/졸업 프로젝트2022. 3. 28. 21:44solidity contract 분석 및 한글 계약서와의 비교

한글 프로그래밍 언어인 '소나무 언어'의 설계 과정에서 solidity 계약서에서 어떠한 문법이 주로 사용되며, 한글 언어로 변환되면서 solidity 언어의 어떤 부분이 간소화될 수 있을지 등을 도출하기 위해 이더리움 네트워크에 배포되어 있는 기존 계약서를 분석하고 한글 계약서와의 비교를 수행했다. 1. solidity contract 분석 1-1. 중고거래 contract contract escrow { // contract 생성자 constructor(uint _price) public payable { seller = msg.sender; // contract를 생성한 사람을 seller로 지정 price = _price; // contract 생성 시 물건 값을 받아 price에 저장 pay =..

자바 기초 여러가지 정리
개발 공부/Java2022. 3. 27. 17:26자바 기초 여러가지 정리

개인적으로 맨날 쓰는데 맨날 헷갈리는 자바 기초 문법이나 특징 등등을 정리해봤습니다. 이 글은 제가 또 새롭게 헷갈리는 게 나오는 대로(?) 계속해서 업데이트할 예정입니다..😂 기본 자료형 vs 참조 자료형 기본 변수는 메모리에 값 자체를 저장하지만 참조 변수는 참조하는 객체의 주소를 메모리(변수)에 저장한다. JAVA에서 char 크기 c와 다르게 java에서는 char이 2byte로 저장된다. 서식 문자 %d - 10진수 → %Xd - 오른쪽 정렬 + 최소 X칸 만큼 공백 유지 %o - 8진수 %x - 16진수 %f - 실수 → %.Xf - 소수점 아래 X자리까지 출력 %c, %s - 문자, 문자열 조건문 (삼항 연산자) 축약 표현 조건문 : true ? false JAVA 배열의 특징 자바에서 배열..

이해당사자 특정 및 문제 상황 정의하기
프로젝트/졸업 프로젝트2022. 3. 27. 17:23이해당사자 특정 및 문제 상황 정의하기

1. 중고차 거래 현재 문제 상황 중고차 거래는 개인 대 개인으로 이뤄지는 경우가 많다. 이에 따라 매물의 신뢰도가 보장 되지 못해 허위 매물, 침수 차 거래 등 거래로 인한 피해를 겪는 경우가 발생한다. 딜러는 자신이 판매하려는 차에 문제가 없다는 사실을 증명하기 어렵다. 구매자는 자신이 구매하고자 하는 차량에 하자가 없다는 사실을 확인하기 어렵다. -> 블록체인이 중개인 역할을 수행할 수 있다. 가능한 것들 중고차의 제원, 이미지, 하자 정도 등의 정보를 프로그램화 하여 블록체인 네트워크에 등록한다. 구매자는 클라이언트 프로그램을 통해 블록체인 네트워크에 접속하여 구매하고자 하는 차량의 정보를 확인하고 차량을 구매한다. 단순 중고차 거래에만 스마트 컨트렉트를 활용하지 않고 판매하려는 중고차의 제원, ..

인프런 '블록체인과 솔리디티' - 솔리디티
프로젝트/졸업 프로젝트2022. 3. 27. 17:22인프런 '블록체인과 솔리디티' - 솔리디티

솔리디티 스마트 컨트렉트를 만들기 위한 언어 C++, JS, Python의 영향을 받음 EVM(Ethereum Virtual Machine)을 타겟으로 함 EVM : 이더리움 노드들이 공유하는 하나의 거대한 가상 머신 스마트 컨트렉트는 수정, 삭제가 불가한 블록체인의 특성상 신중하게 작성해야 함 하지만 이 때문에 신뢰성이 보장되는 것 remix.ethereum.org → 웹 기반 솔리디티 IDE, 테스트 및 디버깅 기능 지원 솔리디티 특징 튜링 완전한 언어 두 가지 특수한 변수를 가짐 msg.sender → 메시지를 보낼 주소 , msg.value → 메시지로 보낼 값 스마트 컨트렉트 구조 contract → class와 비슷한 개념 솔리디티 데이터 타입 문자열 → string(utf8로 인코딩), by..

인프런 '블록체인과 솔리디티' - 블록체인
프로젝트/졸업 프로젝트2022. 3. 27. 17:21인프런 '블록체인과 솔리디티' - 블록체인

블록체인 말 그대로 블록들이 연결된 체인 블록? 쉽게 이야기 하면 데이터들의 집합 이러한 블록은 모든 사용자가 동일하게 가지고 있음 이를 통해 한 사용자가 다른 데이터를 가진 블록을 가지고 있다면 해당 데이터가 틀렸음을 알 수 있다. 탈중앙화? 기존의 보안은 철저히 통제된 저장소에 제한된 인원만 접근이 가능하도록 하여 성립됨 반면 블록체인은 가능한 많은 사람들이 데이터를 가지고 있도록 하여 보안을 유지 이러한 시스템에서 칩입자가 데이터를 조작하고자 하면 수많은 사람들이 가지고 있는 블록의 데이터를 모두 수정해야 하기 때문에 보안이 유지될 수 있음 암호학을 기반으로 이러한 시스템이 설계되어 있기 때문에 블록체인을 통한 보안 시스템이 신뢰받을 수 있게 됨 머클 트리 http://wiki.hash.kr/ind..

image