JAVA: 282개의 글
파일I/O 개요 1. 입출력이란?입출력이란 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다.예를 들면 키보드로부터 데이터를 입력받는다든가 System.out.println()을 이용해서 화면에 출력한다던가 하는 것이 가장 기본적인 입출력의 예이다. 2. 스트림자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림이라 한다.스트림은 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다.스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고 받는다. 큐와 같은 FIFO(First In First Out)구조..
제네릭 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 즉, 클래스 내부에서 사용할 데이터 타입을 나중에 인스턴스를 생성할 때 확정하는 것을 제네릭이라 한다.객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.ArrayList와 같은 컬렉션 클래스는 다양한 종류의 객체를 담을 수 있긴 하지만 보통 한 종류의 객체를 담는 경우가 더 많다. 그런데도 꺼낼 때 마다 타입체크를 하고 형변환을 하는 것은 아무래도 불편할 수 밖에 없다. 위의 그림은 아래의 코드를 간략화한 것이다. class Person{ public T info;// p1 일시 데이터 타입은 String이된다.(인스턴스 생성시 String ..
컬렉션 프레임워크 인터페이스 특 징 List순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.--> 데이터를 add하면 앞에서 부터 순차적(순서대로)으로 데이터가 들어간다. 그래서 각각의 저장되어 있는 공간들은 고유한 index를 갖는다. ex.) 대기자 명단구현 클래스: ArrayList, LinkedList, Stack, Vector등 Set순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.--> 집합이다. 데이터가 순서와는 상관없이 add된다. 중복되지 않는다.ex.) 양의 정수 집합, 소수의 집합구현 클래스: HashSet, TreeSet등 Map키와 값의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값을 중복을 허용한다.ex.) 우..
staticstatic이라는 의미는 ‘정적인, 움직이지 않는다.’는 뜻이다. 메모리에서 고정되기 때문에 붙은 이름이지만, 실제 소스에서 static을 사용한다는 의미는 모든 객체가 ‘공유’한다는 의미이다.cf.) 객체지향이라는 패러다임이란 데이터와 기능(로직, 메소드)을 가진 객체들의 커뮤니케이션으로 어떤 작업을 완료하는 것을 의미한다. cf.) 객체마다 데이터를 가져도 불편한 때도 있다예를 들어 여러분이 어떤 쇼핑몰을 운영한다고 가정해보자. 여러분의 시스템에서 발생하는 매출 현황은 비단 여러분뿐 아니라 여러분의 회사의 모든 직원이 알아야 한다.이 비유는 객체지향 프로그래밍에서도 마찬가지로 적용할 수 있다.1 모든 객체가 동일한 데이터를 참고해야 할 필요가 있다.2 모든 객체는 데이터에 영향을 줄 수 있..
클래스 메서드와 인스턴스 메서드 클래스메서드도 클래스변수처럼, 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 식으로 호출이 가능하다.클래스는 데이터(변수)와 데이터에 관련된 메서드의 집합이라고 할 수 있다. 같은 클래스 내에 있는 메서드와 멤버변수는 아주 밀접한 관계가 있다.인스턴스메서드는 인스턴스변수와 관련된 작업을 하는, 즉, 메서드의 작업을 수행하는데 인스턴스변수를 필요로 하는 메서드이다. 그래서 인스턴스변수는 인스턴스(객체)를 생성해야만 만들어지므로 인스턴스변수를 사용하는 인스턴스메서드 역시 인스턴스를 생성해야만 호출할 수 있는 것이다. 반면에 메서드 중에서 인스턴스와 관계없는(인스턴스변수나 인스턴스메서드를 사용하지 않는) 메서드를 클래스메서드로 정의한다.cf.) 멤버변수는 인..
클래스멤버와 인스턴스멤버간의 참조와 호출 같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출이 가능하다. 단, 클래스멤버가 인스턴스멤버를 참조 또는 호출하고자 하는 경우에는 인스턴스를 생성해야 한다.그 이유는 인스턴스멤버가 존재하는 시점에 클래스멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에 인스턴스멤버가 존재할 수도 있고 존재하지 않을 수도 있기 때문이다. class TestClass{void instanceMethod(){} //인스턴스 메서드static void staticMethod(){} // static 메서드void instanceMethod2(){ //인스턴스 메서드instanceMethod();//다른 인스턴스메서드를 호출한다.staticMeth..
변수의 종류 변수의 종류 선언위치 생성시기 클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때 인스턴스 변수 클래스 영역 인스턴스가 생성되었을 때 지역 변수클래스 영역 이외의 블럭(메서드, 생성자, 초기화 블럭 내부) 변수 선언문이 수행되었을 때 1. 인스턴스 변수클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 그렇기 때문에 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다.인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우, 인스턴스변수로 선언한다. 2. 클래스 변수클래스 변수를 선언하는 방법은 인스턴스 변수 앞에 static을 붙이기만 하면 된다. 인스턴스마다 독립적인 저장공간..
abstract 1. 추상화란추상[抽象]: 낱낱의 구체적 표상이나 개념에서 공통된 성질을 뽑아 이를 일반적인 개념으로 파악하는 정신 작용즉. 프로그래밍에서는 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상클래스를 만드는 것이다.추상화를 구체화와 반대되는 의미로 이해하면 보다 쉽게 이해할 수 있다. 상속계층도를 따라 내려갈수록 클래스는 점점 기능이 추가되어 구체와의 정도가 심해지며, 상속 계층도를 따라 올라갈수록 클래스는 추상화의 정도가 심해진다고 할 수 있다.즉, 상속계층도를 따라 갈수록 세분화되며, 올라갈수록 공통요소만 남게 된다.추상화: 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업구체화: 상속을 통해 클래스를 구현, 확장하는 작업 2. 추상클래스클래스를 설계도에 비유한다면 추상클래스는 미..
인터페이스의 이해 1. 인터페이스의 이해 서두먼저 인터페이스를 이해하기 위해서는 다음의 두 가지 사항을 반드시 염두에 두고 있어야 한다.1) 클래스를 사용하는 쪽(User)과 클래스를 제공하는 쪽(Provider)이 있다.2) 메서드를 사용(호출)하는 쪽(User)에서는 사용하려는 메서드(Provider)의 선언부만 알면 된다. (내용은 몰라도 된다.) class A{public void method( B b){b.method();}} class B {public void methodB(){System.out.println("methodB()");}} class InterfaceTest{public static void main(String args[]){A a = new A();a.methodA(new..
형변환 형 변환(Type Conversion)이란 데이터의 타입을 변경하는 것이다. 예를 들어 int 타입의 정수 200의 bit 값은 아래와 같다.00000000 00000000 00000000 11001000프로그래밍을 처음 시작하는 사람도 컴퓨터는 모든 정보가 0과 1로 만들어진다는 이야기를 들어봤을 것이다. 여러분이 200이라는 숫자를 입력하면 컴퓨터에는 위와 같이 0과 1로 이루어진 조합으로 저장된다. 바로 이 0과 1을 bit라고 부른다. 위의 데이터는 8X4개의 자릿수로 이루어져 있다. 이것을 32bit라고 부른다. 위의 데이터는 int 형으로 숫자 200을 저장했을 때 메모리상에 만들어지는 내용이다. 그럼 실수형인 float 타입으로 정수 200.0을 저장하면 어떻게 될까? 사람에게는 똑같..