목록분류 전체보기 (639)
충분히 쌓여가는
객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있다 (예를 들어 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다) 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..
객체를 생성하기 위해 생성자를 어디에서나 호출할 수 있는 것은 아니다 생성자는 public, default, private 접근 제한을 가질 수 있다 public 모든 패키지에서 생성자를 호출할 수 있다 = 모든 패키지에서 객체를 생성할 수 있다 같은 패키지에서만 생성자를 호출할 수 있다 = 같은 패키지에서만 객체를 생성할 수 있다 private 클래스 내부에서만 생성자를 호출할 수 있다 = 클래스 내부에서만 객체를 생성할 수 있다 필드와 메소드도 어디에서나 읽고 호출할 수 있는 것은 아니다 필드와 메소드는 public, default, private 접근 제한을 가질 수 있다 public 모든 패키지에서 필드를 읽고 변경할 수 있다 = 모든 패키지에서 메소드를 호출할 수 있다 같은 패키지에서만 필드를 ..
정적 메소드와 정적 블록은 객체가 없어도 실행된다는 특징 때문에 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다 또한 객체 자신의 참조인 this도 사용할 수 없다 public class ClassName { int field1; void method1() {...} //정적 필드와 메소드 선언 static int field2; static void method2 { ... } //정적 블록 선언 static { field1 = 10; //컴파일 에러 method1(); //컴파일 에러 field2 = 10; method2(); } //정적 메소드 선언 staitc void method3() { this.filed1 = 10; //컴파일 에러 this.method1(); //컴파일 에러 fiel..
정적 필드는 필드 선언과 동시에 초기값을 주는 것이 일반적 static double pi = 3.14159; 하지만 복잡한 초기화 작업이 필요하다면 정적 블록(static block)를 이용해야 한다 static { ... } 정적 블록은 클래스가 메모리로 로딩될 때 자동으로 실행된다 정적 블록이 클래스 내부에 여러 개가 선언되어 있을 경우 선언된 순서대로 실행된다 정적 필드는 객체 생성 없이도 사용할 수 있기 때문에 생성자에서 초기화 작업을 실행하지 않는다(생성자는 객체 생성 후 실행되기 때문) company와 model은 선언 시 초기값을 줌 info는 정적 블록에서 company와 model을 연결하여 초기값을 줌 package ch06.sec10.exam02; public class Televis..