java/객체지향 프로그래밍 10

Generic 제너릭

제네릭을 사용하지 않는 경우 ArrayList arrayList = new ArrayList(); arrayList.add("fast"); String data = (String)arrayList.get(0); 넣어준 데이터를 꺼내고 싶을때는, 0번째 index를 꺼내올때 그것이 무슨형태인지를 알 수 없으니까 형변환을 하고 꺼내와야한다. 제네릭을 사용하는 경우 ArrayList arrayList = new ArrayList(); arrayList.add("fast"); String data = arrayList.get(0); 미리 값을 지정할 수 있기 때문에 타입의 안정성을 높일수 있고, get할때 따로 형변환을 할 필요가 없다.

call by value

class Updater { public void update(Counter counter) { counter.count++; } } public class Counter { int count = 0; public static void main(String[] args) { Counter myCounter = new Counter(); System.out.println("before update:"+myCounter.count); Updater myUpdater = new Updater(); myUpdater.update(myCounter); System.out.println("after update:"+myCounter.count); } } 이렇게 메소드의 입력으로 객체를 전달받는 경우에는 메소드가 입..

자바 메소드(Method)

보통 다른언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다. 자바는 이 클래스 내의 함수를 메소드라고 부른다. ※ 보통 함수와 메소드가 공존하는 언어(예:파이썬)에서는 두 개를 구분하여 말하기도 하지만 자바는 보통 메소드와 함수를 구분하여 말하지 않는다. 다만 자바에서 사용되는 함수의 정확한 명칭은 메소드이다. 메소드를 사용하는 이유는? 가끔 프로그래밍을 하다 보면 똑같은 내용을 자신이 반복해서 적고 있는 것을 발견할 때가 있다. 이 떄가 바로 메소드가 필요한 떄이다. 여러번 반복해서 사용된다는 것은 언제고 또 다시 사용할 만한 가치가 있는 부분이라는 뜻이다. 즉, 이러한 경우 이것을 한 뭉치로..

자바 인터페이스(interface)

인터페이스란? 서로 다른 장치들이 연결되어서 상호 데이터를 주고받는 규격을 의미한다. 인터페이스는 특히 컴퓨터 주변 장치에 많다. 각자 클래스를 다른 사람의 클래스와 연결하려면 클래스 간의 상호작용을 기술하는 일종의 규격(조건)이 있어야 한다. 그래야만 클래스들이 서로 잘 접속될 것이다. 이러한 규격을 인터페이스(interface)라고 부른다. 인터페이스를 정의 하는것은 클래스를 정의하는 것과 유사하다. 다만 키워드 class를 사용하지 않고 interface를 사용한다. interface Drawable { void draw(); } // Drawable 인터페이스 안에는 draw() 추상 메소드만 정의 되어 있다. 즉 메소드 이름과 매개변수만 존재하고, 몸체가 없으며 세미콜론으로 종료된다. 참고로 인..

자바 실제 객체

실제 객체를 알고 싶다면? 어떤 참조 변수가 가리키는 객체의 실제 타입을 알고 싶으면 instanceof 연산자를 사용한다. 예를 들어서 앞의 도형 예제에서 Shape 참조 변수는 Rectangle, Triangle, Circle 타입의 객체를 모두 가리킬 수 있다. 경우에 따라서는 실제 타입을 알고 싶은 경우가 있다. 이런 경우에 instanceof 연산자를 사용한다. public class ShapeTest{ public static void main (String[] args) { Shape s = new Rectangle(); if ( s instanceof Rectangle ) { System.out.println("실제 객체는 Rectangle 이군요!"); } if ( s instanceof..

자바 상속과 다형성

다형성(polymorphism)은 "많은(poly) + 모양(morph)"이라는 의미로서 주로 프로그래밍 언어에서 하나의 식별자로 다양한 타입(클래스)을 처리하는 것을 의미한다. 즉, 똑같은 명령을 내리지만 객체의 타입이 다르면 서로 다른 결과를 얻을 수 있는 것이 다형성이다. 객체 지향 기법에서 하나의 코드로 다양한 타입의 객체를 처리하는 중요한 기술이다 = 동일한 코드로 다양한 타입의 객체를 처리할 수 있는 기법이다. 상속과 다형성 다형성은 상속을 통하여 구현된다. 예를 들어보자 class Shape { protected int x, y; public void draw() { System.out.println("Shape Draw"); } } // 각 도형들을 2차원 공간에서 도형의 위치를 나타내는 ..

자바 추상클래스

추상클래스란? 완전하게 구현되어 있지 않은 메소드를 가지고 있는 클래스를 의미한다. 메소드가 미완성되어 있으므로 추상 클래스로는 객체를 생성할 수 없다. 주로 상속 계층에서 추상적인 개념을 나타내기 위한 용도로 사용된다. 추상메소드의 예) abstract class Shape{ // 추상클래스 Shape을 선언한다. 추상 클래스로는 객체를 생성할 수 없다. int x, y; public void move(int x, int y){ // 추상클래스라고 하더라도 추상 메소드가 아닌 보통의 메소드를 가질 수 있다. this. x = x; this. y = y; } public abstract void draw(); // 추상 메소드를 선언한다. 추상메소드를 하나라도 가지면 추상클래스가 된다. 추상메소드를 가지..

자바 객체 지향 프로그래밍의 특징

캡슐화란? 코드를 재사용할 수 있는 체재이다. 다른 사람이 작성한 코드를 쓰기 위해서는 코드 자체가 잘 정리되어 있어야만 할 것이다. 즉 관련된 데이터와 알고리즘이 하나의 묶음으로 정리되어 있어야 한다. 캡슐화에는 2가지의 목적이 있다. 첫번째 목적은 서로 관련되어 있는 데이터와 알고리즘을 묶는 것이다. 관련있는 데이터와 알고리즘이 묶여 있으면 사용하기가 매우 편리하다. 두번째 목적은 객체의 내부를 보호하는 것이다. 정보 은닉(information hiding)이라고 한다. 상속이란? 기존의 코드를 재활용하기 위한 기법으로 이미 작성된 클래스(부모 클래스)를 이어받아서 새로운 클래스(자식 클래스)를 생성하는 기법이다. 상속은 기존의 코드를 재사용하는 강력한 기법이다. 다형성이란? 객체가 취하는 동작이 상..

자바 객체 지향 프로그래밍이란?

객체 지향프로그래밍(OOP:object-oriented programming)은 우리가 살고 있는 실제 세계와 비슷하게 소프트웨어도 작성해보자는 방법이다. 예를들면 사람이 리모콘을 이용하여 텔레비전을 조작하는 상황을 생각해본다. 텔레비전과 리모콘은 모두 특정한 기능을 수행하는 객체(object)라고 생각할 수 있고 텔레비전과 리모콘은 메세지를 통하여 서로 상호 작용하고 있다. 객체란? 객체(object)는 그 이름에서 볼 수 있듯이, 객체 지향 기술의 핵심 개념이다. 객체는 상태와 동작을 가지고 있다 ex) Tv 객체는 상태(필드) = 객체안의 변수 동작(메소드) = 객체 안의 함수 채널번호//int channelNo; 켜기//turnOn() 볼륨//int volume; 끄기//turnOff() 전원상태..