다형성 다형성은 같은 타입이지만, 실행 결과를 다양한 객체에서서 이용할 수 있는 성질을 뜻한다.다형성은 객체 지향 프로그래밍에서 굉장히 중요한 성질 중 하나이다.자바에서는 다형성을 보장하기 위해 타입 변환을 허용한다. 타입 변환 타입 변환은 총 두가지가 존재한다.자동 타입 변환(Promotion), 강제 타입 변환 (Casting) 1. 자동 타입 변환(Promotion) 자동 타입 변환은 말그대로 프로그램 실행 도중 자동적으로 타입이 변환되는 것을 말한다.자동 타입 변환은 보통 부모 타입에 자식 객체가 대입되는 것을 뜻한다.자식은 부모의 특징과 기능을 상속 받았기 때문에 동일 취급 될 수 있다는 것이 자동 타입 변환의 개념이다. 자동타입 변환해도 오버라이딩 된 메소드 호출 // promotion.met..
final 클래스와 메소드 앞에서 포스팅했던 final 필드에 대한 설명을 기억하는가?final필드는 초기값이 저장되면 프로그램 실행 도중 수정이 불가능하여 변화되지 않을 필드를 보통 final필드로 선언한다고 설명했을 것이다. 클래스와 메소드도 마찬가지로 final로 선언될 수 있다.final 키워드를 붙인 클래스는 최종적인 클래스가 되고, final 키워드를 붙인 메소드는 최종적인 메소드가 된다.즉, final 클래스는 부모클래스가 될 수 없어 자식 클래스를 가질 수 없으며, final 메소드는 자식클래스에서 오버라이딩 할 수 없다. 예를 들어, final class ClassName{ } ClassName 클래스는 부모 클래스가 될 수 없다. Parent.javapublic class Parent{..
상속(Inheritance) 일상생활에서 상속은 부모가 자식에게 무언가를 물려주는 행위를 말한다.객체 지향 프로그램에서도 그 의미는 같다.객체 지향 프로그램에서는 부모클래스가 자식클래스에게 멤버(필드, 메소드)들을 물려주는 것을 뜻한다. 상속을 사용하게 되면, 부모클래스에 있는 필드와 메소드를 자식클래스에 똑같이 쓸 필요가없다.그러므로, 중복된 코드 방지하고, 개발 시간을 줄여준다. 상속에는 몇가지 주의할 점이 있다.자바는 다중 상속을 허용하지 않으므로, 단 하나의 부모 클래스만 상속할 수 있다.부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속대상에서 제외된다.부모클래스와 자식클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외된다. 클..
Getter와 Setter 객체 지향 프로그래밍에서는 객체의 무결성을 보장한다.즉, 객체의 데이터를 외부에서 직접적으로 접근하여 마음대로 읽고 변경할 수 없다는 것이다.외부에서 데이터에 접근하려면 메소드를 통해야만 한다.이러한 역할을 하는 메소드가 Setter이다.Setter 메소드의 이름은 'set + 필드이름'으로 쓰는 것이 관례이다. Setter는 매개값을 검증해서 유효한 값만을 데이터로 저장하는 역할을 한다.예를 들어, 사람의 키를 데이터로 저장하는 객체가 있다고 가정하자.그러나, 사용자가 데이터에 실수로 음수값을 입력했다.그렇다면 객체의 무결성은 깨지게 된다. 그러므로, 우리는 Setter를 다음과 같이 코딩할 수 있다. public void setHeight(double height){ if(..
final 필드 필드값은 프로그램 실행 시, 자주 수정되곤 했다.하지만, final필드는 초기값이 저장되면 프로그램 실행 도중 수정이 불가능하다.즉, 변화되지 않을 필드를 보통 final 필드로 선언한다. final 필드의 초기화 방법은 두가지이다. 1. 필드 선언시, 초기화 final String nation = "Korea";final int Value = 0; 2. 생성자에서 초기화 생성자에서는 final 필드의 초기화를 마쳐야 한다.만약 초기화되지 않는 final 필드를 그대로 남겨두면 컴파일 에러가 발생한다. final String nation; //생성자public Person (String nation) { this.nation = nation; } 상수 (static final) 일상생활에..
접근제한자(Access Modifier) 접근제한자는 특정 데이터를 보호하기 위한 목적으로 사용되어, 클래스, 필드, 생성자, 메소드에서 사용된다.접근제한자는 클래스, 필드, 생성자, 메소드앞에 붙이는 방법으로 사용가능하며, 총 4가지가 있다. - public, protected, default, private 접근 제한자 사용 예시 public int value = 100;protected void method() { ... }default class Class() { ... } 1. public public 접근 제한자의 적용 대상은 클래스, 필드, 생성자, 메소드이다.public은 접근 제한자 중 가장 개방적인 제한자이다.모든 패키지에서 아무런 제한 없이 호출 가능하다. 클래스가 default 접근..
싱글톤(Singleton) 단 하나의 객체만 생성되어있는것을 우리는 싱글톤이라고 한다.싱글톤은 외부에서 마구잡이로 필드값을 바꾸는 것을 방지하기 위해 주로 사용한다. 그 목적 달성을 위해서는 클래스 외부에서 new 연산자를 사용하여 생성자를 호출하는 것을 막아야한다.또한, 자신의 타입인 정적 필드 선언과 자신의 객체를 생성하여 초기화하는 과정을 거쳐야만 한다.정적 필드에는 private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하게 막아야만 한다.외부에서 객체를 얻을때는 정적 메소드인 getInstance()로 접근하여 객체를 리턴받아야만한다.(접근제한자는 다음 포스팅에서 자세히 설명하겠다.) 다음은 싱글톤을 만드는 코드이다. public class 클래스{ private static 클래스 si..
정적(Static) 멤버 정적 멤버는 클래스에 고정된 멤버이다.객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 각각 정적 필드와 정적 메소드라고 부른다. 정적 멤버 선언public class 클래스{ //정적 필드static 타입 필드 //정적 메소드static 리턴 타입 메소드 (매개변수) { ... } } 정적 필드와 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다.클래스의 로딩이 끝나면 바로 사용할 수 있다.그 후, 정적 멤버는 클래스 이름과 함께 도트( . ) 연산자로 접근 가능하다. 클래스.필드;클래스.메소드(매개값); 정적 필드는 다음과 같이 필드 선언과 동시에 초기값을 주는 것이 보통인데,계산이 필요한 초기화 ..
1. 필드 사용 필드를 사용한다는 것은 필드값을 읽고, 변경하는 작업을 뜻한다.외부에서 필드를 사용할 떄는 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다.필드는 객체에 소속된 데이터이기 때문에 객체가 존재하지 않으면, 필드도 존재하지 않기 때문이다. 외부에서 필드를 사용할 때는 필드가 소속된 클래스를 우선 생성한 뒤, 클래스명.필드명 으로 필드를 사용할 수 있다.( . 은 도트 연산자를 뜻한다. 객체 참조시 자주 사용된다. ) 필드 사용 예시 Building.javapublic class Building{ String address = "경기도";String company = "삼성";int height = 300;int room = 200;int year = 1998; int initializat..
클래스의 구조 클래스는 필드(Field), 메소드(Method), 생성자(Constructor)로 이루어져있다.이 구성 멤버들은 생략과 복수개의 작성이 가능하다. 현 포스팅에서는 클래스의 구성 멤버들에 대한 대략적인 소개만을 담겠다.구성 멤버들의 사용 및 오버로딩에 관한 내용은 따로 포스팅 하겠다. 클래스의 구조public class ClassName{ //필드int fileldName; //생성자ClassName(){ //생성자 내용 부분} //메소드void methodName(){ //메소드 내용 부분 }} 1. 필드(Field) 필드란 객체의 고유 데이터, 부품 객체, 상태정보를 저장하는 공간이다.예를 들어, 빌딩 클래스를 설계 할 때, 고유 데이터, 상태, 부품들은 모두 필드로 선언할 수 있다.다..