Programming/Java

    [Java] Enum 클래스에 대해 알아보자

    [Java] Enum 클래스에 대해 알아보자

    안녕하세요. 이번 포스팅에서는 enum 클래스에 대해 알아보겠습니다. enum enum은 enumerate를 줄여쓰는 단어로 '열거하다'라는 의미를 갖고 있습니다. JDK1.5 버전부터 기존의 C언어와 C++에서 사용된 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있게 되었습니다. 우리는 프로그래밍을 하다보면 공통적으로 한정된 데이터를 다루는 경우가 많습니다. 예를 들자면 '계절', '태양계 행성', '요일' 등이 있습니다. 이렇게 한정된 데이터는 하나의 열거형으로 묶어주면 편리하게 관리할 수 있습니다. Enum 클래스 선언 방법 클래스 외부에서 선언하는 방법 enum Season { SPRING, SUMMER, FALL, WINTER } 클래스 내부에서 선언하는 방법 pu..

    [Java] 메서드 정적 바인딩과 동적 바인딩

    [Java] 메서드 정적 바인딩과 동적 바인딩

    다음과 같은 소스코드가 있다고 가정하자. class Exam { public void total() { return kor + eng + math; } } class NewExam extends Exam { public void total() { return super.total() + com; } public static void print(Exam exam) { int total = exam.total(); System.out.println(total); } public static void main(String args[]) { print(new Exam(1, 1, 1)); print(new NewExam(1, 1, 1, 1)); } } print 메서드에서 exam.total을 호출하면 Exam,..

    [Java] 참조형식과 호출되는 메서드의 관계

    [Java] 참조형식과 호출되는 메서드의 관계

    아래와 같은 부모, 자식 클래스가 있다고 가정하자. public class Parent { // 생략 } public class Child extends Parents { // 생략 } 그럼 당연히 아래와 같이 부모, 자식 클래스의 각 인스턴스 변수(parent, child)를 생성할 수 있다. public class Main { public static void main(String[] args) { Parent parent = new Parent(); Child child = new Child(); } } 그렇다면 아래와 같이 인스턴스를 생성할 수 있을까? public class Main { public static void main(String[] args) { Parent A = new Child..

    [Java] Log4j에 대해 알아보자

    [Java] Log4j에 대해 알아보자

    Log4j는 Log for Java라는 말로 풀이하여 이름을 지었고 자카르타 프로젝트에서 자바를 위한 프로젝트 중 하나라고 한다. 프로그래밍을 하다보면 오류가 났을 때 많은 시간을 투자하게 된다. 변수의 값을 확인하기 위해 System.out.println을 남발하여 애를 먹은 적도 있다. Log4j는 이러한 시간을 절약해준다. 시간, 오류메시지, 클래스명, 메서드명, 라인수 등 자세한 오류 및 프로세스 흐름을 알려주기 때문이다. Log4j의 구조 Log4j의 구조는 크게 세 가지로 나뉜다. 1. Logger - 로그 파일을 작성하고, Appender에 메시지를 전달하는 기능을 한다. - 로그 레벨을 가지고 있으며, 로그의 출력 여부는 로그문의 레벨과 로거의 레벨을 가지고 결정한다. 2. Appender..

    [JAVA] 날짜와 시간 다루기(java.time)

    [JAVA] 날짜와 시간 다루기(java.time)

    기본적으로 자바에서는 날짜와 시간을 다루기 위해서 java.util.Date와 java.util.Calendar 클래스를 사용했지만, 사용에 불편함이 많아 JDK8 이후부터는 java.time 패키지의 클래스로 많은 부분이 대체되었다. [ 날짜 및 시간 구하기 ] LocalDate, LocalTime, LocalDateTime 가장 기본이 되는 클래스들로 각각 날짜, 시간, 날짜와 시간을 다루는 클래스이다. new 키워드를 통해 직접적인 인스턴스 생성이 불가능하고 static 메서드를 이용하는 방식을 사용한다. now() : 현재 날짜, 시간에 기반하여 인스턴스 생성 of() : 인자로 전달되는 특정 날짜, 시간에 기반한 인스턴스 생성 atTime() : 특정 시간정보에 기반해 LocalDateTime ..

    [JAVA] TCP 통신 소켓 프로그래밍(양방향 통신)

    [JAVA] TCP 통신 소켓 프로그래밍(양방향 통신)

    이전 포스팅인 단방향 소켓 프로그래밍에 이어서 이번 포스팅은 양방향 통신을 주제로 설명해보려고 합니다. 이전 포스팅에서 정리했던 용어들은 알고있다고 가정하에 진행하도록 하겠습니다. [ 양방향 통신 ] 서버 측에서는 ServerSocket을 생성하고 accept() 메서드를 호출함으로써 클라이언트의 접속을 대기한다. 클라이언트 측에서는 서버에 접속을 함으로써 서버와의 통신을 위한 Socket을 생성한다. 마찬가지로 서버 측에서 클라이언트 접속이 이루어지면 해당 클라이언트와 통신 할 수 있는 Socket을 반환받는다. 클라이언트와 서버는 생성된 소켓을 통하여 각각 상대에게 데이터를 내보내기 위한 출력 스트림(OutputStream)과 데이터를 읽어들이기 위한 입력 스트림(InputStream)을 생성한다. ..

    [JAVA] TCP 통신 소켓 프로그래밍(단방향 통신)

    [JAVA] TCP 통신 소켓 프로그래밍(단방향 통신)

    소켓 프로그래밍에 대해 포스팅하기에 앞서 기본적인 용어를 정리해보자. [ 네트워크(Network) ] 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태를 의미 쉽게 말하면, 두 대 이상의 컴퓨터들을 연결하고 서로 통신할 수 있는 것 [ 인터넷(Internet) ] 네트워크를 컴퓨터와 컴퓨터로 구성한 것을 인터넷이라고 한다. [ IP(Internet Protocol) ] 전 세계 수억대의 컴퓨터가 인터넷을 하기 위해서는 서로의 정체를 알 수 있도록 특별한 주소를 부여했는데 이 주소를 IP 주소라고 한다. Internet Protocol의 줄임말로, 인터넷에서 컴퓨터의 위치를 찾아서 데이터를 전송하기 위해 지켜야 할 규약이다. IP는 4개의 숫자로 구성되며 숫자의 크기에 따라 IPv4, IP..

    [JAVA] public class & class 차이

    [JAVA] public class & class 차이

    Program.java 라는 이름을 가진 클래스 파일로 예시를 들어보자. Program.java class Program { } 문제없이 컴파일이 잘 된다. 위 소스 파일에 아래와 같은 클래스를 하나 더 추가해보자. class Program { { class Program2 { } 역시나 문제없이 컴파일이 잘 된다. 그렇다면 아래와 같이 수정을 해보자 class Program { } public class Program2 { } Program2라는 클래스 앞에 public이라는 접근제어자를 붙였더니 이번에는 컴파일 에러가 발생한다. 그럼 아래와 같이 수정을 해보자 public class Program { } class Program2 { } 문제없이 컴파일이 잘 된다. 어떤 차이일까? 위와 같이 컴파일되..

    [JAVA] 생성자(Contructor)에 대해 알아보자

    [JAVA] 생성자(Contructor)에 대해 알아보자

    [ 역할 ] 생성자는 객체를 생성할 때 항상 자동으로 실행되는 것으로 객체를 초기화하기 위해 맨 처음 실행되는 메소드이다. [ 특징 ] class 내 최소 한 개 이상의 생성자가 반드시 존재해야 한다. 사용자가 지정하지 않을 시 컴파일러가 알아서 디폴트(default) 생성자를 만든다. 인스턴스 변수의 초기화가 목적이다. class 이름과 동일한 이름을 가진 메소드이다. 리턴값이 없다. 즉, 반환형이 아니다. [ 사용 방법 ] 클래스명 참조변수 = new 클래명(초기화 변수(여러개 가능)) class User { String userName; String userHometown; int userAge; public User(String userName, String userHometown, int use..