본문 바로가기

전체 글

(117)
메소드 재정의(오버라이딩 Overriding) 부모 클래스의 모든 메소드가 자식 클래스에 맞게 설계되어 있다면 가장 이상적인 상속이지만, 어떤 메소드는 자식 클래스가 사용하기에 적합하지 않을 수도 있습니다. 이 경우 상속된 일부 메소드는 자식 클래스에서 다시 수정하여 사용해야 합니다. 자바는 이런 경우를 대비하여 메소드 재정의 기능의 제공합니다. 재정의 방법 1. 부모의 메소드와 동일한 선언부(리턴 타입, 메소드 이름, 매개 변수 목록)를 가져야 합니다. 2. 접근 제한을 더 강하게 재정의할 수 없습니다.(예를 들어 public에서 private으로 변경 불가) 그러나 반대로 접근 제한을 약화시키는 것은 가능합니다.(예를 들어 default에서 protected으로) 3. 새로운 예외를 throws할 수 없습니다. 메소드가 재정의되면 부모 객체의 메..
상속과 super(); + this() 클래스 이름 뒤에 'extends + 상속받을 클래스명'을 적어줌으로써 가능합니다. 상속은 1개만 가능합니다. 상속받은 자식 객체를 생성하면 그 객체의 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성됩니다. 그렇다면 부모 객체는 어떻게 생성되는 것일까요? 바로 자식 생성자의 맨 첫줄에서 호출됩니다. 만일 자식 클래스의 생성자가 명시적으로 선언되지 않았다면 컴파일러는 다으과 같은 기본 생성자를 생성합니다. public Child() { super(); } super();는 부모의 기본 생성자를 호출합니다. 그러나 부모 클래스에 기본 생성자가 존재하지 않고 매개 변수가 필요한 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값, ...)을 명시적으로 호출해야 합니다. s..
java 이클립스 단축키 모음 1. import문 자동 추가 기능 이클립스에는 개발자가 import문을 작성하지 않아도 사용된 클래스를 조사해서 필요한 import문을 자동으로 추가하는 기능이 있습니다. 현재 작성 중인 클래스에서 [Source] - [Organize imports] 메뉴를 선택하거나 단축키 ctr + shift + o를 누릅니다. 2. + 이클립스는 부모 메소드 중 하나를 선택해서 재정의 메소드를 자동 생성해주는 기능이 있습니다. 이 기능은 부모 메소드의 선언부(시그니처)를 정확히 모를 경우 매우 유용하게 사용할 수 있습니다. 1. 자식 클래스에서 재정의 메소드를 작성할 위치로 입력 커서를 옮깁니다. 2. [Source] - [Override/Implement Methods] 메뉴를 선택합니다. 3. 부모 클래스에서..
Getter와 Setter 메소드 1. Setter 일반적으로 객체지향 프로그래밍에서는 객체의 필드를 객체 외부에서 접근하지 못하도록 막습니다. 그 이유는 외부에서 마음대로 필드를 변경할 경우 객체의 무결성이 손상되기 때문입니다. 이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해 필드를 변경하는 방법을 선호합니다. 필드는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도합니다. 그 이유는 메소드는 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있기 때문입니다. 이러한 역할을 하는 메소드가 Setter입니다. 2. Getter 외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는 것이 좋습니다. 필드 값을 가공하여 사용해야 하는 경우가 많기 때문입니다. 이런 경우..
싱글톤(singleton)이란? 프로그램 전체에서 단 하나의 객체만 만들도록 보장해야 하는 경우, 단 하나만 생성되는 객체를 싱글톤이라고 합니다. 싱글톤은 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 하므로 앞에 private 접근 제한자를 붙여줍니다. 그리고 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화 합니다. 정적 필드에도 private 접근 제한자를 붙여서 외부에서 필드값을 변경하지 못하도록 막습니다. 대신 외부에서 호출할 수 있는 정적 메소드인 getInstance()를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해 줍니다. 싱글톤 객체 코드 이를 통해 메인 메소드에서 getInstance()를 통해 객체를 생성하면, 모두 싱글톤 객체 안에서 이미 만들어진 하나의 객체만을 가리..