본문 바로가기

Java

(11)
객체지향 프로그래밍(2) - 추상클래스와 인터페이스 추상 클래스 - 미완성 설계도 일반 클래스와 동일하나, 미완성 메서드가 포함된 클래스 abstract class absClass{ //추상 클래스 abstract void absMethod(); //추상 메서드 } 클래스들 간 공통적으로 사용되는 부분을 뽑아 추상클래스로 작성하여, 상속받아 사용할 수 있다. abstract class Player { // 추상 메서드를 가진 클래스 abstract // 속성 : 인스턴스 변수 선언 가능 boolean pause; // 일시정지 상태를 저장하기 위한 변수 int currentPos; // 현재 Play 되고 있는 위치 저장하기 위한 변수 // 추상클래스도 생성자 필요! Player() { pause = false; currentPos = 0; } abstr..
객체지향 프로그래밍(2) - 다형성 다형성 개념은 클래스와 인터페이스를 활용함에 있어서 가장 중요한 핵심 개념이므로 자세히 알아두어야할 필요가 있다. 다형성(polymorphism) 이란? 여러 가지 형태를 가질 수 있는 능력을 말한다. Java에서는 조상 타입의 참조 변수로 자손타입의 객체를 다루는 것을 말한다. Tv ctv = new CaptionTv(); // 부모 클래스의 타입 = 인스턴스 타입 부모 타입의 참조변수로 자손타입의 객체를 담아 사용하면 어떤 차이가 발생할까? 사용할 수 있는 멤버의 갯수가 제한되게 된다. 상속의 개념을 토대로 설명할 수 있다. 자손 클래스는 부모 클래스를 담아 이전보다 확장된 범위를 가지게 된다. 부모의 멤버
객체지향 프로그래밍(2) - 접근 제어자 제어자(modifier) 란? 클래스, 변수, 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 하나의 대상에 여러 제어자를 같이 사용 가능하다. (접근 제어자 제외) 순서는 상관 없으나, 주로 접근 제어자를 제일 왼쪽에 선언한다. public static void main(String[] args) {} 일반 제어자 static - 클래스의, 공통적인 메서드, 멤버변수, 초기화 블럭에 사용이 가능하다. 클래스 관련의 것들은 static 제어자를 붙인다. final - 마지막의, 변경될 수 없는 클래스, 메서드, 멤버변수, 지역변수에 사용이 가능하다. 생성자를 이용하여 final 멤버변수를 초기화할 수 있다. abstract - 추상의, 미완성의 접근 제어자(access modifier) 접근 ..
객체지향 프로그래밍(2) - 오버라이딩(Overriding) 오버라이딩(Overriding) 조상 클래스로부터 상속받은 메서드의 내용을 변경하여 사용하는 것. class Point{ int x; int y; String getLocation(){ return "x :" + x + ", y :" + y; } } class Point3D extends Point{ int z; String getLocation(){ // 오버라이딩 //return "x :" + x + ", y :" + y + ", z :" + z; return super.getLocation() + ", z :" + z; } } 위의 예제처럼, 부모 클래스의 메서드를 자손 클래스에서 자신에 맞게 변경하여 사용할 수 있다. 오버라이딩을 사용하기 위한 조건은 다음과 같다. 오버라이딩의 조건 1. 조상의 ..
객체지향 프로그래밍(2) - 클래스 간의 관계 설정 클래스 간의 관계를 설정하는 것에는 두 가지 방법이 있다. 첫 번째는 상속 관계를 맺어주는 것이고, 두 번째는 포함 관계를 맺어주는 것이다. 상속(Inheritance) 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. class Child extends Parent{ ... } 조상 클래스 - 상속해주는 클래스 자손 클래스 - 상속 받는 클래스 자손 클래스는 조상 클래스의 모든 멤버를 상속받는다. 따라서, 자손 클래스는 조상 클래스보다 같거나 많은 멤버를 갖는다. (부모 클래스의 생성자와 초기화 블럭은 상속되지 않는다.) 이러한 점에서 상속을 받는 것은 조상 클래스를 확장한다는 의미로 해석할 수 있으며, 상속에 사용되는 키워드가 'extends' 인 이유이다. 여러 가지의 클래스를 상속받아 사용..
객체지향 프로그래밍(1) - 변수의 초기화 int i = 0; 변수의 초기화 변수를 선언하고, 처음으로 값을 저장하는 것 변수의 선언 위치에 따라서, 규칙이 상이하다. 멤버 변수(클래스 변수와 인스턴스 변수)의 경우, 변수 선언만 해도 자동적으로 해당 변수 타입의 기본형 값이 저장된다. 지역 변수의 경우 자동으로 초기화되지 않으므로, 변수 값을 초기화해주지 않을 경우, 컴파일 에러가 발생한다. 멤버 변수의 초기화 방법 1. 명시적 초기화 2. 생성자 3. 초기화 블럭 - 명시적 초기화 int door = 4; // 기본형 변수의 초기화 Engine e = new Engine(); // 참조형 변수의 초기화 변수를 선언과 동시에 초기화 하는 것. 가장 기본적이면서 간단한 초기화 방법이다. - 생성자 class Car{ String color; St..
객체지향 프로그래밍(1) - 생성자(Constructor) 생성자(Constructor) 인스턴스 생성 시, 호출되는 '인스턴스 초기화 메서드' 생성자는 오버로딩의 대표적인 예로, 생성자 오버로딩이라 불리기도 한다. Car c = new Car(); Car c = new Car("white","auto",4); 인스턴스 생성 단계는 다음과 같다. 연산자 new에 의해서 메모리(heap 영역)에 Car 클래스의 인스턴스 생성. 생성자 Car()가 호출되어 인스턴스 초기화. 생성된 Car 인스턴스의 주소가 참조변수 c에 저장. 기본 생성자가 아닌 매개변수가 있는 생성자를 정의하고, 호출하여 인스턴스 내 변수의 값을 원하는 대로 초기화 할 수도 있다. 생성자의 특징은 생성자의 이름이 클래스명과 같아야하며, 리턴 값이 따로 없다는 것이다. 보통은 리턴 값이 없을 때 메..
객체지향 프로그래밍(1) - 오버로딩(Overloading) 오버로딩(Overloading) 오버로딩의 단어 뜻은 다음과 같다. Overloading - 많이 싣는 것. 단어의 뜻으로 알 수 있듯이 같은 물체를 이용해서 많은 것들을 쌓아 올리는 것이다. 오버로딩이란, 하나의 메서드 이름으로 여러 기능을 구현하는 것이다. 오버로딩의 조건 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야한다. 오버로딩이 성립되기 위해선, 당연하게도 같은 메서드 이름을 사용해야한다. 그리고 무언가 차별점을 두기 위해서 매개변수의 개수 또는 타입이 달라야한다. 다만, 메서드의 수행 결과로 반환되는 값의 타입(리턴 타입)은 상관 없다. 오버로딩의 예 - println 메서드 void println() void println(boolean x) void printl..