목록이것이 자바다 (108)
충분히 쌓여가는
현실에서 부모 없는 자식이 있을 수 없듯이 자바에서도 자식 객체를 생성하면 부모 객체가 먼저 생성된 다음에 자식 객체가 생성된다 모든 객체는 생성자를 호출해야 한다 부모 객체도 예외는 아니다, 그렇다면 부모 객체의 생성자는 어디서 호출된 것일까? 부모 생성자는 자식 생성자의 맨 첫 줄에 숨겨져 있는 super()에 의해 호출된다 //자식 생성자 선언 pulbic 자식 클래스(...) { super(); ... } super()은 컴파일 과정에서 자동 추가되는데, 부모의 기본 생성자를 호출한다 만약 부모 클래스에 기본 생성자가 없다면 자식 생성자 선언에서 컴파일 에러가 발생한다 !부모 클래스에 기본 생성자가 없고 매개변수를 갖는 생성자만 있다면 super(매개값, ...) 코드를 직접 넣어야 한다 //자식..
다른 언어와 달리 자바는 다중 상속을 허용하지 않는다 여러 개의 부모 클래스를 상속할 수 없다, 따라서 extends 뒤에는 단 하나의 부모 클래스만 와야한다 잘못된 예 public class 자식 클래스 extends 부모클래스1, 부모클래스2 { } 정상 예 public class 자식 클래스 extends 부모클래스1 { }
애플리케이션 전체에서 단 한개의 객체만 생성해서 사용하고 싶다면 싱글톤 Singleton 패턴을 적용할 수 있다 싱글톤 패턴의 핵심 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것 private 클래스() {} 생성자를 호출할 수 없으니 외부에서 마음대로 객체를 생성하는 것이 불가능해진다 대신 싱글톤 패턴일 제공하는 정적 메소드를 통해 간접적으로 객체를 얻을 수 있다 public class 클래스 { //private 접근 권한을 갖는 정적 필드 선언과 초기화 private static 클래스 singleton = new 클래스(); //1 //private 접근 권한을 갖는 생성자 선언 private 클래스() {} //public 접근 권한을 갖는 정..
객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있다 (예를 들어 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다) Car mycar = new Car(); myCar.speed = -100; 이러한 문제점 때문에 객체 지향 프로그래밍에서는 직접적인 외부에서 필드 접근을 막고 대신 메소드를 통해 필드에 접근하는 것을 선호한다 -> 메소드는 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문 이 역할을 하는 메소드가 Setter이다 private double speed; public void setSpeed(double speed) { if(speed < 0) { this.speed = 0; } else { this.spee..