자바에서 문자열을 다루고 싶을 때 우리는 별 의심없이 String 클래스를 사용하곤 한다. 하지만 상황에 따라서 어떤 문자열 클래스를 사용하느냐에 따라 자원을 더 절약할 수 있고, 능률이 올라갈 수 있는 법이다. 따라서 여러 문자열 클래스에 대해 정리해 보도록 하겠다. String vs StringBuffer vs StringBuilder 위 세 클래스는 모두 문자열 클래스이다. 자바에서는 왜 이렇게 다양한 클래스들을 만들어 놓았을까? 각 클래스의 차이점을 아래 코드를 통해 확인해 보도록 하자. public class StringTest { public static void main(String[] args) { String str = new String("Hello"); StringBuffer strb..
자바에서 String 클래스를 사용하면서 하나의 의문점이 생겨서 이 글에 정리해보도록 한다. 보통 초기화를 할 때 두 가지 방법이 존재한다. 직접 문자열 상수를 넣거나, new 연산자를 이용하여 사용하는 것이다. 그 형태는 아래와 같다. String s = "Hello World!";String s = new String("Hello World!"); 위 문법을 적용시킨 코드를 통해 자세히 알아보도록 하자. public class StringTest { public static void main(String[] args) { String s1 = "Hello World!"; String s2 = new String("Hello World!"); System.out.println(s1); System.ou..
오버로딩(Overloading) 오버로딩(Overloading)이라는 뜻은 사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것이다. 하지만 자바에서는 하나의 메소드 이름으로 여러 기능을 구현하기 때문에 '과적하다.'라는 뜻의 이름을 붙여준 것으로 보인다. 오버로딩의 정의는 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다. 오버로딩의 조건 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 '리턴 값만' 다른 것은 오버로딩을 할 수 없다는 것이다. 아래의 코드를 통해서 예를 들어보자..
제어자 클래스, 메소드, 변수의 앞에 public, final 이런식으로 선언부를 제외하고 앞에 붙어있는 것들을 보았을 것이다. public static void main(String[] args) { // TODO Auto-generated method stub } 이클립스에서 자동으로 main을 생성하면 위와같은 형식의 main메소드가 생성된다. void main(String[] args)까지는 이해할 수 있겠다. 근데 앞에 붙어있는 public과 static은 어떤 역할을 하는 것일까? 이들은 제어자라고 불린다. 선언부에 함께 사용되어 부가적인 의미를 부여하는 역할을 한다. 대표적으로 접근 제어자가 있고, 그 이외에 다른 기능을하는 제어자들이 존재한다. 이 개시물에서는 접근 제어자만 다뤄보도록 하겠..
먼저 프로그램에서 오류라는 것은 무엇일까? 오류라는 것은 프로그램이 비정상적으로 종료되거나 잘못된 행동을 하는 경우가 있는데, 이러한 행동들의 원인을 프로그램 오류(Program Error)라고 한다. 에러 이러한 에러들은 발생 시점에 따라 컴파일 에러와 런타임 에러로 나눌 수 있다. 컴파일 에러는 말 그대로 컴파일 시에 발생하는 에러이고, 런타임 에러는 실행중에 나타나는 에러이다. 그리고 덧붙여서 논리적 에러가 있는데, 이는 프로그램의 실행에는 문제가 없으나 의도와 다른 행동을 하는 것을 말한다. 컴파일 에러 - 컴파일 시 발생하는 에러런타임 에러 - 실행중에 발생하는 에러논리적 에러 - 실행에는 문제가 없으나 의도와는 다른 행동을 하는 것 우리가 프로그래밍을 할 때, 다양한 IDE를 사용하는데 그것은..
클래스 디자인(Class design)이라는 것은 한 프로그램의 클레스를 설계하는 것이다. 어떤 건물을 지을 때 건물의 설계도를 그리고 그 설계도에 따라서 건물을 짓는다. 그리고 그 설계도라는 것은 규모가 커질수록 중요도가 높아진다. 소프트웨어도 마찬가지이다. 만약 소규모 프로젝트를 진행함에 있어서 설계도는 간단하게 넘어갈 수도 있다. 하지만 프로젝트의 규모가 커질수록 그 설계도는 정교하게 작성되어야 할 것이다. 먼저 클래스, 추상 클래스, 인터페이스의 개념을 잡고 넘어가도록 하자. 클래스(Class) 클래스는 하나의 설계도라고 보면 될 것이다. 클래스에는 멤버변수, 메소드, 내부 클래스 등이 존재할 수 있다. 이 클래스라는 설계도를 통해 실체화한 것이 객체(Instance)이다. 또는 인스턴스라고 말하..
기존의 클래스를 재사용하는 것이다. 적은 양의 코드로 새로운 클래스를 구현할 수 있고, 공통된 코드를 수정하는데에도 용이한 기법이다. 만약 사람이라는 클래스와 학생이라는 클래스를 정의한다고 했을때, 학생이라는 클래스는 사람이라는 공통된 성질을 가지면서, 학생이라는 특수한 성질을 가질 수 있다. 따라서 학생 클래스를 정의한다고 할때, 사람이라는 클래스를 상속받아서 공통된 특성을 포함시키고, 학생의 특수한 부분은 따로 만들어낼 수 있다는 것이다. 아래 코드를 통해 자세히 알아보도록 하자. // 사람 class Person { int age;// 나이 String name;// 이름 // 먹는다 void eat() {} } // 학생 class Student extends Person { int student..
환경변수 공식적인 의미의 환경변수(Environment variable)는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들이다. OS상에서 동작하는 응용프로그램들이 참조하기위한 설정이 기록된다. 따라서 이 환경변수를 건드려야 할 상황이 생긴다면 신중하게 해야한다. 때에 따라서 프로그램의 정상적인 동작을 보장받지 못할 수 있기 때문이다. 그래서 우리가 주로 개발환경을 설정해야할 때 변경하는 환경변수는 Path나 CLASSPATH정도가 되겠다. 환경변수에도 두가지가 존재한다. 사용자 변수 - OS내의 사용자 별로 다르게 설정가능한 환경변수시스템 변수 - 시스템 전체에 모두 적용되는 환경변수 다른 사용자에게 영향을 미치느냐 미치지 않느냐에 따라서 환경변수를 변경할때도 주의를 기울이도록 해야한다..