접근제한자접근 제한자는 pulbic, procted, default, private와 같이 네 가지 종류가 있다. 이중에서 protected는 상속과 관련이 있다. public < protected < default < private 접근 제한이 강화 접근 제한 적용할 내용 접근할 수 없는 클래스 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스 defalut 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스 private 필드, 생성자, 메소드 모든 외부 클래스 protected는 public과 default 접근 제한의 중간쯤에 해당한다. 같은 패키지에서는 default와 같이 접근 제한이 없지만 다른..
패키지(package)패키지란, 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다. 지금까지는 단순히 클래스 이름으로만 클래스를 구분 했지만 클래스의 실제 이름(full name)은 패키지명을 포함한 것이다. 예를 들면 String클래스의 패키지명을 포함한 이름은 java.lang.String이다. 즉, java.lang패키지에 속한 String클래스라는 의미이다. 그래서 같은 이름의 클래스 일..
예외 처리 코드프로그램에서 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다. 자바 컴파일러는 소스 파일을 컴파일할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 오류를 발생시켜 개발자로 하여금 강제적으로 예외 처리 코드를 작성하도록 요구한다. 그러나 실행 예외는 컴파일러가 체크해주지 않기 떄문에 예외 처리 코드를 개발자의 경험을 바탕으로 작성해야 한다. 예외 처리 코드는 try-catch-finally 블록을 이용한다. try-catch-finally 블록은 생성자 내부와 메소드 내부에서 작성되어 일반 예외와 실행 예외가 발생할 경우 예외 처리를 할 수 있도록 해준다. try-catch-finally 블록 작성..
프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 경ㄹ과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생시점에 따라 컴파일 에러(compile-time error)와 런타임 에러(runtime error)로 나눌 수 있는데 컴파일 시에 발생하는 에러는 컴파일 할 때 발생하는 에러이고 프로그램의 실행도중에 발생하는 에러를 런타임 에러라고 한다. 이 외에도 논리적 에러(logical error)가 있는데, 컴파일도 잘되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 말한다. 자바 에러(Error)와 예외(Exception) 자바에서는 실행 시 발생할 수 있는 프로그램 오류를 에러와 예이 두 가지로 구분하였다. 컴퓨터 하드웨어..
스트림과 채널의 차이충분히 큰 버퍼의 사용은 네트워크 프로그램의 성능에 가장 큰 영향을 미치는 부분이다. 그래서 스트림을 항상 버퍼링할 것을 권장했다. 버퍼는 버퍼링 스트림에서와 같이 단순한 바이트 배열로도 표현될 수 있다. 프로그래밍 관점에서 스트림과 채널의 가장 큰 차이점은 채녈은 블록 기반인 데 반해 스트림은 바이트 기반이다. 스트림은 순서대로 한 바이트씩 제공하도록 설계하였다. 단지 성능을 위해 바이트 배열을 전달할 수는 있지만, 기본 개념은 한 번에 1바이트 데이터를 전달하는 것이다. 반면에 채널은 버퍼 안에 있는 데이터의 블록을 전달한다. 바이트는 채널에서 읽고 쓰기 전에 먼저 버퍼에 저장되어야 한다. 그리고 데이터는 한 번에 하나의 버퍼씩 읽고 쓴다. 스트림과 채널/버퍼의 두 번째 큰 차이점..
NIO(Nonblock Input/Output) 개요 일반적으로 네트워크의 속도는 컴퓨터의 CPU, 메모리, 심지어 디스크의 속도와 비교해도 매우 느리다. 이러한 상황에서 나오는 현상중 상대적으로 느린 네트워크를 엄청나게 빠른 CPU가 기다리는 것이다. CPU가 느린 네트워크를 기다리지 않고 네트워크보다 앞서 달리게 하기 위한 전통적인 자바의 해결 방안은 버퍼링과 멀티스레드를 결합하는 것이다. 다수의 스레드가 동시에 다수의 서로 다른 연결을 통해 보낼 데이터를 생성한다. 그리고 네트워크가 데이터를 보낼 준비가 될 때까지 해당 데이터들을 버퍼에 저장해 둔다. 그러나 멀티 스레드를 생성할 때 드는 오버헤드와 스레드 전환 시 발생하는 오버헤드를 무시할 수 없다. 그리고 각각의 스레드는 약 1메가 바이트의 메모..
자바 Date, SimpleDateFormat, Calendar API 1234567891011121314151617181920212223242526272829303132333435363738394041//Date클래스는 현재 날짜를 가져온다. 기준은 내컴퓨터 TimeZoneDate now = new Date();System.out.println(now); //SimpleDateFormat클래스는 Date 객체를 자기가 원하는 형식으로 바꿀수있다.SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분");System.out.println(sdf.format(now)); SimpleDateFormat sdfYear = new SimpleDat..
추상화(abstract) 정의추상화는 모델링이다. 추상화란 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합하는 것이라고 정리할 수 있다. 1. object(명사)- 물건, 물체 2. 개체(명사)- 전체나 집단에 상대하여 하나하나의 낱개를 이르느는 말 3. 객체- 세상에 존재하는 유일무이한 사물 4. 클래스- 분류, 집합. 같은 속성과 기능을 가진 객체를 총칭하는 개념 클래스 : 객체 = 펭귄 : 뽀로로 = 사람 : 김연아 = 쥐 : 미키마우스 세상에 존재하는 유일무이한 객체를 특성(속성 + 기능)에 따라 분류해 보니 객체를 통칭할 수 있는 집합적 개념, 즉 클래스(분류)가 나오게 된다. 객체는 유일무이(Unique)한 사물이다.클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념이..
객체지향은 인간 지향이다. 절차적/구조적 프로그래밍까지의 과정은 인간이 기계를 이해하려는 노력에서 크게 벗어나지 못했다. 특히 포인터의 개념은 기계 수준으로 눈높이를 낮추지 않으면 이해하기 매우 힘든 부분이다. 기존의 구주적 프로그래밍 언어에서 가장 중요한 것은 "함수" 였다. 함수는 코드를 논리적인 단위로 구분하고 분할해서 정복하자는 것이다. 즉 D&C(Divide and Conquer) 논리적인 단위로 나누어 블록화해서 작성하자는 것이다. 이런 논리적인 단위의 블록을 함수라고 한다. 우주 만물은 객체들의 합이다. 눈으로 보여지는 것, 손으로 만져지는 것, 머리속으로 상상되는 모든 것은 사물이다. 사물을 객체 라고 하고 영어로 Object라고 한다. 우리가 주변에서 사물을 인지하는 방식대로 프로그래밍을..
인터페이스의 역할인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 가장 큰 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서 이다. 인터페이스 구조1[public] interface 인터페이스명 {....}cs 클래스는 필드, 생성자, 메소드를 구성 멤버로 가지는데 비해, 인터페이스는 상수와 메소드만을 구성 멤버로 가진다. 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다. 1234567891011121314interface 인터페이스명 { // 상수 타입 상수명 = 값 // 추상 메소드 타입 메소드명(매개변수,,) // 디폴트 메소드 default 타입 메소드명(매개변수,...) {} // 정적 메소드 static 타입 메소드명(매개변수,..
배열 이용하지 않고 달력 출력 1234567891011121314151617181920212223242526272829303132333435//Calendar 객체 생성(추상클래스 이기 때문에 getInstance로 객체를 생성한다.)Calendar cal = Calendar.getInstance(); // 1~12 월 for(int month=0; month