문제 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private static int N,M; priva..
제네릭이란? 제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미합니다. 흔히 ArrayList, LinkedList를 생성할 때 사용해 본 경험이 있으실 겁니다. //타입 + 배열 자료형 int[] arr = new int[3]; //리스트 자료형 + ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); ArrayList list3 = new ArrayList(); 이처럼 클래스 안에 로 되어 있는 부분이 바로 제네릭입니다. 배열의 타입을 지정하듯이 리스트 자료형 같은 래퍼 클래스나 메서드에서 사용할 데이터 타입(type)을 매개변수(parameter) 주듯이 외부에서 지정하는 이른바 타입을 변수화 한..
Garbage Collection(GC) 이란? 가비지 컬렉션(Garbage Collection)은 자바의 메모리 관리 기법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말합니다. C / C++언어에서는 가비지 컬렉션이 없어 수동으로 메모리 할당과 해제를 해줘야 하지만 Java는 가비지 컬렉터가 대행해 주기 때문에 한정된 메모리를 효율적으로 사용할 수 있습니다. 따라서 개발에만 집중할 수 있다는 장점이 있습니다. 가비지 컬렉션 vs 가비지 컬렉터 가비지 컬렉션은 사용하지 않는 메모리를 해제하는 행위를 말하고, 가비지 컬렉터는 행위의 주체(프로그램)를 말합니다. 즉 가비지 컬렉터가 가비지 컬렉션을 수행합니다. Heap ..
자바의 메모리 영역 자바 프로그램을 실행 하게 되면 JVM은 OS(운영체제 ex. 윈도우, 유닉스, 리눅스) 로 부터 메모리를 할당 받습니다. 할당 받은 메모리를 용도에 따라서 여러 영역으로 나누어 관리합니다. JVM의 메모리 공간(Runtime Data Area)은 크게 메서드(Method) 영역, 스택(Stack) 영역, 힙(Heap) 영역으로 구분되고 데이터 타입에 따라 각 영역에 나눠서 할당 되게 됩니다. 컴퓨터의 메모리는 한정된 공간이기 때문에 어떻게 관리하고 사용하느냐에 따라서 성능(속도)이 좌우됩니다. 따라서 Java 어플리케이션에서 메모리를 효율적으로 사용하기 위해서는 메모리 구조와 특징에 대해 이해할 필요가 있습니다. 1. 메서드 영역(Static or Method) JVM이 실행되고 클..
Java 동작 과정 전체적인 동작 과정은 컴파일 수행 -> 클래스 로딩 -> 메모리 할당 -> 바이트 코드 해석 및 실행 -> 가비지 컬렉션 -> 예외 처리 -> 프로그램 종료 과정을 수행합니다. 위 그림은 전체적인 자바의 실행 과정을 보여줍니다. 그럼 이제 조금씩 나누어서 과정을 살펴보겠습니다. 1. 컴파일 (Compile) 컴파일러 (Compiler)는 '해석기'라는 뜻으로 인간이 사용(이해)하는 고레벨언어를 기계가 이해할 수 있는 기계어(저 레벨 언어)로 해석해 주는 번역 프로그램입니다. 사람이 java언어로 Member라는 클래스를 만들면 IDE,Eclipse같은 IDE들은 자동 컴파일 기능을 갖추고 있어, 파일을 저장하는 순간 자동으로 컴파일을 수행합니다. 이렇게 자동으로 컴파일된. class ..
1. 접근 제어자 이해 자바는 public, private 같은 접근 제어자를 제공합니다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있습니다. 이런 접근제어자가 왜 필요한지 예시를 통해 이유를 알아보겠습니다. 예시) 제가 만약 스피커를 만드는 SW개발자라고 하겠습니다. 또한 스피커의 음량은 절대 100을 넘으면 안되는 요구사항이 있다고 가정하겠습니다. (100을 넘어가면 스피커의 부품들이 고장난다.) 요구사항 스피커 객체 만들기 스피커는 음량을 높이고, 내리고, 현재 음량 확인 기능이 존재한다. 스피커의 음량은 최대 100까지만 증가할 수 있다. 초과 불가. Speaker package access; public class Speaker { i..
1. 패키지 1-1. 패키지 개요 여러분이 만약 쇼핑몰 시스템을 개발한다고 가정해보겠습니다. 처음에는 프로그램이 매우 작고 단순해서 클래스가 몇게 없다면 고민할 거리가 없겠지만, 기능이 점점 추가되어서 프로그램이 점점 커지게 된다면 관련 있는 기능들을 분류해서 관리하고 싶을 것입니다. 컴퓨터는 보통 파일을 분류하기 위해 폴더, 디렉토리라는 개념을 사용합니다. 자바도 이런 개념을 제공하는데, 이것이 바로 패키지입니다. 1-1-1. 패키지 사용 패키지는 패키지를 먼저 만들고 그 다음에 클래스를 만들어야 합니다. 패키지의 자세한 내용은 예시 코드를 통해 말씀드리겠습니다. 먼저 pack 패키지에 Data클래스를 만들어보겠습니다. package pack; public class Data { public Data(..
1. 생성자 1-1. 생성자가 필요한 이유 객체를 생성하는 시점에 어떤 작업을 하고 싶다면 생성자(Constructor)를 이용하면 됩니다. 밑에서 간단한 코드로 설명드리겠습니다. 전체 코드 package construct; public class MemberInit { String name; int age; int grade; } package construct; public class MethodInitMain1 { public static void main(String[] args) { MemberInit member1 = new MemberInit(); member1.name = "user1"; member1.age = 15; member1.grade = 90; MemberInit member2 ..
1. 절차 지향 프로그래밍 프로그래밍 방식은 크게 절차 지향 프로그래밍과 객체 지향 프로그래밍으로 나눌 수 있습니다. 절차 지향 프로그래밍 절차 지향 프로그래밍은 이름 그대로 절차를 지향합니다. 쉽게 이야기해서 실행 순서를 중요하게 생각하는 방식입니다. 절차 지향 프로그래밍은 프로그램의 흐름을 순차적으로 따르며 처리하는 방식입니다. 즉, "어떻게"를 중심으로 프로그래밍합니다. 객체 지향 프로그래밍 객체 지향 프로그래밍은 이름 그대로 객체를 지향합니다. 쉽게 이야기해서 객체를 중요하게 생각하는 방식입니다. 객체 지향 프로그래밍은 실제 세계의 사물이나 사건을 객체로 보고, 이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식입니다. 즉, "무엇을" 중심으로 프로그래밍합니다. 절차 지향은 데이터와 해당 ..
1. 변수와 초기화 1-1. 변수의 종류 멤버 변수 (필드) : 클래스에 선언 지역 변수 : 메서드에 선언, 매개변수(파라미터)도 지역 변수의 한 종류입니다. 지역 변수는 이름 그대로 특정 지역에서만 사용되는 변수라는 뜻입니다. 멤버변수(필드) 예시 코드 package class1; public class Student { String name; int age; int grade; } name, age, grade 는 멤버 변수입니다. 지역 변수 예시 코드 1 package class1; public class ClassStart3 { public static void main(String[] args) { Student student1; student1 = new Student(); Student st..