Confusing things:
개념화된 데이터를 사용하는것
코드의 집중화 및 재사용
- 집중화 : 함수를 생성한 곳만 수정하면 호출한 부분에서는 자동으로 업데이트 된다. (print()메소드를 Program 클래스에서 한번만 적고, 수정하면 호출했던 main클래스의 내역도 자동으로 반영된다. (코드를 줄일 수있다)
- 재사용: 다양한 프로그램개발에 따른 코드 재사용이 가능하다. 로또 프로그램을 콘솔,웹,앱 등에 맞게 다시 만들 필요없이 Lotto class를 통해 재사용을 할 수있다. (첫번째 사진의 오른쪽)
데이터입력과 출력의 분리. 클래스분리
데이터를 만들어내는 부분은 재사용이 가능
lotto = Lotto.gen(); Lotto클래스의 gen()함수를 불러와서 lotto에 대입.
성을 붙여서 부르듯이 Lotto.get()로 불러줘야한다.
같은울타리(같은 클래스)에있는 메소드는 메소드이름만으로 호출가능
실행코드 재사용
새로운 프로젝트 생성 -> Program 클래스생성
함수를 재사용한다는 두가지로 볼 수 있다.
1. 소스코드 재사용 : 소스코드가 모두 오픈되어야 한다.
2. 실행코드 재사용 :컴파일된 결과물을 재사용.(바이너리코드
자바 실행파일 재사용/ jar파일 생성/ 외부 jar파일 추가하기
(소스코드를 컴파일한 결과물.class을 압축하고 재사용 할 예정)
jar파일을 libraries에 반영하면 lotto = Lotto.get();하면 정상반영된다.
만약 에러가 뜬다면 기존 jar파일의 메소드가 public으로 설정되어있는지 확인한다.
gen(), sort()를 직접만들지않고, 컴파일된 압축파일을 이용해 출력이 가능하다.
불러온 gen(), sort()메소드는 소스코드를 확인할 수없다.
구조체 / class 생성 / 데이터를 묶어서 관리
추가 문제점이 발생한다. int[] 정수배열이 lotto인가 ?
기본형식을 가지는것보다 데이터는 개념화된 데이터가 코드안에 묻어나야한다.
ex, 학생,주문,사원,발주 등 정수배열, 문자배열이겠지만 단위를 묶어서 의미가있는 단위로 쓰는게 바람직하다. (유지보수에도 이점)
Lotto lotto ; 로 자료형을 정의한다.
더큰 단위의 개념적인 것을 정의해서 써왔다. (데이터를 묶는것)
int[] lotto를 Lotto 자료형으로 이용하기위해 main()메소드에서 Lotto lotto; 변수선언한다.
Lotto 클래스안에 담긴것들을 Lotto. 으로 사용할 수 있게된다.
정수배열 int[]를 담고있는 Lotto라는 개념으로 데이터 단위를 만들어서 한번에 관리한다.
int[] lotto보다는 Lotto가 바람직하다. 데이터안에 int[]이 다양할 수 있게때문에 혼란이 생길 수있다.
데이터를 묶어서 관리하는 이유
의미를 분명히 할 수있는 자료형으로 해야한다.
각각 String, int를 부르는것보다 stu1식으로 해야 학생데이터인지, 선생님 데이터인지 구분할 수있다.
Lotto클래스의 int[]배열을 각각 관리했다면 나중에 유지보수하기 어렵다. 나중에 시간이 지났을때 무슨데이터였는지 기억해내기 힘들다.
Lotto lotto;로 묶어서 사용할것
Lotto라는 자료형을만들어써서 기존의 다른 정수배열과 구분한다. 코드정리
사용자가 원하는 자료형을 명시해서 쓸 수 있다.
하지만 불편함이 두가지 발생한다.
1. 정의하는데 추가 코드발생
2. 계층이 생긴다 lotto.nums[i]로 불러서 써야한다.
계층을 두고있는 구조체 사용시
함수를 흔히 자판기, 블랙박스라고 한다.
우리는 자판기안쪽 구현방식을 알 필요가 없다.
함수구현이 나에게는 몰라도되지만 원하는 기능만 실행하면 된다.
함수의 매개변수 이름은 외부에서 사용하는 변수명에 영향을 받지않는다. (지역화,고립화)
계층을 두고있는 구조체를 쓸때 lotto.nums[i]는 지역화가 아니다. Lotto클래스에서 int[] nums;명이 변경된다면 오류가 생긴다.
외부의 변화에 취약해졌다. 어떻게 해결해야할까 ? -> 캡슐화의 시발점
'2021 Newlecture > JAVA' 카테고리의 다른 글
프로그램을 만드는 순서 /개체와 서비스함수 / 객체지향에서의 캡슐화 (0) | 2021.03.29 |
---|---|
객체지향 프로그래밍 / this / static메소드 / 인스턴스메소드/ 생성자 / Getter&Setter (0) | 2021.03.27 |
캡슐화 / 접근지시자 / Getter 함수 (0) | 2021.03.25 |
jar파일 생성/ 외부 jar파일 추가하기 (0) | 2021.03.24 |
함수를 사용하는 이유/ 데이터 입출력 분리/ 메소드생성 (0) | 2021.03.23 |
코드정리 / 함수와 인터페이스 / 메소드생성 / 메소드호출 (0) | 2021.03.22 |
메소드생성 (0) | 2021.03.22 |
배열을 바로출력 vs 변수로 출력 (구조체) (0) | 2021.03.19 |