230523_ \n

hoy_·2023년 5월 23일
0

Today, I Learned

목록 보기
5/36

1. 오늘의 일정

  1. java 기본 문법 복습
  2. 객체지향 개념 복습 및 심화 학습



2. 배운 내용

  • 캡슐화 : 클래스로 객체의 필드와 메서드를 묶어 구현부를 감추는 것.
    → 외부의 잘못된 사용으로 인한 오남용을 막을 수 있다.
    → 접근제어자를 사용한다.


  • 상속 : 상위(부모) 객체가 가지고 있는 필드와 메서드를 하위(자식) 객체에게 그대로 물려주는 것.
    → 하위 객체는 상위 객체를 확장하여 추가적인 필드와 메서드를 가질 수 있다.
    → 코드의 재사용성이 높아 중복을 막고 다형성의 기반을 마련한다.


  • 다형성 : 같은 타입이지만 실행결과가 다양한 객체를 대입할 수 있는 성질.
    → 객체를 부품화 시키고, 유지보수를 용이하게 한다.


  • 추상화 : 클래스들의 공통적인 요소를 뽑아서 상위 클래스를 만들어내는 것.
    → 공통적인 속성과 기능을 정의함으로써 코드의 중복을 줄인다.
    → 클래스 간 관계를 효과적으로 설정하고, 유지보수를 용이하게 한다.



3. 발생한 오류

  1. collection - LinkedHashSet 저장 과정에서 원하지 않는 개행문자 \n 입력, 저장됨.
  2. MaC, Window 관계 없이 다른 pc에선 정상 작동하지만 내 pc에서만 에러...
		Scanner sc = new Scanner(System.in);
        LinkedHashSet<String> set = new LinkedHashSet<>();

        System.out.println("제목 입력");
        String title = sc.nextLine().trim();
        System.out.println("=======================");
        System.out.println("내용 입력");

        while (true) {
            String text = sc.nextLine().trim();
            if (text.equals("끝")) {
                break;
            }
            set.add(text);
        }
        System.out.println("=======================");
        System.out.println("size : " + set.size());

        Iterator<String> iterator = set.iterator();
        System.out.println(title);
        for (int i=0; i<set.size(); i++) {
            if (iterator.hasNext()) {
                int count = i + 1;
                System.out.println(count + ". " + iterator.next());
            }
        }

해결
1. .size(); 저장과 출력 중 어느 쪽이 문제인지 확인해보고자 단계적인 점검을 함.
2. .trim();, Debugging 해보며 원인 찾기 등 한참을 시도해봤으나 개선되지 못했다.
3. 'if (!text.isEmpty()) { set.add(text) } 로 빈 문자열을 저장하지 않게 함.
4. 근본적인 해결법을 찾지 못하고 보편적이지 않은 방식의 코드를 추가한 점이 아쉽다.



4. 앞으로의 나는

  1. 나만 해당되는 기묘한 에러가 난 건 매우 신기하고 이상한 일이지만... 덕분에 디버깅을 꽤 자세히 배웠다.
  2. 내일은 collection과 Generics 문제 풀 예정.
profile
배우는 사람

0개의 댓글