본문 바로가기
728x90

스터디23

[white-ship] 자바 스터디 후기 오늘은 자바 스터디 후기를 작성해보려고 한다. 매번 작성해야지 라는 생각을 하고 있었는데 막상 블로그 글쓰기 버튼을 누르는 건 지금 출근하기 40분 전이다. 이번 스터디는 자기 주도 학습 같은 느낌이 났다. 매주 선장님이 학습 목표를 정해주면 벌 때 처럼 달려들어 자기의 재량 껏 깊게 또는 넓게 학습하여 블로그나 메모장에 정리하여 링크를 제출하는 방식이다. 제출된 몇몇 링크들은 선장님이 확인해 라이브 방송에서 다룬다. 매주 7일이라는 시간이 있었지만 제출 하기 직전 금요일, 토요일에 스터디를 시작했고, 생각보다 다루는 내용이 어려워서 밤을 새운 적도 마감 가까스로 제출한 적도 있었다. 아쉬웠던 점은 다뤘던 주제에 대해서 이야기를 한다면 아직 정확히 안다고 할 수 없다. 좋았던 점은 정확히 안다고 할 순 .. 2021. 4. 13.
15주차 과제: 람다식 목표 자바의 람다식에 대해 학습하세요. 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다란 무엇일까? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만 파라미터 리스트, 바디, 반환형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 익명 보통의 메서드와 달리 이름이 없으므로 익명 이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 받, 반환 형식, 가능한 예외 리스트를 포함한다. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 익명.. 2021. 3. 14.
14주차 과제: 제네릭 목표 자바의 제네릭에 대해 학습하세요. 학습할 것 (필수) 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 제네릭 등장 이전의 자바 코드가 갖는 불편함과 문제점 제네릭이 갖는 의미는 '일반화'이다. 그리고 자바에서 그 일반화의 대상은 자료형이다. 그럼 제네릭이 존재하지 않던 시절의 코드와 제네릭이 존재하는 시절의 코드 비교에서부터 이야기를 시작하겠다. 제네릭 이전의 코드 사과와 오렌지를 담는 상자를 담는 상자를 각각 생성하여 그상자에 사과와 오렌지를 담았다가 꺼내는 과정을 보이는 다음 예제를 관찰하자. public class FruitAndBox { public static void main(String[] args) { AppleBox aBox = n.. 2021. 2. 27.
13주차 과제: I/O 목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 1. 스트림 (Stream) / 버퍼 (Buffer) / 채널 (channel) 기반의 I/O IO (Input Output) 입출력 컴퓨터는 입출력 (IO) 포트라고도 하는 하나 이상의 통신 인터페이스를 통해 외부와 통신한다. 스트림 통신을 균일하게 처리하기 위해 자바에서는 스트림 개념을 사용. 스트림은 한 엔티티가 소스이고 다른 엔티티가 대상이라는 조건을 가진 두 .. 2021. 2. 20.
12주차 과제: 애노테이션 목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 Annotation 읽는 것 부터 햇갈린다. 어노테이션?, 애노테이션?. 애너테이션?, 어너테이션?, 언노테이션?, 아노타션 이 중에 원래발음 애녀 테이션 이다. 애노테이션 주석이라는 기능은 가지고 있지 않지만 뜻을 가지고 있으면서 메타데이터(징표, 마크)를 가지고 있다.. (ex. @Controller, @Deprecated...) 애노테이션 정의 Target 과 Retention 그리고 @interface 를 사용해서 정의는 다음과 같이 할 수 있다. @Target({ElementType.TYPE}) @Retention(RetentionPo.. 2021. 2. 6.
11주차 과제: Enum 목표 자바의 열거형에 대해 학습하세요. 학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum 정의하는 방법 enum은 enum : 열거형이라고 불리며, 서로 연관된 상수들의 집합이라고 불린다. 예를들어 어떤 상태의 값들을 상수로 관리할 때 Enum 으로 관리하면 좋다. private String state; // 제출 전 = "wait" , 제출 후 = "completed" 다음과 같이 문자열로 상태값을 정의해놓으면 제출 전을 표시 할때 wait을 알기가 어렵다. 또는 대문자로 했는지 소문자로 했는지 앞글자만 대문자인지 헷갈릴 가능성이 높다. 따라서 이것은 변하지 않는 상수값으로 상태값들을 정의 해놓.. 2021. 1. 30.
10주차 과제: 멀티쓰레드 프로그래밍 목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 쓰레드 쓰레드는 실행 중인 프로그램 내에서 '또 다른 실행의 흐름을 형성하는 주체'를 의미한다. 예를 들어서 다음과 같이 프로그램을 실행하면 가상머신은 하나의 쓰레드를 생성해서 main 메소드의 실행을 담당하게 한다. public class CurrentThreadName { public static void main(String[] args) { Thread ct = Thread.currentThread(); String name = ct.getName(); // 쓰레드의 이름 변환 System.out.println(na.. 2021. 1. 23.
9주차 과제: 예외 처리 목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 자바가 제공하는 예외 계층 구조 예외(Exception)와 에러(Error) 비슷한 말 같지만 차이점이 있다. 에러는 그림에서 보이는 것 과 같이 ThreadDeath 쓰레드가 죽어버렸다거나 VirtualMachineError JVM이 작동을 안한다거나 개발자가 만든 코드 안에서 오작동이 난 것이 아닌 그 밖에 영역에 문제이다. 따라서 대비할 수 있는 방법이 많지 않다. 예외는 발생하더라도 개발자.. 2021. 1. 16.
8주자 과제: 인터페이스 목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 위키백과에서 인터페이스는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 자바 라는 객체지향 언어에서는 상속을 통한 다형성은 조상클래스의 프로퍼티와 기능을 확장 시킨 것이라면, 인터페이스의 다형성은 두 시스템 에서 상호작용 할 수 있는 접점부분에서 규약을 만듬으로써 보다 다양한 상호작용을 하는 것이다. 자바에서는 이런 규.. 2021. 1. 8.
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 1. JVM이란 무엇인가 프로그래밍 언어는 OS에 따른 제약을 받을 수 있다. 쉽게 예를 들면, IOS - Swift 를 들 수 있다. 하지만 JVM(Java Virtual Machine) 의 대표적인 특징은 java 확장자 파일, 프로그래밍 언어를 OS에 제약에서 해방 시켜 준다. ​ ​ 2. 컴파일 하는 방법 먼저, 컴파일이란 OS 가 읽을 수 있는 바이너리(binary) 코드로 만드는 것이다. javac (Java Compiler)를 통해서 Java 언어를 즉 .. 2021. 1. 2.
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 1. 프리미티브 타입과 레퍼런스 타입 프로그래밍 언어에서 사용되는 데이터들은 타입을 통해서 어떤 데이터 종류인지를 알 수 있다. 크게 메모리에 직접 데이터를 가지고 있는 프리미티브 타입(int, float, boolean 등이 이에 속한다.)과 데이터를 가지고 있는 곳을 가르키는 주소를 가지고 있는 레퍼런스 타입(클래스, 인터페이스, 배열, 열거 타입이 이에 속한다.)으로 나뉜다. ​ .. 2021. 1. 2.
3주차 과제: 연산자 목표 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 마감일시 2020년 11월 28일 오후 3시까지. 0. 연산관련 용어 연산: 수나 식을 일정한 규칙에 따라 계산하는 것이다. 연산자: 연산을 수행하는 기호 피연산자: 연산에 참여하는 변수나 상수 1. 자바 연산자와 연산자 우선 순위 연산기호 결합 방향 우선순위 [ ], . -> 1 expr++, expr-- 5 , >>> -> 6 , =, instanceof -> 7 ==, != -> 8 & -> 9 ^ -> 10 ! -> 11 .. 2021. 1. 2.
4주차 과제: 제어문 목표 자바가 제공하는 제어문을 학습하세요. *제어문: 실행 순서를 변경시키거나 또는 조건에 따라 실행해야 할 명령문을 제어하는 데 사용하는 명령문. 학습할 것 (필수) 선택문 반복문 1. 선택문 if else 우리가 어떤 데이터를 상황에 따라서 선택해서 각각 다른 실행을 해야 할 상황이 올 수 있다. 그때 if 문을 주로 사용한다. // 최초의 조건 if (조건) { 실행문 } // if 의 또다른 조건 else if (조건) { 실행문 } // if의 나머지 상황 else { 실행문 } 예를 들어, 남자이고 20살이 넘으면 소주를 보내주고 남자이고 20살 보다 적고 12살 보다 많으면 우유를 보내주고 그리고 남자가 아닐경우에는 콜라를 보내주는 코드를 짜보면 다음과 같이 코드를 만들 수 있다. Perso.. 2021. 1. 2.
4주차 과제: live-study 대시 보드 다음을 만족 시키는 코드를 작성하시오. 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것. 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것. ​ 제출 코드는 다음을 통해서 자세히 볼 수 있다. doyoung0205/github-api Contribute to doyoung0205/github-api development by creating an account on GitHub. github.com ​ ​ 준비물 먼저, 깃허브 이슈를 코드로 접근하려면 관련 dependency 와 깃허브 접근 수단이 있어야 한다. GitHub API for Java – What is this? This library defines an object or.. 2021. 1. 2.
4주차 과제 LinkedList 목차 LinkedList에 대해 정수를 저장하는 ListNode 클래스를 구현 ListNode add(ListNode head, ListNode nodeToAdd, int position)를 구현 ListNode remove(ListNode head, int positionToRemove)를 구현 boolean contains(ListNode head, ListNode nodeTocheck)를 구현 LinkedList에 대해 LinkedList 는 각 노드가 데이터와 다음노드를 가르키는 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조이다. ​ 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당한다. Node는 LinkedList에 객체를 추가하거나 .. 2021. 1. 2.
4주차 과제: Stack 스택 (Stack) 에 대하여 사전적 의미로 "쌓다", "더미" 라는 뜻이다. 바구니에 물건을 하나씩 쌓아 둔다 로 생각하면 편하다. 위의 이미지를 보면 처음 들어간 물건이 나중에 나온다. 후입선출로 스택은 LIFO 구조이다. 예를 들어, 인터넷 뒤로가기 앞으로가기가 있다. ​ ​ Stack을 구현하세요. int 배열을 사용해서 정수를 저장하는 Stack을 구현 public class Stack { private int size = 5; // 스택의 용량 private int[] valeus; // 스택에 저장된 값들 private int topIndex; // 스택의 포인터 //stack 생성자 public Stack() { this.topIndex = 0; valeus = new int[size]; .. 2021. 1. 2.
4주차 과제: Queue Queue를 구현 먼저 집어 넣은 데이터가 먼저 나오는 FIFO (First In First Out) 자료구조이다. ​ 구현하는 방법은 배열과 LinkedList 두가지 가 있다.​ 1. 배열 public class Queue { private int[] values; public Queue() { } public Queue(int[] values) { this.values = values; } //인큐 : 데이터 삽입 public void enQueue(int data) { //맨 처음 들어오는 데이터에 대한 처리 if (values == null) { values = new int[1]; values[0] = data; return; } //정수 배열의 크기를 늘려준 뒤 마지막에 데이터를 넣어준다.(.. 2021. 1. 2.
5주차 과제: 클래스 목표 자바의 Class에 대해 학습하세요. 학습할 것 (필수) 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 마감일시 2020년 12월 19일 토요일 오후 1시까지. 메소드 정의하는 방법 가장 유명한 메소드는 다음과 같다. public static void main(String[] args) { } 이름은 main 이고 메소드가 실행되면 중괄호 안에 있는 내용이 순차적으로 실행된다. ​ public static void main(String[] args) { String myName = "doyoung"; System.out.println(myName); } // 실행결과 // doyoung 메소드는 왜 이렇게 생긴 .. 2021. 1. 1.
5주차 과제: BinaryTree 이론 BinaryTree(이진트리) 가 무엇인가?​ 이진트리는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료 구조로, 자식 노드를 각각 왼쪽 자식 노드와 오른쪽 노드 자식 노드라고 한다. 그림에서 보면 다음과 같은 규칙을 가지고 있다. 이진트리는 항상 두개의 자식 노드를 가지고 있다. 모든 원소는 중복된 값을 가져서는 안된다. 왼쪽 서브트리에 존재하는 노드들의 값은 그 트리의 루트 값보다 반드시 작다. 오른쪽 서브트리에 존재하는 노드들의 값은 그 트리의 루트 값보다 반드시 크다. 이진트리의 종류 모든 레벨의 노드가 꽉 차있는 이진트리 ​ ​완전 이진 트리 (무조건 왼쪽부터 차곡차곡 채워진 형태) ​이진트리의 삽입 예시 ​ 그렇다면 이진트리를 왜 사용할까? 이진트리(Binary search tree.. 2021. 1. 1.
7주차 과제: 패키지 목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 마감일시 2021년 1월 2일 토요일 오후 1시까지. Package 목적 어떤 상품들을 묶어서 용도나 목족에 맞춰서 분리 한 것을 의미한다. e.g 제주도 여행 패키지, 베트남 여행 패키지 제주도와 베트남 여행 패키지 안에는 비행기표 라는 같은 이름을 가진 내용물이 있다. 이 비행기표는 하나는 제주도 하나는 베트남 을 가는 다른 비행기표이다. 비행기표라는 이름 만 들었을 때는 목적지를 쉽게 알수 없기 때문에, 제주도 여행 패키지 안에 있는 비행기표 이렇게 표현할 수 있는 것이다. Package 의미 예를 들어, ArrayList 라는.. 2021. 1. 1.
728x90