분류 전체보기 441

[Java] 공유객체와 volatile 키워드

공유객체란 무엇일까? 공유객체는 하나의 객체를 여러 개의 Thread가 사용한다는 의미이다. volatile은 무엇일까? volatile은 해당 키워드로 선언된 변수를 컴파일러의 최적화 대상에서 제외시킨다는 의미이다. 그래서 값이 변경되는 즉시 변수에 적용시킨다. 그런데 하나의 Thread가 아닌 여러 Thread가 Write하는 상황에서는 적합하지 않다고 한다. Java에서 volatile은 Java 변수를 Main Memory에 저장하겠다는 것을 명시하는 키워드이다. 그래서 변수의 값을 읽을때 CPU 캐시에 저장된 값이 아니라 Main Memory에서 읽게 되는 것이다. 그리고 마찬가지로 변수의 값을 쓸때도 Main Memory에까지 작성하는 것이다. 왜 volatile 키워드가 필요할까? volat..

Java 2021.01.05

[Java] 자바 System.out과 System.err의 차이

자바의 System.out 과 System.err 의 차이에 대해서 알아보자. 사실 별 차이가 없는 줄 알았는데 생각보다 흥미로운 차이가 있어서 정리하게 되었다. out과 err는 다른 타이밍에 flush를 한다는 것이 차이점이다. out스트림은 자체적으로 자신의 버퍼를 가지고 있다. 여러개의 print request를 버퍼에 넣고 기다렸다가 적절한 타이밍에 한번에 출력하는 것이다. 이렇게 하는 이유는 속도 때문이라고 한다. print구문이 있을때마다 바로 콘솔에 메시지를 flush해서 출력하면 JVM 성능 상에 영향을 주기 때문이라고 한다. err스트림도 자체적으로 자신의 버퍼를 가지고 있다고 한다. 하지만 err라는 것을 보면 알 수 있듯이 에러 상황과 같이 일반적이지 않은 상황에서의 출력을 의미하기..

Java 2021.01.05

[Java] 왜 자바에서는 static 사용을 지양해야 하는가?

왜 자바에서는 static의 사용을 지양해야 하는가에 대해서 알아보자. static 변수는 전역 상태이다. 그런데 global state는 추론과 테스트가 매우 까다롭다고 한다. 이 static 변수가 코드의 여러 부분에서 영향을 받을 수 있는데 이 변화를 모두 추적하기가 까다로운 셈이다. 그런데 이걸 객체화해서 인스턴스로 생성해서 사용하면 테스트 도중에 그 변수가 어떤 상태인지 알기 쉽기 때문에 인스턴스화가 좀 더 좋다고 한다. 결국에는 테스트 시에 추적이 어렵기 때문에 static을 자주 쓰지 말라는 것이다. 또한 static은 객체 지향적이지 않다고 한다. static 변수는 특히 캡슐화의 원칙에 위배된다고 한다. static이 scope를 고려할 필요없이 global하게 사용될 수 있기 때문에 절..

Java 2021.01.05

[이것이 자바다] 자바 정규표현식 공부 정리

pattern_match package sec10.exam01_pattern_match; import java.util.regex.Pattern; public class PatternExample { public static void main(String[] args) { String regExp = "(02|010)-\\d{3,4}-\\d{4}";// 자바에서는 역슬래쉬가 특정한의미가 있으므로 역슬래쉬가 역슬래쉬임을 알리기 위해 역슬래쉬를 두번 쓴다. String data = "010-123-4567";//사용자가 입력한 데이터라고 가정 boolean result = Pattern.matches(regExp, data); //정규표현식으로 data를 검정한다. if(result) { System.out..

Java 2021.01.05

[Java] 자바 ExecutorService와 Future에 대해서

codechacha.com/ko/java-executors/ Java - ExecutorService를 사용하는 방법 Executors와 ExecutorService를 이용하면 간단히 쓰레드풀을 생성하여 병렬처리를 할 수 있습니다. 어떤 작업들을 병렬로 처리하려면 ExecutorService, SingleThreadExecutor, Future, BlockingQueue를 이용해야 합니다. codechacha.com gunju-ko.github.io/java/2018/07/05/Future.html Java Future Future, CompletableFuture, ListenableFuture Future Future는 비동기 처리 결과를 표현하기 위해서 사용된다. 비동기 처리가 완료되었는지 확인하고..

Java 2021.01.04

[디자인패턴] 헤드퍼스트 디자인패턴 - 스트래티지 패턴

객체지향의 기초에는 추상화 캡슐화 다형성 상속 이 존재한다. 객체지향의 원칙에는 바뀌는 부분은 캡슐화한다. 상속보다는 구성을 활용한다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 가 있다. 객체지향 패턴 중 스트레티지 패턴은 알고리즘군을 정의하고 각각을 캡슐화하여 바꿔 쓸 수 있게 만든다. 스트패티지 패턴을 이용하면 알고리즘을 활용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 교재에서 활용한 예제는 다음과 같다. public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck(){} public abstract void display(); public void performFly() ..

Java 2021.01.04

[Java] 자바 Map 종류와 좋은 블로그

자바 관련 좋은 블로그 소개 https://beomseok95.tistory.com/category/JAVA 자바 Map의 종류에 대해 (Hash, Tree, Linked) 그리고 해쉬테이블까지 https://web-inf.tistory.com/44 https://coding-factory.tistory.com/557 https://velog.io/@adam2/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%ED%95%B4%EC%8B%9C-%ED%85%8C%EC%9D%B4%EB%B8%94 (위의 velog에는 해싱, 그리고 해쉬테이블에 대한 깊은 내용이 나와있다. ) https://wakestand.tistory.com/190 사실 위에 소개된 3개의 블로그 중에서 이 코딩팩토리라는 블..

Java 2021.01.04

[Java] 자바 헷갈리는 내용 - 접근제어자와 final 클래스와 메서드

접근제어자를 별도로 설정하지 않는다면 접근제어자가 없는 변수, 메소드는 default 접근제어자가 되어 해당 패키지 내에서만 접근이 가능하다. 접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다. final 이라는 예약어가 붙은 클래스와 메소드는 상속과 오버라이드가 막히게 된다.

Java 2021.01.04

[Java] 자바8 함수형 인터페이스에 관한 자세한 설명

자바8 함수형 인터페이스에 관한 자세한 설명(상당히 자세하다...) https://beomseok95.tistory.com/277?category=1064782 Functional Interface는 Object 클래스의 메서드를 제외하고 단 하나의 메서드만 가지고 있는 인터페이스를 의미합니다 람다식은 기본적으로 "파라미 터부 -> {몸통부}"의 형태를 띠며 평가 결과로 Functional Interface의 인스턴스를 생성할 수 있습니다, Stream 인터페이스는 람다식과 결합하여 List를 일괄적으로 처리할 수 있도록 도와준다. 대표적인 메서드로 filter, map, forEach 등이 있다. 이 API를 이용하면..

Java 2021.01.04

[Java] Junit과 테스트 주도 개발(TDD) 그리고 리팩토링

Junit 공식 사이트 https://junit.org/junit5/ Junit이란? 자바의 단위 테스트 프레임워크 https://nesoy.github.io/articles/2017-02/JUnit http://www.nextree.co.kr/p11104/ http://junit.sourceforge.net/javadoc/org/junit/Assert.html Junit과 테스트 주도 개발 방법론 (TDD) https://galid1.tistory.com/329?category=763585 https://galid1.tistory.com/783?category=763585 TDD의 개념적 원칙 (FIRST 원칙 ) https://galid1.tistory.com/783?category=763585 TD..

Java 2021.01.04

[Java] 자바 방어적 복사와 불변객체 생성

자바에서 등장하는 방어적 복사와 불변객체 생성에 대한 내용을 알아보도록 하자. 용어가 어렵지만 사실 내용은 그다지 어려운 내용은 아니다. 방어적 복사는 즉 매개변수의 유효성을 검사하기 전에 방어적 복사본을 만들고, 이 복사본으로 유효성을 검사한 점에 주목하자. 순서가 부자연스러워 보이겠지만 반드시 이렇게 작성해야 한다. 멀티스레딩 환경이라면 원본 객체의 유효성을 검사한 후 복사본을 만드는 그 찰나의 취약한 순간에 다른 스레드가 원본 객체를 수정할 위험이 있기 때문이다. 방어적 복사를 매개변수 유효성 검사 전에 수행하면 이런 위험에서 해방될 수 있다. 컴퓨터 보안 커뮤니티에서는 이를 검사시점/사용시점(time of check/time of use) 공격 혹은 영어 표기를 줄여서 TOCTOU 공격이라 한다...

Java 2021.01.04

[Dev] 바이트코드와 바이너리 코드

C언어는 컴파일러에 의해 소스파일(*.c)이 목적파일(*.obj)로 변환될때 바이너리 파일, 즉 0과 1로 이루어진 코드로 변환된다.즉, 컴파일 후에 이미 컴퓨터가 이해할 수 있는 이진코드로 변환되는 것이다. 목적파일은 기본적으로 컴퓨터가 이해할 수 있는 바이너리 코드(이진 코드)의 형태이지만 실행될 수는 없다.  그 이유는 완전한 기계어(CPU에서 사용하는 명령어 집합)이 아니기 때문이다. 변환된 목적파일은 링커에 의해 실행 가능한 실행파일(*.exe)로 변환될 때 함수나 헤더 파일 등의 실제 메모리 주소를 코드에 반영하는 과정에서 일부 주소값이 변경되는데, 이러한 과정을 거쳐야 비로소 컴퓨터가 바로 실행 할 수 있는 100% 기계어가 될 수 있다. 결론적으로 목적파일은 바이너리 코드이지만 컴퓨터가 바..

개발 정보 2021.01.03

[Dev] concrete class?

concrete class 라고 써놓고는 한글로 부르는 말이 너무나도 많다. 구현 클래스, 구상 클래스, 구체 클래스... 근데 사실 별반 차이가 없는 것 같다.  추상클래스가 아닌 클래스를 concrete class 라고 부르기만한다면, 구현되지 않은 추상화된 operation이 없는 클래스라면 모두 concrete class 라고 불러도 되니까 사실 글자만 다를 뿐 별반 차이는 없는 것 같다.   그렇지만, 특정 경우에 따라서 각 단어마다 어색함이 붙긴한다.

개발 정보 2021.01.02

[Dev] 서드파티란?

프로그래밍에서의 서드파티란 프로그래밍을 도와주는 plug_in 이나 library 등을 만드는 회사를 말한다. 개인 개발자나 프로젝트 팀, 혹은 업체등에서 개발하는 라이브러리즉 제 3자 라이브러리 .제작사에서 만든것이 아니라 다른 업체에서 만든 해당 툴 지원 라이브러리 제조사와 사용자 이외 외부의 생산자를 가리키는 뜻으로 쓰인다. - 위키  편하고 효율적인 개발을 위해, 플러그인이나 라이브러리 또는 프레임워크등을 사용하게 된다.예로 프로그래밍 개발과 개발자 사이에 플러그인,라이브러리,프레임워크를 서드파티로 볼 수 있다....이처럼 제 3자로써 중간다리 역할을 하는 것을 서드파티라고 합니다.

개발 정보 2021.01.02

[Java] 객체지향 디자인패턴

dailyheumsi.tistory.com/148?category=855210 [디자인 패턴 1편]. 디자인 패턴 개요 1. 디자인 패턴이란 디자인 패턴은 소프트웨어 공학론 안의 좋은 코드를 설계하기 위한 일종의 설계 디자인 방법론이다. 그렇다면 좋은 코드란 무엇인가? 좋은 코드란, 가독성, 간결함 등 여러 dailyheumsi.tistory.com 1편부터 시작해서 정말 잘 나와있다. SOLID 원칙이라는걸 블로그 돌아다니다가 간간히 보기만 했었는데, 이게 객체지향의 5대원칙이라니... 이런것도 모르고 상속,캡슐화,다형성만 알면 끝이라고 생각했다니... 디자인 패턴이 잘 설명되어 있다. jdm.kr/blog/235 프록시 패턴(Proxy Pattern) :: JDM's ..

Java 2021.01.02
반응형