-
(JAVA) 생성자(Constructor) & SetterJAVA/컨셉 , 예제 2018. 8. 24. 13:42
클래스의 객체는 다양한 멤버 필드를 갖고 있을 것이다. 학생의 경우를 예로 들면 이름, 나이, 대학교, 전공 등을 멤버 필드로 둘 수 있다.
public class Student { private String name; private int age; private String uni; private String major; // 다른 클래스에서 private 멤버변수에 무분별한 접근 및 제어 // 방지하기 위해 setter 함수에 특정 조건을 걸도록 함. public void setName(String name){ if(name.length() == 3) this.name = name; } public void setAge(int age){ this.age = age; } public void setUni(String uni){ this.uni = uni; } public void setMajor(String major){ this.major = major; } public void study(){ System.out.printf("%s Studying %s now\n", this.name, this.major); } public void goToUni(){ System.out.printf("%s go to %s university\n", this.name, this.uni); } }Student 클래스 정의
public class StudentMain { public static void main(String[] args) { // TODO Auto-generated method stub Student st = new Student(); st.setName("박민우"); // 이름이 3글자여서 갱신됨 st.setName("민우"); // 이름이 2글자여서 setter 조건 불만족해 갱신되지 않음 st.setUni("Soongsil"); st.study(); st.goToUni(); } }다음과 같이 Student 클래스를 정의하도록 한다.
실행하면 결과는다음과 같이 잘 나온다. setter에 대해 배울 때 이클립스에서 편하게 생성을 할 수 있었다. 거기에는
public void setAge(int age){ this.age = age; }다음과 같은 식으로 멤버 변수의 값을 바로 제어해줬지만 실무에서는
public void setName(String name){ if(name.length() == 3) this.name = name; }다음과 같이 조건을 주는 경우가 많다고 한다. 클래스 외부에서 멤버변수에 대한 무분별한 제어를 어느정도 필터링 하는 역할을 한다고 볼 수 있다.
객체를 선언하고 setter 함수를 사용해서 객체의 멤버 변수를 적절하게 바꿀 수 있지만 멤버 변수가 수십개에 이르는 경우가 많다. 이럴 때는 멤버들에 대해 하나하나 setter 메소드를 수행해야 할까? 상당히 불편한 반복작업이 될 것이다. 이를 해소해 주는 것이 생성자이다.
생성자는 객체 생성시 무조건 호출되어야 하며, setter 함수를 통해 값을 제어하고 싶은 멤버 변수를 파라미터로 넣고, setter와 비슷한 방식으로 값을 제어해준다.
※ 생성자명 : public 클래스명(private params...)
※ 생성자는 객체 생성시 단 한번만 호출됨
한번만 사용할 수 없을뿐더러 setter 함수를 통해 생성자의 역할을 대체 할수 있기 때문에 그 이상 사용할 필요도 없다고 할 수 있겠다.
처음 객체 생성시 값을 설정해야 하는 이유는 멤버 변수에 쓰레기값 (null이나 0 등...)이 들어가는 것을 방지하기 위함이 아닐까 하는 생각을 했다. 값이 없는 객체에 대해 제어할 필요가 없기 때문에.public class Student { private String name; private int age; private String uni; private String major; public Student(String name, int age, String uni, String major){ this.name = name; this.age = age; this.uni = uni; this.major = major; } public void setName(String name){ // 다른 클래스에서 private 멤버변수 무분별한 접근 및 제어 if(name.length() == 3) // 방지하기 위해 특정 조건을 걸도록 함. this.name = name; } public void setAge(int age){ this.age = age; } public void setUni(String uni){ this.uni = uni; } public void setMajor(String major){ this.major = major; } public void study(){ System.out.printf("%s Studying %s now\n", this.name, this.major); } public void goToUni(){ System.out.printf("%s go to %s university\n", this.name, this.uni); } }Student 클래스에 생성자 포함
public class StudentMain { public static void main(String[] args) { // TODO Auto-generated method stub Student st = new Student("박민우", 30, "SoongSil", "Computer Science"); st.study(); st.goToUni(); } }Student 클래스 객체 생성. 생성자 호출을 통해 멤버 변수 setter 함수 사용한 것과 같은 결과.
결과가 잘 나오는 것을 확인할 수 있다.
'JAVA > 컨셉 , 예제' 카테고리의 다른 글
(JAVA) 자바 파일(File) 객체 입력 &출력 관련 메소드 (0) 2018.08.24 (JAVA) 객체지향 프로그래밍 예제 & toString (0) 2018.08.24 (JAVA) 자바 문자열 출력 방법. (0) 2018.08.24 (JAVA) 자바 스캐너(Scanner)로 파일 내용 읽어오기 (0) 2018.08.24 (JAVA) 자바 래퍼(Wrapper) 클래스 (0) 2018.08.24