본문 바로가기

자바

getter와 setter, 생성자의 접근 제어자 겟터와 셋터를 사용하는 이유는 중요한 변수에 바로 접근을 하지 못하게 하고 값을 설정함에 있어서 데이터가 올바른지 검증을 해주기 위해서 만든다.객체지향의 캡슐화에 해당하는 부분이라 할 수 있다. 접근제어자를 통해서 이러한 기능을 사용하게 된다. private int number; public int getNumber(){return number;} public void setNumber(int number){// 값을 셋팅해주기전에 검증해줄 코드this.number=number} 만약위에서 작성한 클래스가 상속될 여지가 있다면 protected int number; 작성하여 겟터 셋터를 만들어 주면 될 것이다. 생성자역시 바로 접근하지 못하도록 우회하여 접근하게 만들어 줄 수 있다. class Singl.. 더보기
접근제어자와 제어자 접근제어자 - public / protected / default / private public : 접근 제한이 전혀 없다. protected : 같은 패키지와 다른 패키지의 자손클래스에서 접근 가능 default : 같은 패키지에서만 접근 가능 private : 같은 클래스에서만 접근 가 능 접근제어자의 사용범위클래스 - public,default메서드 - 접근제어 모두 사용 가능멤버변수 - 접근제어자 모두 사용 가능지역변수 - 접근제어자 모두 사용 불가능 제어자 - static / final, abstract, native, transient, synchronized, volatile, strictfp static : 클래스의, 공통적인(멤버변수, 메서드, 초기화블럭)클래스가 실행될 때 메모리에 바로.. 더보기
초기화 블럭 - 변수 선언의 또 다른 방법 class Product{static int count = 0; //클래스 명시적 초기화int serialNo;//인스턴스 명시적 초기화{// 인스턴스 초기화 블럭(객체를 만들때 마다 실행됨)++count;serialNo = count;}// 아래와 같은 선언은 클래스 초기화 블럭(객체를 아무리 많이 만들어도 한번만 실행됨)}static{ } public Product(){} // 생성자} class ProductTest{ public static void main(String[] args) {// 아래와 같이 인스턴스를 생성할 때마다 인스턴스초기화블럭을 실행한다.(여기선 3번 인스턴스화 했으니 3번 실행되었다)Product p1 = new Product();Product p2 = new Product(.. 더보기
클래스멤버(static 메소드)에서는 인스턴스변수나 메서드에 접근할 수 없다. class Test{void instance(){}static void staticMethod(){} //인스턴스 멤버(인스턴스 변수, 인스턴스 메소드를 말함)void instance2(){instance();staticMethod();} //클래스 멤버(클래스 변수,클래스 메소드를 말함)static void staticMethod2(){// instance(); 인스턴스 메소드 접근 불가new Test().instance(); // 접근 하고자 한다면 new를 통해서, 굳이 이렇게 해야한다면 instance()메소드역시 static으로 설정하는 편이 좋으려나?staticMethod();}} 클래스멤버(static 메소드)에서는 인스턴스변수나 메서드에 접근할 수 없다. 더보기
생성자를 이용한 인스턴스의 복사 class Test{String a; // 멤버변수(초기화하지 않아도 기본값으로 자동 설정) Test(){ // 기본 생성자this("hello world"); // this() 메서드로 다른 생성자를 호출할 경우에는 해당 생성자의 가장 첫줄에 작서되어야한다.( Test t(String a)를 호출 )} Test(String a){this.a=a; // 멤버변수에 접근} Test(Test t){ // 생성자를 이용한 인스턴의 복사a=t.a;}} class TestEx{public static void main(String[] args){Test t1 = new Test();Test t2 = new Test(t1); System.out.println(t1.a);System.out.println(t2.a);.. 더보기
여러 개의 값을 리턴하기 class ReturnTest1{public static void main(String[] args){ReturnTest r = new ReturnTest(); int result = r.add(3,5);System.out.println(result); int[] result2 = {0};r.add(3,5,result2);System.out.println(result2[0]);} int add(int a, int b){return a+b;} void add(int a, int b, int[] result){result[0] = a + b;}} 위의 예제의 결과는88이다. 위의 예제에서 맨 아래의 메서드는 리턴값이 없지만 리턴되는 효과를 얻었다.찹조형 매개변수(여기서는 배열)를 이용하여 값을 설정하였기에 .. 더보기
자바 class의 구성 클래스 정의 문법 수식어(접근제어자) class 클래스이름{클래스내용} 클래스 구성 요소 - 클래스의 내용에는 다음과 같은 세가지 요소로 구성된다. //필드private String name;private int birthYear; //생성자public memberInfo(){}public memberInfo(String name,int birthYear){this.name=name;this.birthYear=birthYear;} //메서드public String getName(){return name;}public int getBirthYear(){return birthyear;}public void setBirthYear(int birthYear){this.birthYear = birthYear;} .. 더보기
자바의 THIS 일단 다음의 예제를 보도록하자 private int birthYear; public int getBirthYear(){return birthYear;}public void setBirthYear(int birthYear){this.birthYear = birthYear;} 첫번째 getBirthYear() 메서드는 리턴 타입이 int 이고 birthYear 필드값을 리턴한다. 두번째 setBirthYear() 메서도는 리턴타입이 void이고, 첫 번째 birthYear 파라미터의 값을 birthYear 필드에 할당한다. 두번째 setBirthyear() 메서드의 첫 번째 파라미터 이름과 필드의 이름이 birthYear로 같은데, 이렇게 메서드의 파라미터 이름과 필드의 이름이 같은 경우 메서드 내부에서 필.. 더보기