본문 바로가기

전체 글

(12)
[Java] 11. IO 입출력 IO는 Input과 Output의 약자로 컴퓨터 내외부 장치와 프로그램 간의 데이터를 주고 받는 것을 말한다. 장치와 입출력을 하기위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리할 공통적인 방법으로 스트림을 사용한다. 스트림 입출력 장치에서 데이터를 읽고 쓰기 위해서 자바에서 제공하는 클래스이다. 스트림은 전부 단방향이며 이로인해 동시에 입출력을 수행하려면 2개의 스트림이 필요하다. 바이트 단위를 처리하는 바이트 기반의 최상위 클래스는 InputStream(입력), OutputStream(출력) 문자 단위를 처리하는 문자 기반의 최상위 클래스는 Reader(입력), Writer(출력)이다. File 클래스 파일 시스템의 파일을 표..
[Java] 10. 예외처리 프로그램 오류 프로그램 수행 시 치명적인 상황이 발생해서 비정상적으로 종료가 된 상황을 말한다. 오류의 종류로는 컴파일 에러, 런타임 에러, 시스템 에러가 있고 이 중 컴파일 에러는 소스 상의 문법 에러로 구문을 수정하면 해결할 수 있다. 런타임 에러는 입력 값이 틀렸거나 배열의 인덱스 범위를 벗어난 등 if문으로 처리가 가능하다. 하지만 시스템 에러는 컴퓨터 오작동으로 인한 에러이므로 구문 수정으로는 해결이 불가능하다. 이렇게 다양한 상황에서 소스를 수정하여 해결 가능한 에러를 예외(Exception)라 하는데 이러한 예측 가능한 에러를 처리할 때 예외처리를 사용한다. 예외 클래스 Exception 클래스, Error 클래스 둘 다 Object 클래스의 자손이고 모든 예외의 가장 조상은 Exceptio..
[Java] 9. 다형성 다형성 이전 객체 포스팅에서 다룬 객체 지향 프로그래밍의 3대 특징 중 하나이다. 말 자체는 여러 개의 형태를 갖는다는 의미이고 하나의 행동으로 여러 가지 일을 수행하는 개념이다. 상속을 이용해서 조상으로부터 파생된 여러 가지 타입의 후손 객체를 조상 클래스 타입 하나로 다룰 수 있다. 클래스도 변수처럼 형변환이 가능한데 이를 업/다운 캐스팅이라 한다. 업 캐스팅은 상속 관계에 있는 조상, 후손 클래스 간에 조상타입의 참조형 변수가 모든 후손 타입의 객체 주소를 받을 수 있으며 이 때 후손의 정보는 원래 조상타입이었던 멤버만 참조 가능하다. 다운 캐스팅은 후손 객체의 주소를 받은 조상 참조형 변수를 가지고 후손의 멤버를 참조해야 할 경우 조상 클래스 타입의 참조형 변수를 후손 클래스 타입으로 형 변환하는..
[Java] 8. API String 클래스 String 클래스는 문자열 값 수정이 불가능하다. 때문에 수정을 하게되면 새로 할당이 되고 따라서 주소값이 변한다. StringBuffer 클래스는 String 클래스와 다르게 문자열 값을 수정할 수 있고 기존 문자열에 수정이 적용된다. 기본적으로 16문자 크기로 된 버퍼를 사용하며 이 크기는 더 늘릴 수 있다. 쓰레드 safe 기능을 제공하는데 성능 저하를 유발하므로 기능 사용을 원하지 않는다면 StringBuilder 클래스를 사용한다. StringTokenizer 클래스는 split() 메소드랑 같은 기능을 하는데 전달받은 문자열을 구분자로 나누어 각 토큰에 저장한다. Wrapper 클래스 자바의 8가지 기본형 타입을 객체화 해주는 클래스이다. char, int를 제외하고 기본..
[Java] 7. 상속 상속 이전 포스팅에서 상속에 관한 여러 용어들이 나왔는데 상속에 관해 다뤄보겠다. 상속이란 다른 클래스가 가지고 있는 멤버를 새로 작성할 클래스에서 번거롭게 만들지 않고 상속을 받아 자신의 멤버처럼 사용할 수 있게 하는 기능이다. 상속은 클래스의 재사용과 연관된 클래스들의 공통적인 것을 정의하며 적은 양의 코드로 새로운 클래스를 작성가능하게 하는 장점을 가진다. 또한 코드를 공통적으로 관리해서 코드를 추가로 작성한다던가 변경할 수 있고 코드의 중복이 사라지기 떄문에 프로그램의 생산성과 유지보수에 매우 큰 도움을 준다. 우리가 사용하는 모든 클래스는 전부 Object클래스의 후손이다. 그리고 조상클래스의 생성자는 상속이 안되고 만약 부모 클래스 생성자를 호출하고 싶으면 super()를 사용해야한다. sup..
[Java] 6. 객체 객체 가장 처음 포스팅을 읽어보면 자바는 객체 지향 언어라고 쓰여있다. 도대체 객체 지향 언어란 무엇일까? 우리가 살고 있는 세계는 객체로 이루어져 있다. 스마트폰도 객체고 공기도 객체고 소리도 객체고 모든것이 객체다. 즉 객체는 독립되고 구분되는 각각의 것을 말하고 모든 사건은 이들간의 상호작용으로 이루어진다. 이것을 컴퓨터로 옮겨놓아 만들어낸 것이 바로 객체 지향 언어인 것이다. 그렇다면 자바에서 객체는 어떤식으로 표현이 될까? 자바에서 객체의 생성은 클래스에 적힌대로 new 연산자를 통해 메모리 영역에 할당하는 것을 말한다. 바로 이전 포스팅에 배열을 다룰 때 new 연산자와 Heap메모리 영역 이야기가 나왔는데 배열 할당이 바로 객체를 생성하는 것이었다. 즉, 'new연산자를 이용해 Heap 메모..
[Java] 5. 배열 배열 앞서 배웠듯이 하나의 변수에는 하나의 값만 들어갈 수 있다. 만약 int 자료형에 1, 2, 3, 4, 5를 담고 싶다면 int를 다른 변수명으로 5번 선언하여 값을 집어넣어야했다. 그런데 이런 경우 배열을 사용하면 간단하게 초기화가 가능하다. 배열이란 같은 자료형의 변수를 한 묶음으로 다룰 수 있게 해주는 것으로 저장된 값마다 인덱스 번호가 부여된다. 여기서 인덱스는 zero-based index를 말하는 것으로 사람은 보통 몇 번째를 셀 때에 1번째, 2번째, ... 이런식으로 1부터 셈을 하지만 컴퓨터는 0부터 계산을 한다. 그러니까 우리가 일반적으로 아는 1번째는 컴퓨터에게 0번째이다. 따라서 배열은 인덱스 번호 0부터 시작하여 설정이 된다. 배열의 선언은 자료형[] 배열명; 혹은 자료형 배..
[Java] 4. 제어문 조건문 우리가 지금껏 작성해왔던 코드는 모두 위에서 아래로 흐르는 방식이었다. 제어문은 프로그램 수행 흐름을 기존과 다르게 바꾸는 역할을 한다. 그 중 조건문은 조건에 따라서 다른 문장이 수행 되도록 바꾼다. 조건문에는 if문과 switch문이 있다. switch문은 if문으로 호환이 가능하나 if에서 switch문은 불가능한 경우가 있다. 우선 if문부터 알아보도록 하자. if문의 기본적인 형식은 아래와 같다. ()안에 조건식이 true면 {}안에 내용을 실행하고 false면 실행하지 않게된다. if문 안에 if문을 중첩해서 사용하는 것도 가능하며 else를 사용하여 false일 경우 수행할 문장도 지정해 줄 수 있다. 이 때, else는 그 외의 경우를 전부 포함하기 때문에 따로 조건식이 붙지 않는다..