Web/Java

    [Java] Enum

    enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet Enum 열거형(enum)은 서로 관련된 상수를 편리하게 선언하기 위해 JDK1.5부터 새로 추가되었습니다. Enum 정의하는 방법 enum 열거형이름 다음에 괄호{}안에 상수의 이름을 나열하면 됩니다. enum 열거형이름 { 상수명1, 상수명2, ... } 예시) 동서남북 4방향 열거형 enum Direction { EAST, SOUTH, WEST, NORTH } Enum 비교방법 '==' 사용 가능 '>' '

    [Java] 애노테이션

    애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했습니다. 그래서 소스코드의 주석 '/** ~ */'에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램인 javadoc.exe 를 만들어 사용했습니다. 아래는 모든 애노테이션의 조상은 Annotation 인터페이스의 실제 소스코드의 일부입니다. '/**'로 시작하는 주석 안에 소스코드에 대한 설명들이 있고, 그 안에 '@'이 붙은 태그들이 보입니다. 미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe가 이 ..

    [Java] 멀티쓰레드 프로그래밍

    학습할 것 Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread 클래스와 Runnable 인터페이스 쓰레드를 생성하는 방식에는 두가지가 있습니다. Thread 클래스 상속 Runnable 인터페이스 구현 Thread 클래스 상속 class MyThread extends Thread { public void run() {} } Runnable 인터페이스 구현 class MyThread implements Runnable { public void run() {} } 차이점 다음의 코드를 통해서 두 방식의 차이점을 알아보겠습니다. package javastudy.ch10; public class ThreadEx1 { public static..

    [Java] 예외

    예외처리 프로그램 오류는 발생시점에 따라 3가지로 나눌 수 있습니다. 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 에러가 발생하면, 프로그램의 비정상적인 종료를 막을 길이 없지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 놓음으로써 프로그램의 비정상적인 종료를 막을 수 있습니다. Exception과 Error의 차이 에러는 일단 발생하면 복구할 수 없는 심각한 오류(메모리부족, 스택오버플로우 등)이고 예외는 발생하더라도 수습할 수 있는 비교적 덜 심각한 것 에러가 발생하면 프로그램은 비정상적인 종료를 하지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 ..

    [Java] 인터페이스

    학습할 것 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스의 정의 interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수 목록); } 인터페이스 멤버의 제약사항 - 모든 멤버변수는 public static final이어야 하며, 이를 생략할 수 있다. - 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다. 단, static 메서드와 디폴트 메서드는 예외 예시) ..

    [Java] brew로 자바 특정버전 설치하고 적용하기

    brew로 최신 Java를 설치하려면 아래와 같이 치면 됩니다. $ brew install --cask java 하지만 여러 이유로 최신버전이 아닌 다른 특정버전을 설치해야할 경우가 있습니다. 자바 특정버전 설치방법 brew 업데이트. brew를 쓰기전에 항상 업데이트먼저 하시는 것을 추천드립니다. $ brew update 원하는 jdk버전 적용해서 설치 $ brew install --cask adoptopenjdk8 설치완료 환경변수 설정 새로운 버전의 jdk를 설치했음에도 java -version을 해보면 원래 쓰던 jdk 버전이 나옵니다. 이 이유는 클래스패스 (환경변수) 설정이 되어있지 않기 때문입니다. 저는 zsh를 사용하기 때문에 .zshrc에 Path를 적어주겠습니다. (bash를 사용하시는..

    [Java] 패키지

    Pakage 패키지란, 클래스의 묶음입니다. 패키지에 클래스나 인터페이스들을 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있습니다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 다른 개발자가 개발한 클래스와 자신의 클래스의 이름이 충돌하는 것을 피할 수 있습니다. 클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리입니다. 사실 클래스의 이름은 패키지까지 포함한 이름입니다. 그래서 String 클래스의 실제 이름은 java.lang.String 입니다. 패키지 특징 (주의사항) 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다. 모든 클래스는 반..

    [Java] HashSet과 HashMap에서 equals 오버라이딩시 hashCode도 재정의 해주어야 하는 이유

    자바의 최상위 클래스인 Object 클래스에는 equals과 hashCode 메서드가 있습니다. Object 클래스에 대한 설명은 아래링크의 글에서 맨 아랫부분을 참고하세염 2021.07.13 - [Web/Java] - [Java] 상속 [Java] 상속 학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 자바 상속의 특징 상속 상속이란, 기존의 ksabs.tistory.com Object의 equals는 객체의 주소를 비교하여 같은 객체인지 확인합니다. 그렇다면, 만약에 이름과 나이가 같다면 "같다"고 인식해줘야 하는 객체 Person이 있다고 생각해봅시다. p..

    [Java] 상속

    학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 자바 상속의 특징 상속 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것입니다. 구현방법 자바에서 상속을 구현하는 방법은 간단합니다. 새로 작성하고자 하는 클래스의 이름뒤에 상속받고자 하는 클래스의 이름을 'extends'와 함께 써주면 됩니다. class Chiled extends Parent { // ... } 이 두 클래스는 상속관계에 있다고 하며, 상속해주는 클래스 (Parent) 를 부모(parent)클래스 상위(super)클래스 기반(base)클래스 라고 합니다. 상속 받는 클래스 (C..

    [Java] Node와 BinaryTree 구현

    목차 (클릭시 해당 목차로 이동) 과제 int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요. int value, Node left, right를 가지고 있어야 합니다. BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요. DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요. Node.class package javastudy.ch5.assignment; public class Node { private int value; private Node left; private Node right; public Node() { this.left = null; this.right = null; ..