티스토리 뷰
1. 실습내용 :
HW4

0) 클래스 설계


1) 연락처 등록하기



0번 인덱스 =
Contact [name=김하나, phone=010-1111-1111, email=kimhana@test.com]
1번 인덱스 =
Contact [name=박두리, phone=010-2222-2222, email=parkdori@test.com]
2번 인덱스 =
Contact [name=이삼이, phone=010-3333-3333, email=Leesami@test.com]
이렇게 저장 됐어야함
2) 연락처 전체 검색

문제점 : 연락처 카운트는 잘 해놓고
마지막 입력값만 저장해놓음
그리고 연락처 0번 , 1번 , 2번 이렇게 해야하는데 이상하게 나옴
물론 코드도 이상함
3. 연락처 상세


당연히 2번에서 막히니깐
0번째 인덱스면 김하나가 나와야 하는데 마지막 저장한 것만 나옴
0번 인덱스만 바뀌고 그 뒤로 추가하거나 할 수가 없음
4. 연락처 수정


0번째 인덱스에서 벗어나질 못하니깐 2번 치니깐 오류 남
*문제의 코드 살펴보기*

index 는 입력받으려고 선언함
Contact c1 = new Contact();
이런 식으로 하나하나 입력 받게 하는 걸 반복문으로 뽑아내려 했는데 이렇게 해도 될 것 같아서..

switch 문 case 등록하기 에서 이름을 입력받아야 하고 private으로 변수를 설정해놔서 간접적으로 입력받으려고 setName 에 입력받음
그리고 마지막에 연락처 입력하면 카운트하기

그리고 전체 검색을 배열을 for - each 로 보여주고 싶었는데
문제1. 배열의 크기를 100으로 잡아놔서 전체 다 출력됨. while 문 안에 또 이중으로 넣기도 그래서 for - each로 해결하고자 했음
문제2. 배열의 크기 -> length메소드를 이용하면 길이만큼 출력될 줄 알았음 . 그것도 오류남
문제3. 연락처 1번, 2번 .. 이런 식으로 배열의 인덱스 값만 나오게 출력하는것도 모르겠음 ; 난리남
*과제 풀이*
point 1 ) 메소드화 시키기
예전에는 길었던 코드를 반복문 안에 그대로 작성했는데 이제는 메소드화 시켜 사용한다



집에서 다시 작성해본 코드 수정본


switch문 안의 내용들을 메소드를 사용하여 작성해보기

첫번째 메소드 ShowMainMenu()
반복문의 첫번째 선택지로 계속 나와야 하는 출력문을 메소드화 시킴

두 번째 메소드 insertContact() : 연락처를 등록하는 메소드
String 변수명 = sc.next(); 으로
입력을 받을 후
위에서 선언 한 배열에 입력한다
배열에 저장을 할 때는 앞에서
public static int count = 0;
만들었던 count를 이용
contactList[count] = contact; //현재 0번째 인덱스를 배열에 넣고
count ++; // 1씩 증가

세 번째 메소드 selectAllContact() : 연락처를 전체 검색하는 메소드
count를 통해 지금까지 배열에 저장된 횟수를 세서 출력하고
for문을 이용하는데
연락처 인덱스(i)는 0 부터 시작해서 count 미만으로 설정!
같게 설정(i <= count )하면 null error 가 남..
0부터 시작하기 때문에 그렇다..
내가 연락처를 두 개 저장했다면
count = 0 ;
count ++ ; // count = 1
count = 1 ;
count ++ ; // count = 2
여기서 for(int =i - 0; i <= count; i++) 로 하게되면,,,
count 는 2니깐 연락처 2개는 맞음
근데 인덱스는 [0] , [1] 만 있고 2가 없다
그래서 에러가 남..
0부터 시작하니깐 가끔 까먹게된다..

네 번째 메소드 selectContact() : 연락처를 상세검색 하는 메소드
입력받을 변수를 하나 설정해주고
contactList[입력받을 변수명].toString() 으로 출력해줄 수도 있지만,
만약에 저장한 연락처보다 큰 수나 음수를 입력하면 에러가 나기 때문에
if(입력받을 변수 >= 0 && 입력받을 변수 < count)문으로 조건을 만들어 준다.
위 코드에서 = 을 잘못사용함.. 테스트할 때 현재 카운트에 있는 수를 입력한다면
그 연락처가 등록되어있지 않아 에러가 날듯

마지막 메소드 updateContact() : 연락처 수정하기
수정할 인덱스를 입력받는 변수를 선언해주고
수정할 인덱스의 범위가 저장된 연락처의 범위를 벗어나지 않게
if(입력받을 변수 >= 0 && 입력받을 변수 < count) 문으로 설정해준다
다시 새로 연락처를 입력받고
연락처 수정 완료를 출력해준다.
여기서 이름, 전화번호, 이메일 중 하나만 수정 받게 하려면...
난이도가 많이 높아진다.
출력결과




수업내용
Java Runtime Environment(JRE)
- Java 애플리케이션을 생성하고 실행하기 위한 구성 요소 - JRE는 Java개발 도구 (Java Development Kit, JDK)의 일부 - 운영체제와 Java 프로그램 사이에서 조정 역할을 수행
JVM(Java Virtual Machine)
- Java 바이트 코드를 실행하는 주체 (소프트웨어)
- 특정 공간을 할당하여 메모리 관리
JVM이 관리하는 메모리 영역 :
- Stack(스택) : 지역 변수들이 저장되는 메모리 영역
- Heap(힙) : 인스턴스(참조 자료형)가 저장되는 메모리 영역
- Method(메소드) : static으로 선언한 변수, 메소드의 실행 -> static은 메모리를 막 버릴 수 없으므로 조심히 사용해야함
코드들이 저장되는 메모리 영역

Java Runtime Environment Runtime System Runtime Library Java Virtual Machine - PNG - Download Free
Java Runtime Environment Runtime System Runtime Library Java Virtual Machine - PNG - Download Free
favpng.com
간단한 구조를 설명하면
Code |JRE(Compiler) | OS
final 제한자
- 초기화된 값을 바꿀 수 없음
- final : 최종적인, 변경할 수 없는
- final + 멤버 변수 , 지역변수 : 상수(한 번 초기화된 값을 변경할 수 없는 변수)
- final + 메소드 : override 할 수 없는 메소드 (설계 영역 > 잘 쓰지 않을 것)
- final + 클래스 : 상속을 허용하지 않는 클래스 (설계 영역 > 잘 쓰지 않을 것)
쓰레기값
"test"는 힙 영역에서 삭제되지 않음
이러한 객체를 쓰레기 값이라고 하며,
자바는 Garbage Collector를 이용하여 쓰레기 값을 자동으로 제거
멤버 변수 : 클래스 단계에서 선언된 변수(class 아래에서 들여쓰기로 선언된 변수)
지역 변수 : 메소드나 특정 위치에 포함된 곳에서 선언된 변수 (특정 메소드안에, main()아래에서 선언된 변수)
- 지역 변수의 이름은 멤버 변수와 동일하게 선언되면 안됨


// * 클래스 멤버 변수(static 변수) : static 으로 선언한 멤버 변수
// - 인스턴스를 생성하지 않아도 사용 가능
// - static 변수는 메소드 영역에 생성된 공간에서 공유됨
// - 모든 인스턴스들이 공유하기 때문에 값의 변경에 대해서 주의해야 함!
// - 사용 형식 :
// 클래스이름.변수이름
// * 인스턴스 멤버 변수 : static이 선언되지 않은 멤버 변수
// - 인스턴스를 생성한 후에만 사용할 수 있는 변수
// - 사용 형식 :
// Any 참조변수 = new Any();
// 참조변수.변수이름

// static이 있으면 클래스안에서 내용물을 마음대로 꺼내 쓸 수 있음
// * 클래스 메소드(static 메소드) : static으로 선언한 메소드
// - 인스턴스를 생성하지 않아도 사용 가능한 메소드
// - 사용 형식:
// 클래스이름.메소드()
// * 인스턴스 메소드 : static으로 선언되지 않은 메소드
// - 인스턴스를 생성한 후에만 사용할 수 있는 메소드
// - 사용 형식:
// Any 참조변수 = new Any();
// 참조변수.메소드()
// static 멤버 변수 - 인스턴스 생성(new) 없이 사용 가능
// static 메소드 - 인스턴스 생성 없이 사용 가능

'백엔드 교육과정 > 2월' 카테고리의 다른 글
2024.2.16. Interface , 상속/다형성 (복습) (0) | 2024.02.16 |
---|---|
2024.02.15.싱글톤 디자인 패턴 , static , 상속(Inheritance) , 생성자 , override , Object 클래스와 toString() (0) | 2024.02.15 |
2024.02.13_Class_constructor(생성자), Access(접근 제한), 캡슐화 (0) | 2024.02.13 |
2024.02.07_ 객체 지향 프로그래밍 , 메소드 , 클래스 (+ 객체, 인스턴스)(수정) (0) | 2024.02.07 |
2024.02.06_ 2차원 배열, HW2 (0) | 2024.02.06 |