BACKEND/Java 50

[Java] String 클래스

String 클래스는 문자열을 구성하는 문자들을 내부에 저장한다. String 안에 저장된 문제에는 0부터 시작하는 번호가 매겨져 있는데 이를 인덱스(index)라고 한다. 자바 API 문서의 String 클래스에는 여러 메소드들이 있다. 자바에서 문자열을 선언하는 방법은 두 가지가 있다. (1) 생성자의 매개변수로 문자열을 생성 (원칙) String str1 = new String("abc"); (2) 문자열 상수를 가리키는 방식 (많이 사용하는 방법) String str2 = "def"; (1) length() 메소드: 문자열이 길이를 반환 // 객체 생성 String s = "Hello World!"; // 12가 반환됨 int size = s.length(); (2) charAt() 메소드: 객체..

BACKEND/Java 2022.09.23

[Java] Object 클래스

java.lang 패키지 자바 프로그램을 구현하기 위해 사용하는 클래스는 java.lang 패키지에 속해 있다. 예를 들면 String 클래스의 전체 이름은 java.lang.String이고, Integer 클래스의 전체 이름은 java.lang.Integer이다. 이와 같이 java.lang 패키지에는 기본적으로 많이 사용하는 클래스들이 포함되어 있다. 자바 프로그래밍에서 외부 패키지에 선언한 클래스를 사용할 때는 import문으로 클래스가 어느 패키지에 속해 있는지 선언해야 한다. java.lang 패키지에는 대표적으로 String 클래스도 속해있다. 하지만 실제 String 클래스를 쓰면서 import java.lnag.String; 이라는 문장을 쓰지 않는다. 왜냐하면 java.lang 패키지는 ..

BACKEND/Java 2022.09.23

[Java] 인터페이스와 다형성

인터페이스를 사용하면 다형성을 구현하는 확장성 있는 프로그램을 만들 수 있다. 즉 클라이언트 프로그램을 많이 수정하지 않고 기능을 추가하거나 다른 기능을 사용할 수 있다. 이를 이해하는 예제 프로그램을 만들어 본다. [예제 시나리오] 고객 센터에는 전화 상담을 하는 상담원들이 있다. 일단 고객 센터로 전화가 오면 대기열에 저장된다. 상담원이 지정되지 전까지 대기 상태가 된다. 각 전화를 상담원에게 배분하는 정책은 다음과 같이 여러 방식으로 구현할 수 있다. 1. 순서대로 배분하기: 모든 상담원이 동일한 상담 건수를 처리하도록 들어오는 전화 순서대로 상담원에게 하나씩 배분한다. 2. 짧은 대기열 먼저 배분하기: 고객 대기 시간을 줄이기 위해 상담을 하지 않는 상담원이나 가장 짧은 대기열을 보유한 상담원에게..

BACKEND/Java 2022.09.23

[Java] 인터페이스

여러 프로그래머들이 독립적으로 클래스를 작성하고, 이 클래스들을 합쳐서 하나의 소프트웨어를 완성한다고 한다. 이때 클래스들을 연결하려면 클래스 간의 상호작용을 기술하는 일종의 규격이 있어야 한다. 그래야 클래스들이 서로 잘 접속될 수 있다. 이러한 규격을 인터페이스(interface)로 정의한다. 구현 코드가 없는 인터페이스 인터페이스는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 즉 추상 메서드와 상수로만 이루어져 있다. 구현 코드가 없기 때문에 당연히 인터페이스로 인스턴스를 생성할 수 없다. 그렇다면 구현 코드가 없는 인터페이스는 어떻게 사용할까? 인터페이스를 만들어 본다. 패키지에서 마우스 오른쪽 버튼 클릭 - New - Interface 클릭 인터페이스 이름은 Cacl..

BACKEND/Java 2022.09.21

[Java] final 예약어

final은 '마지막'이라는 의미로 더 이상 수정할 수 없다는 뜻이다. 자바 프로그램에서는 final 예약어를 변수, 메서드, 클래스에 사용할 수 있다. 사용 위치 설명 변수 final 변수는 상수를 의미한다. 메서드 final 메서드는 하위 클래스에서 재정의 할 수 없다. 클래스 final 클래스는 상속할 수 없다. 간단한 예제를 통해 상수를 의미하는 final을 이해해 본다. 두 개의 변수를 선언했다. 하나는 int num, 다른 하나는 상수로 선언한 final int NUM이다. num으로 선언한 변수에는 50이라는 값을 대입할 수 있었지만, NUM으로 선언한 상수에는 값을 대입하는 순간 오류가 발생하는 것을 알 수 있다. package ch09_4; public class Constant { in..

BACKEND/Java 2022.09.21

[Java] 템플릿 메서드 - 게임 캐릭터레벨 기능 구현하기

템플릿 메서드를 활용한 게임 관련 프로그램을 구현해 본다. 게임 캐릭터의 경험치가 쌓이거나 어떤 이벤트를 통해 레벨이 올라간다. 플레이어의 레벨이 다르면 해당 레벨에 따라 할 수 있는 기능도 다를 것이다. 이와 같은 상황을 구현해 본다. Player가 게임을 한다. 게임에서 Player의 레벨에 따라 할 수 있는 기능은 세 가지이다. run( ), jump( ), turn( )이다. - 초보자 레벨: 천천히 달릴 수 있습니다. -> run( ) - 중급자 레벨: 빠르게 달리고 점프할 수 있습니다. -> run( ), jump( ) - 고급자 레벨: 엄청 빠르게 달리고 점프하고 턴할 수 있습니다. -> run( ), jump( ), turn( ) 모든 레벨의 player에게 필살기 메서드 go(int co..

BACKEND/Java 2022.09.20

[Java] 템플릿 메서드

'템플릿(templete)'이란 틀이 있는 메서드라고 볼 수 있다. 추상 클래스를 활용한 예로 템플릿 메서드를 알아본다. Car 클래스를 생성한다. 이 클래스는 drive(), stop() 이라는 추상 메서드와 startCar(), turnOff(), run()이라는 구현된 메서드를 가지고 있다. 시동을 켜고 끄는 것은 차종에 관계없이 동일하기 때문에 미리 코드로 구현했다. 그에 반해 drive(), stop()은 차종에 따라 다른 방식으로 움직일 수 있기에 추상 메서드로 선언했다. package ch09_2; public abstract class Car { public abstract void drive(); public abstract void stop(); public void startCar()..

BACKEND/Java 2022.09.20

[Java] 추상 클래스

추상 클래스(abstract class)는 완전하게 구현되어 있지 않은 메소드를 가지는 클래스를 의미한다. 메소드가 미완성이므로 추상 클래스는 객체를 생성할 수 없는데, 주로 상속 계층에서 추상적인 개념을 나타내기 위한 용도로 사용된다. 추상 클래스는 항상 추상 메서드를 포함한다. 추상 메서드에는 구현 코드가 없는데, 함수의 구현 코드가 없다는 것은 곧 함수 몸체인 body가 없다는 것을 뜻한다. int add (int x, int y){ return x+y; } 위 코드와 같이 중괄호 { }로 감싼 부분을 함수의 구현부(implementation)라고 한다. 이 부분이 없는 함수를 추상 함수(abstract function)이라 하고 자바에서는 추상 메서드(abstract method)라고 한다. 추상..

BACKEND/Java 2022.09.20