전체 글 85

15주차 과제: 람다식

15주차 과제: 람다식 람다 표현식(Lambda Expressions) 람다식이란? 식별자 없이 실행가능한 함수 메소드를 하나의 식으로 표현하는 것이라고 볼 수 있다. 람다식으로 표현하면 return 이 없어지므로 람다식을 anonymous function(익명 함수) 이라고도 한다. 람다식의 장단점 장점 코드를 간결하게 만들 수 있다 가독성이 향상된다 멀티쓰레드환경에서 용이하다 함수를 만드는 과정 없이 한번에 처리하기에 생산성이 높아진다 단점 람다로 인한 무명함수는 재사용이 불가능하다 디버깅이 많이 까다롭다 람다를 무분별하게 사용하면 코드가 클린하지 못하다 재귀로 만들 경우 부적합하다 람다식 사용법 (매개변수) -> 표현 바디 (매개변수) -> { 표현 바디 } () -> { 표현 바디 } () -> ..

스터디/LiveStudy 2021.03.01

Java 메모리 최적화가 어떻게 되는지 과정

Java 메모리 최적화가 어떻게 되는지 과정 메모리 최적화 목적 예를들어 아래 예제에서 Penguin객체가 하나가 아닌 Penguin[100]과 같이 요소가 100개인 배열이라고 할 때 힙영역에 생기는 Penguin 객체는 100개가되고 test() 메서드도 각 Penguin 객체에 따라서 힙에 100개가 만들어져야한다. 그렇지만 객체 멤버 메서드는 각 객체별로 달라지는 것이 아니다. 객체 멤버 메서드에서 사용하는 객체 멤버 속성의 값만 다를 뿐이고 똑같은 객체 멤버 메서드인 test() 메서드를 힙 영역에 100개나 만든다는 것은 심각한 메모리 낭비이다. 이를 해결하기 위해 JVM은 지능적으로 객체 멤버 메서드 test()를 스태틱 영역에 단 하나만 보유하게된다. 눈에는 보이지 않지만test() 메서드..

Java/개념 2021.02.25

JVM 동적 클래스 로딩

JVM 동적 클래스 로딩 클래스 로더란 '.class' 바이트 코드를 읽어 들여 class 객체를 생성하는 역할을 담당한다. 즉, 클래스 로더는 클래스가 요청될 때 파일로부터 읽어 메모리로 로딩하는 역할을 하며 자바 가상 머신의 중요한 요소 중 하나다. ※ 클래스 로더가 classpath라는 환경 변수에 등록된 디렉토리에 있는 모든 클래스들을 먼저 JVM에 로딩한다. JVM에 로딩된 클래스만이 JVM에서 객체로 사용할 수 있다. 클래스 로딩은 클래스를 로딩하는 시점 또는 실행 중간에도 할 수 있다. 자바의 클래스 로딩은 세부적으로 로딩, 링크, 초기화라는 세 단계 과정을 거친다. 로딩 : 클래스 파일을 바이트 코드로 읽어 메모리로 가져오는 과정 링크 : 가장 복잡한 과정으로, 읽어본 바이트 코드가 자바 ..

Java/개념 2021.02.24

14주차 과제: 제네릭

14주차 과제: 제네릭 시작하기 전에 제네릭이 무엇이고 제네릭을 왜 사용해야하는지 알아보자 제네릭이란? 데이터 타입(data type)을 일반화(generalize)하는것을 의미한다 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시 type check를 하면 장점이 있다. 클래스나 메소드 내부에서 사용되는 객체의 타입의 안정성을 높일 수 있다. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. Java 5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object타입을 사용했었다. 하지만 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입을 변환해야하고 , 이때 오류가 발생할..

스터디/LiveStudy 2021.02.21

Be-Docs 1주차 L2 스위치 / 라우팅 테이블, 맥 테이블, ARP 테이블 / 랜 통신 프로세스 (서버 - L2 스위치 - 서버) - 조사 자료

사전예습 LAN/WAN 차이, IP, 서브넷 마스크, 사설 대역, 공공 대역 LAN(Local Area Network) 근거리 통신망 빠르다 오류 적다 WAN(Wide Area Network) 광역 통신망 느리다 오류 많다 IP 송신 호스트와 수신호스트가 패킷 교환 네트워크에서 정보를 주고받는 데 사용하는 정보 위주의 규약 이며, OSI 네트워크 계층에서 호스트의 주소 지정과 패킷 분할 및 조립 기능을 담당한다. 서브넷 마스크 IP 주소의 네트워크 부분만 나타나게 하여 같은 네트워크 인지 판별하게 하는 마스크 네트워크 ID와 호스트 ID를 식별하기 위한 값 A 클래스 255.0.0.0 B 클래스 255.255.0.0 C 클래스 255.255.255.0 프리픽스 표기법 서브넷 마스크를 슬래시(/비트수)로 ..

스터디/Be-Docs 2021.02.18

13주차 과제 : I/O

13주차 과제: I/O 목표 자바의 Input과 Output에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 13주차 과제 : I/O I/O란? Input, Output의 약자로 입출력 통칭하는 용어로 I/O라고 부르며 I/O는 JVM을 기준으로 읽을 때에는 Input을 파일로 쓰거나 외부로 전송할 때는 Output이라는 용어를 사용한다. Input과 Output은 JVM의 기준이다 File과 Files 클래스 File클래스 FIle 클래스는 파일 및 ..

스터디/LiveStudy 2021.02.08

Be-Docs 스터디 TDD 발표 후기

Be-Docs 스터디 TDD 발표 후기 스터디 주제 스터디 주제로는 TDD(테스트 주도 개발)이다 도서는 테스트 주도 개발 TDD 실천법과 도구이다 무료 PDF로 공부했다 목차 내가 맡은 8장에서는 실습 위주보다는 필자의 TDD와 짝프로그래밍, 리펙토링 경험위주이고 TDD를 해보자(?) 이런 내용이였다. 아래는 발표 내용 목차이다 발표 후기 8장 TDD에 대한 다양한 시각은 다른 장보다 딱딱하지 않고 하나도 빠짐 없이 유용하고 재미있게 읽었다. TDD의 장단점과 OOP, TDD 유의사항 , 리펙토링의관계, Pair Programming, BDD 등의 내용이였다. 처음으로 스터디에서 발표를 해보았는데 발표준비가 쉽지 않았다. 준비 기간은 2일정도 걸렸다. 발표 시간은 40분가량 발표를 진행하였으며 나름 재..

스터디/Be-Docs 2021.02.01

블랙커피 스터디 2주차 학습 방법에 대한 고민

블랙커피 스터디 2주차 1주차 회고 때 최근 가지고 있는 고민을 털어놓았었다. 나의 고민 나의 고민은 공부하는 학습 방법이다. 학습 방법에 대해 고민을 하고 있다고 회고때 말씀드렸는데 스터디장님께서 학습 방법을 한번 포스팅해보라고 말씀하셔서 올려보려 한다 올해부터 공부하면서 머릿속에 새길 때 "왜?"라는 의문을 가지고 공부해야겠다고 마음을 먹었다. 공부를 하는데도 나중에 잊게 되고 공부를 깊게 하더라도 엉뚱하고 이상하게 깊게 공부하고 있었다. 엉뚱하다고 느낀 건 내가 느낀 적이 없었고 같이 공부하는 주변 분들이 말씀해주셨다. 이번 포스팅은 나의 공부 방식을 포스팅해보겠다. 주제 주제는 @Configuration(proxyBeanMethod)과 REST API를 공부하면서 했던 것을 올려보도록 하겠다. 공..

REST API 정리

REST API API(Application Programming Interface)란 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며 서로 정보를 교환 가능하도록 하는 것이다 REST API란? REpresentaional State Transfer 의 약자이다. WWW과 같은 분산 하이퍼 미디어 시스템을 위한 아키텍처 스타일이며 2000년 Roy Fielding이 논문에서 처음 발표 했다. 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다 REST의 구체적인 개념 HTTP URI(Uniform Resource identifier) 를 통해 자원 (Resources)을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자..

프로젝트/기타 2021.01.31

12주차 과제 : 애노테이션

12주차 과제: 애노테이션 목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 어노테이션 클래스나 메소드 등의 선언시에 @를 사용하는 것을 말한다. 메타데이터(Metadata)라고도 불린다 어노테이션의 사용 컴파일러에게 정보를 알려주거나 컴파일할 때와 설치시의 작업을 지정하거나 실행할 때 별도의 처리가 필요할 때 어노테이션은 클래스, 메소드, 변수 등 모든 요소에 선언할 수 있다 어노테이션 정의하는 방법 어노테이션 선언 예제) import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lan..

스터디/LiveStudy 2021.01.31