본문 바로가기
반응형

전체 글305

멀티 스레드 Preface 이번 장에선 스레드와 관련된 내용을 공부했다. 앞 부분도 생각보다 복잡하고 어려워서 당황했는데, 마지막 부분에 있는 스레드 그룹과 스레드풀 쪽은 솔직히 이해가 잘 되지 않아 한 번 훑어보는 식으로 넘어갔다. 아무래도 아직 공부하지 않은 제네릭과 다양한 타입의 객체가 코드에 포함되어 있어서 그런 것 같다. 모든 내용을 이해하려고 시간을 쓰기 보단 이런 내용이 있구나 정도로 이해한 뒤, 추후 해당 내용이 필요할 때 다시 공부하는 것이 훨씬 효율적일 것 같다. 스레드 객체를 생성하는 방법 중 굳이 코드의 길이가 길어지는 Runnable 인터페이스 구현 방법을 사용하는 이유가 궁금해 chat-gpt에게 물어봤다. Q: 두 방법 중 익명객체를 생성해 Thread 클래스를 상속받는 방법이 훨씬 코드도.. 2023. 4. 21.
백준 5단계 -Java Preface 5단계는 문자열과 관련된 문제들이었는데, 며칠 전 이것이 자바다 책에서 다양한 문자열 메소드를 공부한 탓인지 큰 어려움 없이 문제들을 풀 수 있었다. 2908번을 해결한 후 다른 사람들의 코드를 찾아보던 중 StringBuilder 객체를 생성할 때 String 타입의 값은 append( ) 메소드를 사용할 필요 없이 StringBuilder 객체를 생성하면서 값을 할당할 수 있다는 것을 알게 되었다. https://www.acmicpc.net/step/7 문자열 단계 정수를 문자열로 입력받는 문제. Python처럼 정수 크기에 제한이 없다면 상관 없으나, 예제 3은 일반적인 정수 자료형에 담기에 너무 크다는 점에 주목합시다. www.acmicpc.net - 27866번 package nu.. 2023. 4. 18.
이자바 11장(기본 API 클래스) 확인문제 Preface 메소드의 이름과 형식, 사용 방법만 알면 특별히 헷갈릴 만한 문제는 없다. - 3번 package ch11; import java.util.HashMap; class Student { private String studentNum; public Student(String studentNum) { this.studentNum = studentNum; } public String getStudentNum() { return studentNum; } @Override public boolean equals(Object obj) { if (obj instanceof Student) { Student student = (Student) obj; if (studentNum.equals(student... 2023. 4. 15.
기본 API 클래스 (3) Preface 이번 장을 끝으로 이자바 1권 개념 공부를 모두 마쳤다. 마지막 부분 역시 다양한 메소드와 관련된 내용이라 한 번 훑어보는 식으로 넘어갔다. java.time 패키지의 시간 조작 및 계산 관련 메소드들은 굳이 익힐 필요가 없을 것 같아 따로 정리 하지는 않았다. 워낙 내용이 많았던 파트라 확인 문제를 풀어본 후 업로드했던 글들을 다시 한 번 읽어봐야 할 것 같다. 12. Math, Random 클래스 - java.lang.Math 클래스: 수학 계산에 사용할 수 있는 메소드 제공 → 모두 정적 메소드이므로 Math 클래스로 바로 사용할 수 있다. - Math 클래스의 메소드 메소드 설명 예제 코드 리턴값 int abs(int a) 절댓값 int v1 = Math.abs(-5); v1 = 5.. 2023. 4. 15.
기본 API 클래스 (2) Preface 각 클래스에서 제공하는 메소드의 양이 정말 많지만, 대부분의 메소드는 지금까지 이런저런 코드를 작성하며 한 번 쯤 보고 사용해 봤던 것들이라 쉽게 이해할 수 있었다. 또, 메소드들의 이름이 직관적이라 어떤 동작을 하는 메소드인지 헷갈릴 걱정은 하지 않아도 될 것 같다. 다만 필요할 때 적절한 메소드를 사용하려면 적어도 자주 사용되는 것들의 이름은 확실히 암기해야 할 것 같다. 본문에 정규 표현식에 관한 내용도 있는데, 이 부분은 필요할 때 다시 찾아 공부할 생각이다. 아 그리고 박싱과 언박싱의 개념이 확 와닿지 않아 gpt에게 몇 가지 질문을 했다. Q1: boxing과 unboxing은 언제 왜 일어나는거야? A1: boxing과 unboxing은 기본 데이터 타입과 래퍼 클래스 객체 간.. 2023. 4. 14.
기본 API 클래스 (1) Preface 이번 장은 기본 API 클래스에 관련된 부분인데, 내용이 너무 방대해 2, 3번에 나누어 글을 업로드할 생각이다. 대부분 특정 클래스에 포함된 메소드의 사용 방법에 관한 내용이라 특별히 어려운 부분은 없었지만, Class 클래스에서 동적인 객체를 생성하는 부분의 개념이 조금 헷갈렸다. 아직 복잡한 프로그램을 다뤄본 경험이 없어서 그런지, 굳이 동적으로 객체를 생성해야 할 필요성을 잘 모르겠다. gpt에게 몇가지 예시를 물어봐야겠다. 1. 런타임에 클래스 정보를 동적으로 가져와야 하는 경우: 클래스 이름이 런타임에 동적으로 결정되는 경우 Class.forName() 메소드를 사용하여 클래스 정보를 가져와 newInstance() 메소드를 사용하여 객체를 생성할 수 있습니다. 2. 플러그인 시.. 2023. 4. 13.
백준 4단계 - Java Preface 4단계는 배열과 관련된 문제들이다. 코드의 성능을 조금이라도 향상시키기 위해 모든 입력에 Scanner 대신 BufferedReader를 사용했다. 이번 단계에선 원하는 결과가 제대로 출력되지 않아 해결하는데 시간이 꽤나 오래 걸린 문제들이 있었다. (3052번, 10811번 등) 어려운 문제가 나왔을 때 구글링을 통해 코드를 본 뒤 이해하는 식으로 넘어가면 문제를 푸는 의미가 없는 것 같아서 혼자 힘으로 꾸역꾸역 어떻게든 정답을 맞춘 후 다른 해결 방법들을 찾아봤다. 본문에서 주석처리된 코드들은 다른 블로그나 chat-gpt로부터 얻은 코드들이다. 앞으로 점점 더 어려운 문제들을 해결하려면 다양한 메소드를 익혀야 할 것 같다. 아 그리고 정보처리기능사 필기 시험은 무난하게 합격했다. 다음.. 2023. 4. 11.
백준 3단계 - Java Preface 3단계는 반복문과 관련된 문제들이다. 문제 자체의 난이도는 평이했지만, System.out.print( )를 사용하는 출력 방법 외에 Scanner, BufferedReader 등의 사용 방법을 익히는 것이 조금 복잡했다. Scanner를 이용하는 방법은 꽤 익숙해졌지만, BufferedReader와 StringTokenizer의 사용 방법은 아직 완벽히 이해하지 못했다. 본문에 달아둔 링크의 글을 여러번 읽어보며 해당 개념을 제대로 이해하고 넘어갈 생각이다. 또, 이번 주말에 정보처리기능사 필기 시험이 있어 이번 주는 시험 준비를 해야 할 것 같다. 시험을 본 이후부턴 월요일엔 백준 문제를, 다른 날에는 이것이 자바다 책을 공부할 계획이다. https://www.acmicpc.net/st.. 2023. 4. 2.
백준 2단계 - Java Preface 2단계는 조건문과 관련된 문제들이다. 나는 2884번을 풀 때 절댓값을 사용해서 출력값을 얻었지만, 다른 사람들의 코드를 보니 내가 작성한 코드보다 훨씬 간단했다. 또, 2525번 문제는 내가 작성한 코드를 제출하면 오답으로 인식되어 어쩔 수 없이 다른 코드를 제출했다. 분명 출력값이 주어진 조건과 동일하게 나오는데 왜 오답으로 처리되는지 잘 모르겠다. 두 문제 뿐만이 아니라 다른 몇몇 문제들도 다른 사람들의 코드에 비해 내 코드가 훨씬 길고 복잡했다. 물론 문제 해결 방법이 특정되어 있는 것은 아니지만, 아무래도 내 코드는 효율성이 많이 떨어지는 것 같다. 나는 왜 대다수의 사람들처럼 간결한 코드를 구성하지 못할까. 앞으로 꾸준히 다양한 문제를 접하다 보면 적절한 알고리즘을 선택할 수 있.. 2023. 3. 23.
백준 1단계 - Java Preface 이것이 자바다 책 공부를 하던 도중 문득 너무 이론 위주로만 공부하고 있는 것 같다는 생각이 들었다. 이렇게 이론만 백날 공부해봤자 해당 개념을 실제 코드에 적용하지 못하면 무슨 소용인가 싶어 시간이 날 때마다 백준에서 조금씩 문제를 풀어보기로 결정했다. 일단은 단계별 문제 카테고리에서 12단계까지 차근차근 풀어 볼 생각이다. 그리고 가능하다면 2학기가 시작하기 전에 적어도 골드까지는 달아보고 싶다. https://www.acmicpc.net/step/1 입출력과 사칙연산 단계 입출력과 사칙연산 www.acmicpc.net - 10869번: 사칙연산 package num1; import java.util.Scanner; public class B10869 { public static voi.. 2023. 3. 22.
예외 처리 Preface 이번 장에선 예외의 종류와 처리 방법에 대해 공부했다. 가끔 자바 문장을 볼 때마다 try, catch, finally, throws 등 익숙치 않은 키워드가 자주 보여서 코드를 완벽히 이해할 수 없었는데, 이제야 조금 알 것 같다. 예외 처리라고 해서 꽤나 복잡하고 어려울 것이라고 생각했는데, 걱정했던 것과 달리 처리 방법 자체는 단순한 것 같다. 다만, 발생할 수 있는 실행 예외를 예측하여 코드를 작성하는 것은 상당한 내공이 필요해 보인다. 1. 예외의 종류와 처리 방법 - 에러(error): 하드웨어의 오작동 또는 고장으로 인해 응용 프로그램 실행 오류가 발생하는 것 - 예외(exception): 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 프로그램 오류 - 예외의 종류 .. 2023. 3. 21.
이자바 9장(중첩 클래스와 중첩 인터페이스) 확인문제 Preface 확인문제를 풀기 전까진 별 생각이 없었는데, 6번 문제의 해답을 고민하던 도중 문득 로컬 클래스와 익명 객체에서 사용되는 변수의 final 특성에 관한 개념이 헷갈렸다. 이번 글을 업로드한 후 책을 다시 한 번 천천히 읽어보며 해당 개념을 확실히 이해하고 넘어가야 할 것 같다. - 4번 package ch9; class Car { class Tire {} static class Engine {} } public class Exercise4 { public static void main(String[] args) { Car myCar = new Car(); Car.Tire tire = myCar.new Tire(); Car.Engine engine = new Car.Engine(); } } .. 2023. 3. 17.
중첩 클래스와 중첩 인터페이스 Preface 이번 장에선 중첩 클래스와 중첩 인터페이스를 공부했다. 개념 자체는 어려운 부분이 없었지만, 클래스 안에 클래스를 구현하거나 클래스 안에 인터페이스를 구현하니 내부의 구성 멤버를 호출하는 방법이 조금 까다로웠다. 중첩 구문을 사용하면 불필요한 코드를 줄일 수 있어 기존의 코드보다 훨씬 가독성이 좋다고 하는데, 나는 이제 막 중첩 개념을 공부해서 그런지 오히려 클래스를 별도로 생성한 후 메인 클래스에서 객체를 생성하는 방법이 훨씬 익숙하고 코드 자체도 알아보기 쉽다고 느껴졌다. 공부를 하면 할 수록 주석의 중요성을 느끼게 되는 것 같다. 1. 중첩 클래스와 중첩 인터페이스 - 중첩 클래스(nested class): 클래스 내부에 선언한 클래스 1) 두 클래스의 멤버들을 서로 쉽게 접근할 수 .. 2023. 3. 15.
이자바 8장(인터페이스) 확인문제 - 3번 package ch8; interface Soundable { String sound(); } class Cat implements Soundable { @Override public String sound() { return "야옹"; } } class Dog implements Soundable { @Override public String sound() { return "멍멍"; } } public class Exercise3 { private static void printSound(Soundable soundable) { System.out.println(soundable.sound()); } public static void main(String[] args) { printSound(.. 2023. 3. 14.