java 43

2022.03.15 데이터 위주의 상속

오늘은 수업의 시작은 지난 수업의 상속에 관한 이야기로 시작했습니다 바로 상속에 관한 코딩의 팁을 주셨습니다 보통 코딩을 하다 보면 타입을 써야 하는 경우가 많습니다 예를 들면 파라미터 , 리턴 타입 , 자료구조 등이 있죠 그럴 때 타입을 자식이 아닌 부모 타입으로 가지는 것이 좀 더 유연하다 부모의 타입으로 사용해라 라는 팁을 주셨습니다 ⭐ 타입을 만들 때는 자식 말고 부모 타입으로!! 데이터 위주의 상속 데이터 위주의 상속을 할 때는 이런 식으로 기존 데이터에서 추가적인 데이터가 필요할 때 사용해줍니다 그리고 데이터 위주의 상속을 설계하고 코딩할 때의 주의점은 바로 부모를 먼저 만드는 것!입니다 코딩을 할 때는 부모를 먼저 만드는 것이 아닌 자식을 먼저 만들고 자식 데이터들에서 중복되는 것들을 뽑아서..

2022.03.14 상속을 이용해서 UI 만들어보기

오늘 배운 로직 위주의 상속을 이용해서 UI를 만들었습니다 설계 가장 먼저 부모인 BasicUI를 만들어주었습니다 BasicUI public class BasicUI { private Scanner scanner; //Scanner 생성자 public BasicUI(Scanner scanner) { this.scanner = scanner; } //메시지 출력하는 기능 public void print(String msg){ System.out.println(msg); } //String 타입 입력받기 public String input(String msg){ System.out.println(msg); return scanner.nextLine(); } //int 타입 입력받기 public int inp..

눈 속임 Override

ui에서 input를 찾으면 아래 그림처럼 내부적으로 돌아가게 됩니다 이러면 어떻게 할 건데..? 이런 경우도 있을 수 있습니다 바로 SampleUI에 BasicUI에 input 하고 똑같은 input가 있다면??? 그럼 실행하는 입장에서는 BasicUI까지 올라갈 필요 없이 SampleUI에 있는 input를 보게 될 것입니다 이런 걸 바로 Override라고 합니다 Override 컴파일할 때는 부모 타입에 있는 메서드를 바라보고 있는데 실제로 실행을 할 때는 실핼될때 객체에 있는 메서드가 실행되는 것을 말합니다 마치 눈속임 같지요?? ✨Override는 상속과 인터페이스 관계에서만 성립합니다!! 그럼 왜 Override를 할까요?? 바로 상황에 따라서 다르게 동작해야 하는 부분을 Override로 ..

JAVA 2022.03.14

상속 심화

상속의 예제를 보면서 상속을 좀 더 이해해보려고 합니다 public class BasicUI { private Scanner scanner; //Scanner 생성자 public BasicUI(Scanner scanner) { this.scanner = scanner; } //String 타입 입력받기 public String input(String msg){ System.out.println(msg); return scanner.nextLine(); } //int 타입 입력받기 public int inputInt(String msg){ String inputStr = input(msg); return Integer.parseInt(input(msg)); } } BasicUI Class에서는 Scanne..

JAVA 2022.03.14

상속이란?

상속이란? 부모 Class와 자식 Calss 가있으며 자식 Class 가 부모 클래스를 선택해서 그 부모의 내용을 물려받아서 가지고 오는 것 자식 클래스는 기본적으로 부모의 모든 메서드 + (자신의 고유 기능) 따라가 자식 클래스는 부모 클래스보다 기능이 더 많은 경우가 많습니다 상속의 기준 판단하기 보통 JAVA상속을 검색하면 이런 이미지가 나온다 이 이미지가 의미하는 뜻은 알겠지만 단순하게 이 구조가 상속이다!라고 생각하면 안 된다 그 이유는 위 구조는 로직의 구조이다 로직의 구조로서 저 데이터를 보면 상속의 대상이지만 만약 저걸 데이터로써 본다면 어떨까??? 데이터로써 보면 이런 구조일 것이다 이것은 클래스 하나에 여러 개의 인스턴스일 뿐이다 즉 상속의 대상으로 보기 어렵다 그렇다면 상속을 어떤 기..

JAVA 2022.03.14

ArrayList

기존배열 private VoterVO [] arr; public VoterDAO(){ arr= new VoterVO [4]; arr[0] = new VoterVO(1, "홍길동"); arr[1] = new VoterVO(2, "고길동"); arr[2] = new VoterVO(3, "박길동"); arr[3] = new VoterVO(4, "이길동"); } 기존 배열 방식 각 배열에 내용을 지정해주어야 하고 처음 설정했던 크기만큼만 사용할 수 있음 ArrayList 길이의 제한이없다 int의 크기만큼 만들어진다 ArrayList 선언 , 초기화 ArrayList 선언 타입 이름 private ArrayList voArrayList; //ArrayList 선언 타입 이름 private ArrayList vo..

JAVA 2022.03.13

2022.03.13 UI & Main

저는 개인적으로 UI 쪽이 먼가 가장 복잡하게 느껴졌습니다 이번 투표 시스템뿐 아니라 다른 로직을 만들 때도 항상 UI 쪽에서 멍~해졌던 것 같습니다 이번 투표 시스템을 만들 때도 UI를 만들 때 정말.... 많아진 Class 때문에 어디에 머가 있었지.... 이게 무슨 기능이었지... 하면서 머리가 뒤죽박죽이 되어버렸습니다.... 사용자야 UI 들어간다 @RequiredArgsConstructor public class VoteUI { @NonNull private VoteService voteService; @NonNull private VoterService voterService; @NonNull private CandidateService candidateService; @NonNull priv..

2022.03.13 투표 패키지

투표 패키지를 만들면서 설계도에서 누락된 부분이 있다는 걸 알았습니다 그래서 설계도를 살짝 수정했습니다!! 바로 투표 Service 가 투표 DAO 뿐 아니라 유권자 DAO와 후보자 DAO 가 필요했었습니다!! 강사님은 말씀하셨죠 처음부터 완벽한 설계는 없다 생각하고 수정해가면서 만드는 거다 그래서 바로 실천해버렸습니다 투표 패키지의 역할은 후보자의 정보와 유권자의 정보를 가지고와서 모아주는 역할을 하고 있습니다!! 투표(Vote) VO //한번 만들어지면 값을 바꾸면 안되니 Getter만 @AllArgsConstructor @Getter @ToString public class VoteVO { //데이터베이스 방식 설계 //유권자 데이터 private Integer voter; //후보 데이터 priv..

2022.03.12 투표 유권자 패키지

유권자(Voter) 메서드의 작성 순은 VO -> DAO -> Service 순으로 진행했습니다 코드를 작성하면서 필요한 정보 기능들은 주석으로 표기했습니다 VoterVO @AllArgsConstructor //생성자 @Getter //읽기 전용이기에 값을 복사만 하는 Getter을 사용 @ToString public class VoterVO { // int 는 기본값이 0 이다 Integer 은 기본값이 null이다 //int 는 기본값이 0 이기에 산술연산이 가능 // Interger은 특별한 작업을 해는것이 아니면 산술연산 불가 기본값이 null이기에 // 인스턴스 variable은 다 private 설정 private Integer vno; //유권자 번호 이 번호는 사실 주민번호의 역할이다 pr..

2022.03.12 투표 시스템 후보자

후보자(Candidate) 메서드의 작성 순은 VO -> DAO -> Service 순으로 진행했습니다 코드를 작성하면서 필요한 정보 기능들은 주석으로 표기했습니다 CandidateVO @AllArgsConstructor // 생성자 @Getter //읽기 전용이기에 값을 복사만 하는 Getter을 사용 @ToString public class CandidateVO { // int 는 기본값이 0 이다 Integer 은 기본값이 null이다 //int 는 기본값이 0 이기에 산술연산이 가능 // Interger은 특별한 작업을 해는것이 아니면 산술연산 불가 기본값이 null이기에 // 인스턴스 variable은 다 private 설정 private Integer cno; //후보자 번호 private S..