Java 109

[객체지향][자바의 정석] - 9.3 StringBuffer클래스

1. StringBuffer 클래스 특징 String처럼 문자형 배열(char[])을 내부적으로 가지고 있다. 문자열을 저장하고 다루기 위한 클래스 String과 달리 내용을 변경할 수 있다. (Mutable) append( )는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환 배열의 길이 변경불가하기 때문에 공간이 부족하면 새로운 배열을 생성해야 한다. 공간이 부족하면 새로 배열을 만들고 복사해주어야 한다. 문자열의 길이를 고려해서 적절한 크기로 생성해야 한다. StringBuffer는 equals( )가 오버라이딩 되어있지 않다. 이는 주소를 비교한다는 의미로 StringBuffer를 String으로 변환해서 equals( )해주어야 제대로 비교가 된다. 2. ..

Java/객체지향 2022.01.17

[객체지향][자바의 정석] - 9.2 String 클래스

1. String 클래스의 특징 String 클래스 = 데이터(char[]) + 메서드(문자열 관련) 내용을 변경할 수 없는 불변(immutable) 클래스 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어진다. 문자열의 결합이나 변경이 잦다면, 내용 변경이 가능한 StringBuffer를 사용 2. 빈 문자열("", empty String) 내용이 없는 문자열, 크기가 0인 char형 배열을 저장하는 문자열 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능하다. 문자(char)와 문자열(String)의 초기화 new 연산자를 통한 빈 문자열을 만드는 것보다 객체 하나를 다같이 돌려 사용하는 것이 바람직하다. 3. String클래스의 생성자와 메서드 4. 문자열과 기본형간의 변환 숫자를 문자열로 ..

Java/객체지향 2022.01.08

[객체지향][자바의 정석] - 9.1 Object 클래스

1. Object 클래스의 메서드 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다. notify( ), wait( )등은 쓰레드와 관련된 메서드이다. equals( ), hashCode( ), toString( )은 적절히 오버라이딩해야 한다. 2. equals(Object obj) 객체가 자신과 주어진 객체(obj)를 비교한다. 같으면 true 다르면 false Object클래스에 정의된 equals( )는 참조변수 값(객체의 주소)을 비교한다. 서로 다른 객체는 주소가 항상 다르다. equals( )를 오버라이딩해서 인스턴스변수의 값을 비교하도록 바꾼다. package javaStandard; public class Ex9_1_1..

Java/객체지향 2021.12.28

[객체지향][자바의 정석] - 8.1 예외처리(Exception Handling)

8.1 예외처리(Exception Handling) 1. 프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생시점에 따라 '컴파일 에러(compile - time error)'와 '런타임 에러(runtime error)'로 나눌 수 있는데, 글자 그대로 '컴파일 에러'는 컴파일 할 때 발생하는 에러이고 프로그램 실행 도중에 발생하는 에러를 '런타임 에러'라고 한다. 이외에도 '논리적 에러(logical error)'가 있는데, 컴파일도 잘되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 논리적 에러라고 말한다. 에러 이름 에러 발생시점 컴파일 에러 컴파일 시에 발생하는 에..

Java/객체지향 2021.12.27

[객체지향][자바의 정석] - 7.8 내부 클래스(Inner class)

7.8 내부 클래스(Inner class) 1. 내부 클래스(Inner class)란? 클래스 안에 선언된 클래스 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다. GUI어플리케이션(AWT, Swing)의 이벤트처리에 많이 사용된다. ▶ 내부 클래스의 장점(A클래스(외부클래스) 안에 B클래스(내부 클래스)를 넣는 경우) 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. 코드의 복잡성을 줄일 수 있다. (캡슐화) package javaStandard; class A{//외부 클래스 class B{//내부 클래스 /*1. 객체 생성 없이도 A의 멤버에 접근이 가능하고 2. B가 A의 외부에서 사용할 필요가 없다면 A 안에서만 사용하면 복잡성이 줄어듬*/ } } package ..

Java/객체지향 2021.12.14

고급객체지향 프로그래밍 - MVC 패턴(Model-view-Controller Pattern)

MVC 패턴(Model-View-Controller Pattern) 1. 목적 업무 로직 및 데이터와 보이는 부분을 분리한다 사용자 인터페이스 로직이 비지니스 로직보다 더 자주 바뀐다면 MVC를 사용하는 것이 바람직하다. 화면을 포함하는 사용자 인터페이스와 업무 처리 부분을 분리해서 동작할 수 있도록 한다. MVC는 원래 Smalltalk 언어에서부터 시작되었으나 현재 GUI를 지원하는 프로그램과 웹프레임워크에서 많이 사용 된다. 요소 설명 이름 MVC 혹은 Model-view-Controller 문제 데이터와 해당 데이터를 보여주는 부분의 코드가 섞여 있다. 해결방안 데이터와 뷰를 분리하고 이들을 연동시키는 컨트롤러를 추가한다. 결과 Loose coupling(낮은 결합도), 재사용성이 높아진다. 모델..

고급객체지향 프로그래밍 - 템플릿 메소드 패턴(Template Method pattern)

1. template method pattern이란? 간단하게 구현된 알고리즘의 직접적인 변경 없이(알고리즘의 구조 변경 없이) 서브클래스를 사용하여 일부를 재정의하여 사용할 수 있는 것을 의미한다. package smu_2; public abstract class CaffeineBeverage{ public final void prepareRecipe() {//final로 레시피(알고리즘)를 고정시켜 놓는다. 오버라이딩을 금지시키기 위함 boilWater(); brew(); pourInCup(); addCondiments(); } /*추상메소드를 사용해서 자식클래스내에서 필요한대로 구현하게 하기 위함 왜냐면 커피, 홍차 등 음료마다 커피를 끓이거나 홍차를 끓이거나 넣는 여러가지들이 다르기 때문에 추상클..

스테이트 패턴(State Pattern)

스테이트 패턴(State Pattern) 1. 목적 객체의 내부 상태가 바뀔 때 객체의 동작을 변경할 수 있도록 한다. 객체는 자신의 클래스를 바꾸는 것처럼 보인다. 구분 설명 State(상태) 시점에 따라 특정 상태에 있어야 한다. 처음에 가지게 되는 초기상태(state) 또는 상황에 따라 여러 상태 가운데 한 상태를 가질 수 있다 Transition(전이) 외부 입력에 따라 가능한 상태로 전환 예 게임 캐릭터: 걷는 상태, 뛰는 상태, 멈춘 상태 가전 제품: on, off, sleep 지하철 개찰구: 열림, 잠금 2. 요소 요소 설명 이름 스테이트(State) 문제 상태(state)가 여러 개 있고, if문으로 상태를 통제 해결방안 상태를 한 곳에서 관리 결과 변경 최소화 public class Ma..