본문 바로가기

전체 글

내가 자주 이용하는 웹사이트 : 나무위키 나무위키는 다수의 이용자들이 각종 정보를 게시하는 위키 사이트다. 나무위키의 전신이라고 할 수 있는 리그베다 위키 시절부터 10년 넘게 사이트를 이용해 왔다. 나무위키는 누구나 문서를 작성할 수 있기 때문에, 재미있는 정보들뿐만 아니라 다양한 분야의 전문가들이 작성한 전문 지식도 습득할 수 있다. 다만 누구나 작성/편집할 수 있는 만큼 문서 훼손 행위의 위험성이 있기 때문에, 일부 문서는 로그인 사용자만 편집 가능하거나 편집이 불가능하게 제한하는 기능이 있다. 이용자들의 기여를 통해 사이트를 발전시켜 나가면서도 일정 수준 이상의 품질을 유지하기 위한 좋은 수단으로 생각된다. 단점으로는 누구나 자유롭게 편집할 수 있기 때문에, 문서의 공신력이 떨어지는 편이다. 정보가 부정확하거나 작성자 개인의 주관이 많이.. 더보기
collection framework의 interface(List, Set, Map)별 주요 method 정리 공식문서에서는 method에 대해 서술할 때 타입을 일일이 설명해 주기 때문에 직관적으로 외우기 불편하다. 그래서 이곳에 내가 기억하기 편한 방식으로 정리해 두려 한다. 각 구현 클래스들에 관한 것은 시간이 된다면 다음 포스팅에서 다룰 예정이다. '이것이 자바다' 교재를 통해 공부한 내용과 개인적인 이해방식을 바탕으로 작성했으므로 틀린 내용이 있을 수 있다. List와 Set은 Collection 인터페이스를 상속하는 자식 인터페이스이고, Map은 독립(POJO) 인터페이스이다. 셋 다 java.util 패키지에 속해 있으므로, 사용하려면 인터페이스를 가져오는(import) 작업이 필요하다. List List는 index 순서대로 저장하는 방식이다. 다른 index에 같은 내용의 객체를 중복 저장할 수 .. 더보기
method overriding 과정에서 @Override annotation을 사용해야 하는 이유 method overriding(메소드 재정의)은 부모 클래스에게 method를 상속받은 자식 클래스 또는 인터페이스를 구현한 구현 클래스에서, 해당 클래스에 적합하지 않거나 별개의 작업이 필요한 부모 클래스의 메소드 실행내용을 변경해 적용하는 작업이다. 이를 통해 같은 클래스를 상속받거나 구현한 클래스 간에도 다형성을 구현할 수 있다. 또한 추상 메소드(abstract method)는 실행부가 존재하지 않으므로, 반드시 재정의가 필요하다. 어제 포스팅한 객체의 네 가지 특성 중 상속성 항목의 마지막에 @Override annotation에 대해 간략하게 언급했었다. 클래스 상속 후 메소드를 재정의할 때, 자식 클래스에서는 해당 메소드의 선언부를 부모 클래스의 메소드 선언부와 동일하게 작성해야 한다. 또.. 더보기
인터페이스의 객체지향적 특징 인터페이스는 객체와 객체를 연결해 주는 매개체이다. 앞서 포스팅한 캡슐화와 추상화, 다형성, 상속성의 특징을 모두 가지고 있다. 인터페이스는 다른 객체를 사용하려는 객체에게 해당 객체에 대한 일종의 사용설명서와 같은 역할을 한다. 인터페이스에 선언된 추상 메소드는 구현 객체에 어떤 종류의 메소드가 있는지 알려 준다(추상화). 외부 객체는 인터페이스의 추상 메소드를 통해 간접적인 방법으로 해당 객체를 호출할 수 있다(캡슐화). 따라서 구현 객체는 반드시 인터페이스(와 그 부모)의 추상 메소드를 재정의해, 실행 내용이 있는 메소드를 가져야 한다(상속성과 다형성). 이는 객체 간 상호작용의 연결성 측면에서 객체지향의 목적에 크게 부합하는 특성이다. 또한 인터페이스는 외부 객체와 구현 객체를 중개하여 알맞은 구.. 더보기
객체지향의 네 가지 특성 : 캡슐화, 추상화, 다형성, 상속성 객체지향의 핵심적인 네 가지 특성인 캡슐화와 추상화, 다형성, 상속성에 대해 정리해 보았다. 1. 캡슐화 객체지향 프로그래밍에서는 구조의 노출, 객체 외부에서의 비정상적인 접근 또는 필드 값의 잘못된 변경 등의 위험성으로부터 보호하기 위해 구성멤버를 캡슐화할 수 있다. 접근 제한자를 이용해 중요한 정보를 담고 있는 필드와 직접적인 호출이 바람직하지 않은 메소드를 보호하고, 대체 수단을 통해 외부 객체와 상호작용하게 된다. 클래스 내부에서는 항상 멤버 간 자유롭게 상호작용이 가능하지만, 외부에서는 접근 제한 등급에 따라 공개된 구성요소에만 접근할 수 있다. 이 구성요소들은 외부와의 상호작용을 매개하며 잘못된 이용을 방지해 주는 역할을 담당하게 된다. public class Encapsulation { pr.. 더보기
Java 코딩테스트 연습 14일차 (프로그래머스 스쿨 Lv.0, 1186점) 어제 포스팅한 대로 오늘은 정답률 높은 순으로 세 문제를 더 풀게 되었다. 내일부터는 교재로 공부할 예정이다. 개인 기록 및 정리용 블로그이므로, 기록이 유의미해지려면 포스팅 과정에서 교재의 해설 내용이 부분 삽입되어야 한다. 교재는 영리 목적으로 제작된 것이기에 당분간은 불가피하게 코딩테스트 관련 포스팅을 쉬게 되었다. 다른 글은 계속 올릴 예정이다. 대문자와 소문자 이 문제는 푸는 데 좀 고생했다. 알파벳의 아스키 코드를 모르기 때문이다. 알파벳이 26개니까 대문자와 소문자의 아스키 코드가 26 차이가 날 거라고 생각했다. 대문자가 먼저인지 소문자가 먼저인지 몰라 일단 소문자가 먼저인 것으로 가정하고 계산해 봤다. 그런데 array 배열을 String 타입으로 선언했다. charAt 메소드의 결과들을.. 더보기
Java 코딩테스트 연습 13일차 (프로그래머스 스쿨 Lv.0, 1183점) 옹알이 (1) 대망의 정답률 29%짜리 문제다. 원래 계획은 하루종일 이 문제의 풀이를 고민하며 보내는 거였다. 그런데 허무하게도 생각보다 너무 금방 풀어 버렸다. 정답률이 왜 이렇게까지 낮은지 사실 잘 모르겠다. 하지만 이 문제를 풀면서, 교재에서 Lv.2 문제를 풀기 전에 Java를 더 공부해 둬야 할 필요성을 느꼈다. 그래서 원래 계획과 달리 정답률 높은 순으로 세 문제 더 풀게 되었다. 내일도 정답률 높은 순 세 문제를 더 풀고 남은 시간에 Java를 더 공부한 뒤, 모레부터 코딩테스트 문제풀이 전략 교재의 문제를 풀 생각이다. 처음 떠올린 방법은 contains() 메소드를 이 4가지 문자열들을 포함하는지 검사하고, 길이를 이용해 조건식을 만드는 것이었다. 문자열 종류가 4개이므로 한 문자열만 .. 더보기
Java 코딩테스트 연습 12일차 (프로그래머스 스쿨 Lv.0, 1176점) 안전지대 나에게는 상당히 어려운 문제였다. 지뢰가 있는 칸과 그 주변 8칸이 위험지역이고, 안전지역의 수를 계산해서 return해야 하는 문제다. 처음에는 지뢰의 위치에 따라 주변의 위험지역을 계산해 보려 했는데 고려해야 할 경우의 수가 너무 많아 잘 안 됐다. 그래서 고민하던 중, for 반복문을 이용해 모든 칸을 돌면서 위험지역인지 여부만 판단하는 방식으로 바꾸어서 푸니 보다 쉬워졌다. class Solution { public int solution(int[][] board) { int answer = n * n; for (int i = 1; i < board.length; i += 3) { for (int j = 1; j < board[i].length; j += 3) { if (board[i][.. 더보기