본문 바로가기
SMALL

java26

07-3 추상 클래스 먼저, 추상(abstract)라는 단어의 사전적 의미는 실체 간에 공통되는 특성을 추출한 것을 말한다. 예를 들어서, 붕어, 잉어, 배스, 연어, 가자미, 고등어 등은 물고기라는 공통점이 있다. 여기서 물고기는 구체적인 실체라기보다는 실체들의 공통되는 특성을 가지고 있는 추상적인 것이라고 볼 수 있다. 이런 개념을 도입한 것이 추상 클래스이다. 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있으며, 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성(필드, 메소드)을 물려받고, 추가적인 특성을 가질 수 있다. 그렇다면 추상.. 2021. 4. 28.
07-2 타입 변환과 다형성 다형성이란 동일하지만 다양한 객체를 이용해서 다양한 실행 결과가 나오도록 하는 성질을 나타낸다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 사용(장착)하느냐에 따라 주행 성능이 달라질 수 있음을 말할 수 있다. 다형성을 구현하려면 메소드 재정의와 타입 변환이 필요하다. 타입 변환이란 타입을 다른 타입으로 변환하는 행위를 말한다. 기본 타입의 변환은 이미 앞에서 다뤘는데, 클래스도 마찬가지로 타입 변환을 할 수 있다. 클래스의 변환은 상속 관계에 있는 클래스 사이에서 발생하며, 자식은 부모 타입으로 자동 타입 변환이 가능하다. 자동타입변환(promotion)은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다. 자동 타입 변환의 조건은 다음과 같다. 자동 타입 변.. 2021. 3. 9.
07-1 상속 상속(inheritance)은 부모 클래스의 멤버를 자식 클래스에게 물려주는 것을 말한다. 프로그램에서는 부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 한다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다. 현실에서 상속은 부모가 자식을 선택해서 물려주지만, 프로그램에서는 자식이 부모를 선택한다. 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends뒤에 기술한다. class 자식클래스 extends 부모클래스 { //필드 //생성자 //메소드 } 예를 들어, Car클래스를 상속해서 SportsCar클래스를 설계하려면 다음과 같이 작성한다. class Sport.. 2021. 2. 25.
06-6 패키지와 접근 제한자 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야 한다. 이 대 클래스를 체계적으로 관리하지않으면 클래스 간의 관계가 뒤엉켜서 복잡하고 난해한 프로그램이 되어 결국 유지 보수가 어려워 진다. 때문에 자바에서는 패키지(package)를 사용하여 클래스를 체계적으로 관리한다. 패키지의 물리적인 형태는 파일 시스템의 폴더이지만, 폴더 기능만 하는 것이 아니라 클래스의 일부분으로 클래스를 유일하게 만들어주는 식별자 역할을 한다. 즉, 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식한다. 클래스의 전체 이름은 '패키지 이름+클래스 이름'인데 패키지가 상, 하위로 구분되어 있다면 도트(.)를 사용하여 '상위패키지.하위패키지.클래스'로 표현한다. 예를 들어, 다음과 같은 패.. 2021. 2. 23.
06-5 인스턴스 멤버와 정적 멤버 인스턴스 멤버 : 객체마다 가지고 있는 멤버 정적 멤버 : 클래스에 위치시키고 객체들이 공유하는 멤버 인스턴스(instance) 멤버란? 객체(인스턴스)를 생성한 후 사용할 수 있는 필드(인스턴스 필드)와 메소드(인스턴스 메소드) 인스턴스 필드와 메소드는 객체에 소속된 멤버이기 때문에 객체 없이는 사용할 수 없음 ▶ 인스턴스 멤버 선언 //Car클래스에 인스턴스 필드 gas와 인스턴스 메소드 setSpeed() 선언 public class Car{ //필드 int gas; //메소드 void setSpeed(int speed){ ... } } gas필드와 setSpeed() 메소드는 인스턴스 멤버이기 때문에 외부 클래스에서 사용하기 위해서는 Car 객체(인스턴스)를 생성하고 참조 변수로 접근해야 한다. .. 2021. 2. 17.
06-3. 생성자 생성자(Constructor) : new 연산로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당 객체 초기화 : 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것 모든 클래스는 생성자가 반드시 존재함. 생성자를 하나 이상 가질 수 있음. 만약 생성자 선언을 생략했다면 기본 생성자를 생성함 //기본 생성자 [public] class() { } 클래스가 public class로 선언되면 기본 생성자도 public 이지만, public 없이 class로만 선언되면 기본생성자에도 public이 붙지 않음 그림과 같이 기본으로 생성자를 생성하기 때문에 new연산자 뒤에 기본 생성자를 호출해서 객체 생성 가능 생성자가 한개 이상 선언이 된 경우 기본 생성자를 추가하지 않음 //생성자 .. 2021. 2. 8.
LIST