티스토리 뷰
JAVA Web#10 Day 10 this키워드 & 접근제한자 & 메소드 응용 ( getter, setter)
copotter 2019. 3. 5. 10:10day10 190304
이번 시간에는 this키워드, 접근제한자, 메소드의 응용(getter, setter, BusinessLogic Object 등..)에 대해서 배웠습니다.
뒤로 갈수록, 여러 클래스들을 합쳐서 사용하게 되서 파일간의 이동이 잦아지게 됩니다.
헷갈리지 않게 많은 복습이 필요할 것 같습니다.
--필드 : 클래스 바로안에 있는 변수(=인스턴스 변수, 멤버 변수)
--지역변수 : 메소드 안에서 선언된 변수
--매개변수 : 메소드에 입력받는 값인 변수
--this : 객체, 자신의 주소 값을 담고 있다.
( 객체의 멤버변수)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Book { int no; String title; String writer; int price; Book() { } Book(int no, String title, String writer, int price) { this.no = no; this.title = title; this.writer = writer; this.price = price; } void displayBookDetail() { String title = "테스트"; System.out.println("번호 : " + no); System.out.println("제목 : " + title); System.out.println("제목 : " + this.title); // 객체의 멤버변수인 title을 사용해서 System.out.println("저자 : " + writer); // 메소드안의 title인 "test"가 아닌 객체의 값이 출력된다. System.out.println("가격 : " + price); } } | cs |
22행과 23행을 보면, 22행에서는 19행에 의하여, "테스트"가 출력되지만, 23행은 this.title이 해당 클래스의 title을 가리키고 있으므로 "테스트"가 아닌 해당 클래스의 객체의 값이 출력된다.
<접근 제한자>
: 필드의 구성요소를 외부에 노출시킬지, 아닐지 제어할 때 사용.
필드, 클래스, 생성자, 메소드에 사용 가능
1. public // 공개
2. proteted // 상속을 배우고 다룸.
3. default // 같은 패키지(폴더) 내 공개
4. private // 비공개
1 2 3 4 5 6 7 8 9 | public class Subject { private int no; // 과목번호 private String name; // 과목명 private String professor; // 담당교수명 public Subject() { // public은 공개 접근 제한자로 사용 가능. // private Subject() { // private을 사용하면, 패키지 내 다른 파일에서 참조 불가능. } | cs |
1 2 3 4 5 | public class Subejct { private int no; private String name; private String professor; } | cs |
1 2 3 4 | public int getNo() { return no; } | cs |
1 2 3 | public String getName() { return name; } | cs |
1 2 3 | public void setNo(int no) { this.no = no; } | cs |
1 2 3 4 5 6 | public class 클래스명 { 필드; 필드; getter/setter 메소드 } | cs |
1 2 3 4 5 6 7 | public class 클래스명Service { //*업무로직 : 실제 회사에서 사용하는 로직 필드 업무로직 메소드 업무로직 메소드 ... } | cs |
위에 객체들을 적용한 세 파일로 이루어진 간단한 프로그램을 예로 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | // 사원 정보를 담는 객체 public class Employee { // 사원번호, 이름, 소속부서명, 급여, 근무연수, 전화번호 // no, name, dept, salary, workingYear, tel // 비공개 필드 정의 private int no; private String name; private String dept; private int salary; private int workingYear; private String tel; // 기본 생성자 public Employee() { // public 붙이기! 기본생성자는 빈 깡통 } // getter메소드 public int getNo() { return no; } public String getName() { return name; } public String getDept() { return dept; } public int getSalary() { return salary; } public int getWorkingYear() { return workingYear; } public String getTel() { return tel; } // setter메소드 public void setNo(int no) { this.no = no; } public void setName(String name) { this.name = name; } public void setDept(String dept) { this.dept = dept; } public void setSalary(int salary) { this.salary = salary; } public void setWorkingYear(int wokringYear) { this.workingYear = workingYear; } public void setTel(String tel) { this.tel = tel; } } | cs |
우선, 사원의 정보를 담는 객체가 있는 Employee클래스 파일입니다.
7~12행에서 필드값들을 private로 감싸서 선언하고, 19~42행은 그 값들을 다른 클래스에서 가져올 수 있는 getter메소드, 44~67행은 그 값들을 저장시킬 수 있는 setter메소드를 만들었습니다. (아직 이클립스를 사용하지 않는데, getter와setter가 자주 쓰여서 단축키로 있다고합니다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | public class EmployeeService { Employee[] database = new Employee[3]; public EmployeeService() { database[0] = new Employee(10, "김유신", "영업1팀", 250, 2, "010-1234-5678"); database[1] = new Employee(20, "강감찬", "기술팀", 350, 3, "010-1111-1111"); database[2] = new Employee(30, "이순신", "인사팀", 300, 2, "010-1234-2222"); } // 모든 사원정보를 출력하는 기능 public void printAllEmployees() { for (Employee e : database) { int no = e.getNo(); String name = e.getName(); String dept = e.getDept(); int salary = e.getSalary(); int workingYear = e.getWorkingYear(); String tel = e.getTel(); System.out.println("사원번호 : " + no); System.out.println("사원이름 : " + name); System.out.println("소속부서 : " + dept); System.out.println("실수령액 : " + salary); System.out.println("근무년수 : " + workingYear); System.out.println("전화번호 : " + tel); System.out.println(); } } // 조회할 사원번호를 전달받아서 그 번호에 해당하는 사원정보를 제공하는 기능 public Employee getEmployee(int empNo) { Employee emp = null; for (Employee e : database) { if (empNo == e.getNo()) { emp = e; break; } } if ( emp == null) { System.out.println("사원번호가 존재하지 않습니다!"); } return emp; } } | cs |
위 파일이 바로, Business Logic 업무로직 메소드를 가진 EmployeeService 클래스 파일입니다. 통상 프로그램의 ~~~Service라는 파일이름을 쓴다고합니다.
10~28행의 기능과 30~44행의 기능의 업무로직을 가진 클래스파일이 되겠습니다.
원래라면, 데이터베이스 파일이 존재하는데 지금 DB를 배우지않아서 2~8행으로 DB데이터를 임의로 만들었습니다.
10행의 모든사원정보를 출력하는 기능은, 12행 database배열을 enhanced for문으로 반복시켜서 변수를 하나 만들어서 getter메소드로 값을 호출하여 저장하고, 20~행으로 출력을 하는 방식이 되겠습니다.
31행의 기능같은 경우에는, 32행의 비어있는 객체를 만들어서 34~38행 과정을 통해서, 입력받은 사원번호와 database배열에 들어있는 사원번호들과 비교를 해서 있을 경우에, 만들어두었던 빈 객체에 채워넣고, 제공하는 것입니다. 40행은 빈 객체가 위 과정후에 그대로 빈 객체라면 비교했을때 일치하는 것이 없다는 뜻이 되므로, 존재하지 않는다는 문구를 출력해봤습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class EmployeeServiceApp { public static void main(String[] args) { EmployeeService service = new EmployeeService(); // 모든 사원정보 출력해보기 service.printAllEmployees(); // 10번 사원 찾기 Employee x = service.getEmployee(10); System.out.println("해당 사원 : " + x.getName()); } } | cs |
위 클래스파일이 업무로직이 있는 EmployeeService클래스파일을 사용할 메인 파일입니다.
4행에서 먼저, 사용하기 위해 EmployeeService클래스의 객체를 생성해주고, 그 파일의 메소드를 이용하여 6~7행, 9~12행을 만들게 됩니다.
실무에서는 위 세가지 파일의 동작원리처럼 여러 클래스 파일을 만들어,
메인 파일에 다른 클래스파일의 메소드만 적어서 사용하는 방식으로 이루어진다고 합니다.
다른 서비스,서비스앱 프로그램들도 첨부파일에 있으니, 주석을 참고해서 복습하시면 되겠습니다.
'Programming > JAVA' 카테고리의 다른 글
JAVA Web#12 Day 12 상속 & 메소드 재정의(@OVerride) (0) | 2019.03.07 |
---|---|
JAVA Web#11 Day 11 상수(static, final) & 패키지 (0) | 2019.03.06 |
JAVA Web#9 Day 9 메소드 오버로딩 & 생성자 (0) | 2019.03.04 |
JAVA Web#8 Day 8 메소드 (0) | 2019.03.04 |
JAVA Web#7 Day 7 자바의 클래스 (0) | 2019.03.03 |
- Total
- Today
- Yesterday
- querybox
- 데이터베이스
- spring
- 스프링
- 강제형변환
- 자바 기초
- jhta
- 자바 독학
- 오라클 문법
- sql
- 태그
- inline element
- 자바 국비
- 브라캣
- 이클립스
- 블록엘리먼트
- Class
- 프레임워크
- API
- html
- 중앙HTA
- 비등가조인
- copotter
- 국비
- h#
- Database
- Oracle
- 인라인엘리먼트
- 자바
- block element
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |