티스토리 뷰

1. 실습내용 :

 

HW4

오늘의 HW

 

 

 

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. 연락처 수정

올바른 출력예시 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은 메모리를 막 버릴 수 없으므로 조심히 사용해야함
    코드들이 저장되는 메모리 영역

 

 

 

 

 

 

출처 : https://favpng.com/png_view/java-runtime-environment-runtime-system-runtime-library-java-virtual-machine-png/zQAcJKZC

 

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 메소드 - 인스턴스 생성 없이 사용 가능 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함