본문 바로가기
728x90
반응형

Java51

[Java Basic] 27. java.lang.StringBuffer, StringBuilder 클래스, 문자열 인코딩 앞선 포스팅에서 java.lang.String 클래스에 대한 내용을 설명하면서 String 클래스는 Immutable, 변수가 참조하는 메모리 주소에 저장된 값을 변경할 수 없다는 특성에 대해 설명했었다. 이러한 특성 때문에 String 인스턴스의 경우, "+"로 문자열을 합산하는 연산작업이나 변경 작업이 빈번해지는 경우, 메모리 공간 소모율이 증가할 수 밖에 없다. 따라서 Java에서는 변수에 할당된 값, 즉 메모리에 적재된 문자열 값도 메모리에서 바로 변경할 수 있는 StringBuffer라는 클래스를 별도로 제공한다. 변수가 참조하는 메모리 주소에 저장된 값을 변경할 수 있기 때문에 StringBuffer는 mutable(변이, 변경이 가능)한 특성을 가진다. StringBuffer 외에도 멀티스레.. 2022. 8. 16.
[Java Basic] 26. java.lang.String 클래스 이번 포스팅에서는 프로그래밍을 진행하면서 빼놓을 수 없는 문자열과 관련된 내용에 대해 알아보려한다. 문자열의 경우 C에서 문자 배열을 통해 구현하도록 되어 있으나, 이 과정이 번거롭기 때문에 Java에서는 String이라는 클래스를 제공하여 조금 더 간편하게 문자열을 표시할 수 있도록 하고 있다. String 클래스에 대한 본론으로 들어가보자. 1. String 클래스 특징 (1) Java 문자열은 문자 배열로 선언이 가능하다. 서두에서 언급한 내용대로, Java의 문자열은 문자(char) 배열과 동일한 의미를 가진다. String 클래스의 Documentation을 보면 지금까지 선언한 String 참조타입 변수 선언 형태를 문자 배열로도 동일하게 구현할 수 있음을 알 수 있다. 참고로 문자 배열 형태.. 2022. 8. 15.
[Java Basic] 25. java.lang.Object 클래스 Java에서 유일하게 import 없이 사용할 있는 패키지는 java.lang 패키지다. 기본 패키지인만큼 많이 사용하는 String, System 등의 클래스들이 대거 포함되어 있다. 이번 포스팅에서는 java.lang 패키지의 기장 기본적인 클래스인 Object를 비롯하여, 자주 사용하는 java.lang 패키지 클래스와 매서드에 대해 알아보려 한다. 먼저 최상위 클래스인 Object부터 살펴보자. [ java.lang.Object 클래스 ] java.lang.Object 클래스는 Java의 최상위 클래스이기 때문에, Java에서 생성된 모든 클래스의 상위 클래스로 지정된다. 따라서 Object 클래스에 정의된 모든 매서드는 하위 클래스에서 사용 및 오버라이딩(Override)이 가능하다. Objec.. 2022. 8. 12.
[Java Basic] 24. 예외 발생시키기와 사용자 지정 예외 생성 지난 포스팅에 이어 Java 예외와 관련된 내용을 계속 진행한다. 이번 포스팅에서는 Java의 패키지에 정의된 예외를 일부러 발생시키는 예외 발생(throw exception)과 사용자 지정 예외를 생성하는 방법에 대해 알아보려 한다. 1. 예외 발생시키기 - throw 문 작성한 코드에 문제가 없음에도 예외를 일부러 일으킬 수 있는 방법이 있다. Java는 throw라는 이름의 키워드를 제공하는데, 해당 키워드는 Java의 예외 클래스 인스턴스를 catch 문으로 던지도록 유도하는 역할을 한다. 따라서 throw문은 반드시 try 문 블럭 내에서만 사용이 가능하다. throw 문은 아래와 같이 사용한다. try { Exception_클래스명 참조변수명 = new Exception_클래스명 ("예외 설명.. 2022. 8. 8.
[Java Basic] 23. 예외처리(Exception Handling) Java 연습을 위해 코드를 작성하다보면 여러 에러를 맞닥드리게 된다. 작성한 코드가 에러를 가지는 경우, Eclipse의 콘솔창에는 아래와 같은 형태의 문구가 출력된다. 에러가 발생하면서 나타나는 가장 큰 문제는 작성한 프로그램이 비정상 종료를 한다는 것이다. 다른 말로 하자면, 개발자들이 의도한대로 프로그램이 끝까지 동작하지 못하고 중단된다는 것이다. 예를 들어보자. 사용자가 금액을 입력하면, 해당 금액만큼 인출하는 프로그램이 있다고 해보자. Java로 연습을 많이 진행해보신 분들이라면, 정수 외의 값이 입력되는 경우 에러가 발생한다는 것을 금방 알아차릴것이다. 위의 예시의 경우, 필자가 의도한 프로그램의 동작이 " $$$ 원이 인출되었습니다:" 에서 종료되는 것임에도 불구하고, 에러로 인해 12번 .. 2022. 8. 3.
[Java Basic] 22. 추상클래스와 인터페이스 Java에서 클래스는 객체의 특성과 행위를 정의하는데 사용한다. 그리고 객체를 정의한 클래스 사이 공통점이 많이 존재하는 경우, 관리를 위해 유사한 클래스를 묶어 관리할 수 있도록 상위 클래스를 정의하기도 한다. 바로 직전의 포스팅에서 구매 목록인 "문구"와 "과일"을 "품목" 클래스로부터 상속받아 사용하게 하는 것이 그 예이다. 즉, 지금까지 필자가 포스팅을하며 작성해왔던 클래스들은 각 객체의 특성과 행위를 매우 구체적으로 정의한 것이다. 하지만, 모든 객체를 이런식으로 구체화하기에는 현실적인 어려움이 있다. 따라서 Java에서는 구체화 할 수 없는 객체에 대해 정의할 수 있도록 추상클래스와 인터페이스라는 것을 제공한다. 일반 클래스 파일이 완성된 계획서라면, 추상클래스와 인터페이스는 미완성 계획서와 .. 2022. 7. 31.
[Java Basic] 21. 클래스 다형성 Java 클래스는 다형성이라는 성질을 띄고 있다. 다형성(Polymorphism)은 여러(多, Poly) 형태(形, morphology)를 가질 수 있는 성질을 말한다. 다형성은 클래스로부터 만들어지는 인스턴스를 다른 클래스의 인스턴스로 변환할 수 있도록 만듦으로써, 하나의 객체가 여러 형태를 띌 수 있도록 만드는 것이다. 지금까지는 인스턴스 생성을 위해 각 클래스 이름으로 참조변수 선언과 생성을 진행해왔기 때문에 "무슨 귀신 씨나락 까먹는 소리를 하는가"라는 의문이 들 수도 있다(필자 역시 이 부분을 배울 때 그런 생각을 했다...) 사실 실습 없이 설명하기에는 어려운 부분이 많아 바로 예시와 함께 정리해보려 한다. 1. 상속관계의 인스턴스 형 변환 필자는 기본 패키지에 Main, ParentLee ,.. 2022. 7. 27.
[Java Basic] 20. final 제어자 Java에서 제어자는 클래스 또는 클래스 내부의 정보에 대한 접근을 통제하는 역할을 한다. 제어자는 크게 접근 제어자와 기타 제어자로 나뉘며, 필자는 지난 포스팅에서 접근 제어자 4가지가 어떻게 동작하는지 확인해보았다. 이번 포스팅에서는 기타 제어자에 대해 알아보려 한다. 기타 제어자는 지금까지 포스팅에서 많이 사용한 static 외에도 final, abstract, synchronized, strictfp 등 여러 종류가 있지만, static과 final, abstract를 제외하고는 기초 단계에서 크게 사용할 일이 없다고 한다... 더군다나 static은 필자가 java 포스팅 초반부에 설명을 한 적이 있어서 이번에는 final에 대해서만 포스팅하려 한다. 참고로 abstract는 추상 클래스/매서드.. 2022. 7. 23.
[Java Basic] 19. 접근 제어자(Access Modifier) Java에서 클래스를 사용하여 프로그래밍을 작성하다보면, 클래스 내에 존재하는 멤버 변수에 대한 내용을 함부로 변경하거나 조회하는 것을 금지하고 싶은 경우가 있다. 아래의 예시를 보자. 필자가 어떤 사이트에 가입한 회원 정보와 관련된 클래스인 Customer를 아래와 같이 작성한 뒤, Main 함수에서 2명의 고객에 대해 인스턴스를 생성했다고 가정해보자. 두 클래스는 default package에 포함되어 있다. Customer 클래스의 멤버변수 중 절대 타인에게 보여서는 안되는 가장 중요한 정보가 비밀번호(cust_pw)다. 따라서 고객 본인 외에 타인에게 이 비밀번호는 절대 노출되어서는 안된다. 하지만 인스턴스로 비밀번호 변수를 호출하면 아무런 방해없이 이 정보를 확인할 수 있게 된다. 더 심한 경우.. 2022. 7. 21.
[Java Basic] 18. 패키지와 Import 1. Java의 Package는 무엇인가? 지금까지 필자가 작성한 Java 포스팅에서, 필자는 이제 프로그래밍을 시작하는 독자분들을 위해 하나의 .java 파일에 하나 이상의 클래스를 통째로 작성하여 예시를 들어왔었다. 하지만 Java에서 .java 파일이 컴파일되어 하나의 class 파일을 생성한다는 것을 상기해보면, 하나의 .java 파일에는 하나의 객체에 대한 내용만 클래스로 작성하는 것이 올바른 방법이다. 위의 코드는 필자가 클래스 상속과 관련된 내용에 대해 설명하면서 사용한 코드다. ClassEx.java 파일에 무려 3개의 클래스 코드가 작성이 되어 있는데, 클래스 Cessna150과 FA18EF는 각각 Cessna150.java, FA18EF.java 파일에 별도로 작성을 하는 것이 좋다는 .. 2022. 7. 16.
[Java Basic] 17. 상속 관계 클래스의 매서드 오버라이드 지난 포스팅에서는 클래스 사이 상속 및 포함 관계에 대해 알아보았다. 상속관계에 있는 클래스에서, 하위(자식) 클래스는 아무런 정의가 되어 있지 않더라도 상위(부모)로 지정된 클래스의 멤버변수와 매서드를 마음대로 가져와서 쓸 수 있음을 지난 포스팅에서 확인했었다. 그런데, 상위 클래스의 매서드를 빌려 쓰는 것도 문제가 될 수 있다. 예를 들어, 사람이라는 객체를 클래스로 정의했다고 해보자. 클래스에는 이 사람의 성별, 나이, 직업, 연봉 등의 정보가 포함되어 있다고 하자. 그리고 사람의 정보를 출력하는 매서드가 아래와 같이 정의되어 있다고 가정하자. 이 Human 클래스 하위에 Adult와 Child 클래스를 생성한다고 해보자. 그럼, Adult와 child 모두 print_info() 매서드를 사용할 .. 2022. 7. 11.
[Java Basic] 16. 클래스의 상속관계와 포함관계 객체지향에서 클래스는 특정 객체의 특성 및 행위를 정의한 일종의 정의서다. 필자의 앞선 클래스 관련 포스팅을 보았다면 알겠지만, 클래스를 사용하면 우리 주변의 물체를 코딩으로 쉽게 구현할 수 있다. 그런데, 모든 물체를 하나의 클래스로 일일이 구현하기에는 비효율적인 면이 분명 존재한다. 예를 들어보자. 요즘 영화관에서 "탑건"이 매우 인기를 끌고 있으니, 비행기를 객체로 클래스를 한 번 만들어보려 한다. 필자는 두 모델에 대한 비행기를 클래스로 정의하려 한다. 하나는 경비행기인 Cessna 150이고, 다른 하나는 영화에 등장하는 미 해군 주력 기종인 F/A-18 E/F 호넷이다. 세스나는 Cessna150이라는 이름으로, 호넷은 FA18EF라는 이름으로 각각의 클래스를 생성하고 일부 특성과 엔진 On_.. 2022. 7. 11.
728x90
반응형