전체 글 476

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

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

Java lang 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 lang 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 lang 2021.01.04

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

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

Java lang 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 lang 2021.01.02

[Java] 자바 리플렉션 - java Reflection이란?

책에서는 리플렉션을 잘 다루지 않는다. 사실 어느 경우에 사용하는지 아직 감도 안잡힌다. 간단하게 짚고 넘어가자. 대표적으로 스프링, 하이버네이트 등에서 Reflection을 사용한다고 한다. Reflection은 클래스의 구조를 개발자가 확인할 수 있고 값을 가져오거나 메소드를 호출하는데 사용할 수 있다고 한다. Reflection을 확인하기 좋은 예제를 하나 소개하겠다. 아래는 코딩테스트를 준비하면서 사용한 코드이다. 적절한 입력을 받고 이를 처리하는 코드인데 이에 대해서 main의 코드 맨 마지막에서 Reflection을 사용해서 직접 값을 출력해보았다. package 문제풀이.BOJ.문자열.구현; import java.io.BufferedReader; import java.io.InputStrea..

Java lang 2021.01.02

[이것이 자바다] 자바 네트워크2 공부 정리

이번 장은 자바 멀티플렉싱 서버와도 관련이 있다. NIO를 다루기 때문이다. 블로그들을 찾아보다가 NIO에 대해서 아주 잘 설명해주는 사이트들을 찾았다. jongmin92.github.io/2019/03/03/Java/java-nio/ Java NIO와 멀티플렉싱 기반의 다중 접속 서버 자바 NIO에 대한 소개와 NIO와 함께 도입된 자바에서 I/O 멀티플렉싱(multiplexing)을 구현한 selector에 대해 알아봅니다. I/O 멀티플렉싱(multiplexing)에 대한 개념에 대해 아직 잘 이해하지 못하고 있다면 jongmin92.github.io 이 블로그에서 기초적인 내용을 얻어낼 수 있었다. 링크된 사이트들이 몇 있던데, tutorials.jenkov.com/ Jenkov.com Threa..

Java lang 2021.01.01

[이것이 자바다] 자바 NIO 공부 정리

path package sec02.exam01_path; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Iterator; public class PathExample { public static void main(String[] args) { Path path = Paths.get("src/sec02/exam01_path/PathExample.java"); System.out.println("[파일명]"+ path.getFileName()); //파일명 얻기 System.out.println("[부모 디렉토리명]" + path.getParent().getFileName());//getParent하면 부모 디렉토리의 Path..

Java lang 2020.12.30

[이것이 자바다] 자바 네트워크1 공부 정리

이번 장을 공부할 때 예제에 FX가 쓰여서 FX 설치를 해주는데, 좀 문제가 생겨서 꽤나 애를 먹었다. 친구 말로는 버전? 이 차이가 나면 그럴 수 있다는데, 확실한건 그냥 마켓에서 다운받고 재시작하는 걸로는 사용할 수 가 없었다. 그런 증상이 나타나는 사람이 많은 것 같았다. 어느 블로그에 나온대로 하니 실행은 되었지만, 매번 프로젝트를 만들때마다 이렇게 해야 하나? 싶을정도로 귀찮은 과정이었다. 해당블로그는 다음과 같다. we-always-fight-with-code.tistory.com/36 JavaFX 설치와 이클립스 연동 JavaFX를 실행하기 위해서 뭐 이클립스 네온버전을 설치하라 어쩌고 하는데 하...깔기 싫어서 기존에 쓰던 오픈버전으로 세팅했다. 대신 세팅하는데 좀 애먹었다. ㅎㅛㅎ... ..

Java lang 2020.12.27

[이것이 자바다] 자바 IO패키지 공부 정리

inputstream_read package sec02.exam01_inputstream_read; import java.io.FileInputStream; import java.io.InputStream; public class ReadExample1 { public static void main(String[] args) throws Exception{ InputStream is= new FileInputStream("C:/Temp/test.txt"); // 개행 fw.flush(); fw.close(); System.out.println("파일에 저장되었습니다."); } } inputstreamreader package sec05.exam01_inputstreamreader; import java...

Java lang 2020.12.26

[이것이 자바다] 자바 스트림 공부 정리

stream_introduction package sec01.stream_introduction; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Stream; public class IteratorVsStreamExample { public static void main(String[] args) { List list = Arrays.asList("홍길동","신용권","감자바"); //자바 7이전에서 사용한 Iterator 이용하기 Iterator iterator = list.iterator(); while(iterator.hasNext()) { String name = it..

Java lang 2020.12.24

알고리즘 설명해주는 블로그

roka88.dev/98 기본 정렬 알고리즘의 종류와 정리 최종수정일자 : 2020-01-03 이 글은 이미 공부 했었으나, 정렬을 쉽게 정리하지 못하는 사람을 위해 정리하였다. 정렬의 종류도 많으며, 설명하기가 쉽지 않다. 동작은 다양하며, 머리속에 어렴풋이 roka88.dev ict-nroo.tistory.com/category/ICT%20Eng/Algorithm?page=5 'ICT Eng/Algorithm' 카테고리의 글 목록 (5 Page) 주니어 개발자가 성장하는 공간 ict-nroo.tistory.com

[Dev] 함수와 메서드의 차이

사실 똑같은 말인줄로 알고 있었다. 그러다 어느 날 함수와 메서드의 차이점도 모르는 프로그래머는 프로그래머도 아니다. 라는 어느 블로그의 글귀를 보고 난 뒤에야 이 두개가 다르다는 것을 알게 되었다....  함수는 독립적으로 존재하며, 작동하고 나서 사용자가 원하는 결과를 반환한다. 메서드는 클래스에 종속되어 존재하고, 해당 클래스에 대한 인스턴스가 생성되어야 사용할 수 있다.  그러니 독립적으로 존재한다? -> 함수클래스에 종속적이다.-> 메서드 이렇게 이해하자.

개발 정보 2020.12.23

[이것이 자바다] 자바 람다식 공부 정리

no_argument_no_return package sec03.exam01_no_argument_no_return; @FunctionalInterface //메소드가 하나인지 체크함. public interface MyFunctionalInterface { //함수적 인터페이스 -> 람다식으로 표현 가능 . public void method(); } package sec03.exam01_no_argument_no_return; public class MyFunctionalInterfaceExample { public static void main(String[] args) { MyFunctionalInterface fi; fi = () -> { String str = "method call1"; Sys..

Java lang 2020.12.22

[이것이 자바다] 자바 어노테이션 공부 정리

package sec15.exam01_annotation; import java.lang.annotation.*; @Target({ElementType.METHOD}) //적용대상은 메소드이다. @Retention(RetentionPolicy.RUNTIME) public @interface PrintAnnotation { //괄호 열고 닫고를 꼭 붙인다. 메소드는 아니다. String value() default "-"; int number() default 15; } package sec15.exam01_annotation; public class Service { @PrintAnnotation public void method1() { System.out.println("실행 내용1"); } @Pri..

Java lang 2020.12.20

[이것이 자바다] 자바 메모리 공부 정리

package javastudy2; /* Must - know 메소드 영역에는 클래스 코드들이 올라간다. 힙 영역에는 객체가 생성된다. 스택 영역에는 변수들이 생성이 된다. JVM은 OS에서 할당받은 메모리 영역 (Runtime Data Area)을 세 영역으로 구분한다. @메소드 영역 JVM을 시작할 때 생성된다. 로딩된 클래스 바이트 코드 내용을 분석 후 저장한다. 모든 스레드가 공유한다. @힙 영역 JVM을 시작할 때 생성된다. 객체/배열을 저장한다. 사용되지 않는 객체는 GC가 자동으로 제거한다. @JVM스택 스레드별로 생성한다. 메소드를 호출할 때마다 Frame을 스택에 추가한다. (push) 메소드가 종료되면 Frame을 제거한다. (pop) 추가 노트 main스레드가 생성이 됨과 동시에 JV..

Java lang 2020.12.20

[이것이 자바다] 자바 enum 공부 정리

package sec07.exam01_enum; public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } package sec07.exam01_enum; import java.util.Calendar; public class EnumWeekExample { public static void main(String[] args) { Week today = null; Calendar cal = Calendar.getInstance(); //컴퓨터의 현재 날짜를 Calendar객체로 돌려줌. -> (getInstance()) int week = cal.get(Calendar.DAY_OF_WEEK); //오늘의 요일을 돌..

Java lang 2020.12.20

[이것이 자바다] 자바 쓰레드 공부 정리

한빛미디어에서 펴낸 "이것이 자바다" 책에 대한 강의가 유튜브에 올라와있는데, 상당히 친절하게 깊게 설명해준다. 조금 오래되긴 했는데, 그 점과는 별개로 내용이 좋다. 쓰레드 관련 강의부분에 대한 코드와 필기 내용을 올려둔다. 새로 접한 내용이 많아서 재밌다. Create Thread package sec02.exam01_createthread; import java.awt.Toolkit; public class BeepPrintExample1 { public static void main(String[] args) { //비프음을 5번 반복해서 소리나게 하는 작업. Toolkit toolkit = Toolkit.getDefaultToolkit(); for(int i = 0;i

Java lang 2020.12.20
반응형