Java 공부일지 Day03 :: 요소를 이해하는게 힘들어

linvi·2023년 1월 11일

java 공부일지

목록 보기
3/10
post-thumbnail

Day03_ 첫 시작은 메서드의 이해부터...

매서드의 종류는 4가지가 있다.

1.  시키고(가지고 있는 것 x), 받는 것이 X //매개변수 X , 리턴 X (void가 있음)
2.  시키고(가지고 있는 것 O), 받는 것이 X //매개변수 O, 리턴 X  (void가 있음)
3.  시키고(가지고 있는 것 X), 받는 것은 O // 매개변수 X. 리턴 O
4.	시키고(가지고 있는 것 O), 받는 것도 O // 매개변수 O, 리턴 O   
void가 있는 경우는 내가 받는 것이 없을 경우.
ex) private Strig = 내가 String을 리턴값으로 받는다.
ex) private void = 내가 받는 리턴값이 없다.

파싱 === 필요한 것만을 도려내는 작업

이후에 알게 된 것, @RequestMapping은 C(post)/R(get)/U(put)/D(delet)의 역할을 하는 모든 맵핑을 포함하는 요소,

이후 만든 html 파싱을 하는 프로그램을 만들게 되면서,

문서를 받아와 읽어야 하기 때문에 @GetMapping으로 설정하는 것.


이 과정에서, throw의 구문은, 오류가 발생했을 경우에, 그 프로그램을 종료시키는 것.
(건물에서 문제가 생겼을 때, 비상구로 사람을 밀어넣는 것처럼 생각하면 될 것이라고 하셨다)

이후, 파싱의 과정에서 변경된 컨트롤러의 사항은 이렇다.
(초반이기 때문에 빨간 줄이 많다)

순서는 이렇다.
먼저, 기사를 받고->다시 파싱으로 넘기고->파싱한 것을 개시하는 작업을 하기 위해 함수를 하나 추가하기로 한다.

이후 추가된 사항은 이렇다.

Run() 함수 안에
전체적인 html의 내용을 받고(getFullHtml), 파싱의 과정(parseHtml)을 수행한다.

그리고 컨트롤러를 수정한다.


리턴값을 "ok"로 바꾼 뒤, scrapService의 Run() 함수를 실행한다.
오류가 발생할 경우 종료하기 위해, throws 를 적용한다.

그리고 다시금 파싱의 과정을 10번 반복하기 위해, for 문을 적용한다.

여기서, for 문이 두 번 적용된 경우는 이렇다
div안에 ul이 있고, 그 안에 li가 있기에, 그 요소들에서 각각의 요소들을 꺼내야 했기 때문이다.

<div>
	<ul>
    	<li></li>
    </ul>
</div>

이런 구조이기에, for문으로 적용하는데, 원래 알던 for문과는 달라서 조금 햇갈렸다 ;;
(*알고보니 이게 향상된 for 문이더라)
for (Element item : elements) 라면, elements의 요소를 item이라는 요소에 저장한다. 라는 뜻이었다.

그렇다는 것은.

  for (Element item : elements) {
            Elements lies = item.getElementsByTag("li");
            for (Element item2 : lies){
                tempResult.add(item2);
                //반복되는 동안 하는 행동
            }
        }

이건, elements의 요소를 item에 저장하는데, 그 과정에서, li를 꺼낸다.
다시, for문을 사용하여 lies의 요소를 item2에 저장,
그 상태에서 List<Element> 인 tempResult 에 추가( tempResult.add(item2)) 한다.
이후, 알게 된 업계의 관행은 이렇다.
:: Responce는 단수로, Item은 복수로 정의한다::
다시금 확인된 사항


전체적으로 나온 함수(축약)는 이렇다.

이렇게 내용이 성공적으로 보내진다.


//강사님이 알려주신 터미널에서 푸쉬하는 법이다.

이제 스스로 해봐야 하는 시간

스스로 하는 시간이 왔다. 강사님의 설명이 완료되었으니, 이제 이해하고 적용하는 시간.

(트위터 : @adeli_gotohome 님의 그림)
그래서 이거 어떻게 하더라

그런 순간이 있다, 멍하니 모니터만 보다가 이게 뭔지 햇갈리는 순간.

LinkedList<>() 를 그냥 단순하게 이해하면 되었다. 더 깊게 생각하려다 생각이 꼬여버린 것.

**심지어 파일명도 덮어씌우기 해서 다 날아갈 뻔 했다.

코드를 따라 치면서 대강은 이해했고, 덮어씌우기나 파일명의 순서만 안 까먹으면 될 것 같다.
본격적인 개발의 순서를 이렇게 정했다.

서비스를 만든 뒤 ---->>> 컨트롤러
// 그 뒤에 모델을 만든다.

여기서 튀어나온 404는 내 문제인가 아닌가..


==>> 정답 :: 내 손가락

오타가 나서 또 에러가 난 것이었다.
결국에는 오타와의 전쟁이었고, 오타를 수정하고 나니 크롤러의 가동이 성공했다.

여기서의 정리된 내역


...
                   NewsItemList addItem = new NewsItemList(); 
                   //새로운 아이템을 추가하기 위한 요소를 만들고,
                   
                    addItem.setTitle(title);
                    addItem.setContents(content);
				// 그 안의 영역에 타이틀과 컨텐츠를 세팅한다.
                
                    result.add(addItem);
                    
                // 그리고 결과값에 요소(안에 타이틀, 컨텐츠 있음) 을 추가한다
                }
            }
        }
        return result;
        //결과값을 반환
    }

    public List<NewsItemList> run() throws IOException {
        Document document = getFullHtml(); 
        //html을 전부 가져오는 것을 실행
        List<Element> elements = parseHtml(document);
        //(Element타입을 가진 List 타입의 )elements 안에 document를 파싱한 것을 넣고,
        List<NewsItemList> result = makeResult(elements);
		//(NewsItemList 타입을 가진 List 타입의) result 안에 elements의 결과값을 넣고
        return result;
        //결과값을 반환한다.
    }
}

이 내용에서 꼬이고 꼬이다가 내용의 한 40% 정도를 말로 설명하면서 구현한 것 같다.
어려운 내용을 결국 가상의 나에게 설명한다고 생각하면서 구현하는 것이 나을 듯 하다.

어찌저찌 구현에 성공했다. 강사님께서 내용의 3~40%를 이해하는 것으로도 충분하다고 하였으니, 이 것만으로도 괜찮을 것 같다.

profile
열심히 노력하고 있는 사람

0개의 댓글