일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코린이
- 인스턴스
- throws
- node.js
- ArrayList
- 다형성
- 인터페이스
- FileInputStream
- Java
- 자바
- 보조 스트림
- exception
- SSR
- 문자 단위 스트림
- 예외 처리
- 상속
- 메서드
- MPA
- 코딩
- 졸리다
- 배열
- 개발자
- 바이트 단위 스트림
- try-catch
- 새벽공부
- 초보개발자
- 자료형
- 백엔드
- 파이팅
- 변수
- Today
- Total
목록자바 (53)
SHUSTORY
인터페이스의 역할 메서드 선언부만 있는 인터페이스를 사용하는 이유는 무엇일까? 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 미리 알려주는 명세의 역할을 한다. * 참고로 서버는 기능을 제공하는 쪽, 클라이언트는 기능을 사용하는 쪽을 의미한다. 예를 들어 인퍼에이스 A가 있고, 이를 구현한 B 클래스와 B 클래스를 사용하는 C 프로그램이 있다고 가정해보자. A에는 어떤 매개변수가 사용되며 어떤 자료형이 반환되는지와 함께 구현할 추상 메서드가 모두 선언되어 있다. 즉 C에서는 B의 구현 코드 전체를 살펴보지 않더라도 A만 보면 이 B 클래스를 어떻게 사용할지 알 수 있다. 이렇듯 프로그램에서 각 클래스를 사용할 때 클래스에서 구현한 내용을 몰라도 인터페이스에서 선언한 메서드의 매개변수 자료형과..
인터페이스 인터페이스는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 구현된 코드가 없고 추상 메서드와 상수로만 이루어져 있어 인스턴스를 생성할 수 없다. 인터페이스 만들기 이클립스 File - Interface를 클릭하거나 Ctrl + N을 눌러 interface를 클릭해 생성할 수도 있다. 인터페이스에서 선언한 변수는 public static final 예약어를 사용하지 않아도 컴파일 과정에서 상수로 변환된다. 인터페이스에서 선언한 메서드는 구현 코드가 없으며, abstract abstract 예약어를 사용하지 않아도 컴파일 과정에서 추상 메서드로 변환된다. 클래스에서 인터페이스 구현하기 선언한 인터페이스를 클래스가 사용하는 것을 '클래스에서 인터페이스를 구현한다' 라고 표..
final 예약어 사용 위치 설명 변수 final 변수는 상수를 의미한다. 메서드 final 메서드는 하위 클래스에서 재정의할 수 없다. 클래스 final 클래스는 상속할 수 없다. 상수를 의미하는 final 변수 상수를 선언할 때는 일반 변수와 구별하기 위해 대문자로 쓰는 경우가 많다. 상수는 변하지 않는 수이다. 그렇기 때문에 10행에서 다른 값을 대입할 수 없기에 오류가 발생한다. 여러 자바 파일에서 공유하는 상수 값 정의하기 하나의 자바 파일에서만 사용하는 상수 값은 해당 파일 안에서 정의해서 사용할 수 있다. 그런데, 프로젝트를 하다 보면 여러 파일에서 똑같이 공유하는 상수 값도 있는데, 이 경우 그러한 상수 값들을 한 파일에 모아 public static final로 선언하여 사용하면 좋다. ..
예제를 통해 템플릿 메서드 구현하기 Player가 있고, 레벨은 초보자 / 중급자 / 고급자로 세 가지가 있다. 초보자는 run / 중급자는 run, jump / 고급자는 run, jump, turn이 가능하다. 모든 레벨에서 Player가 go를 하면 한 번 run하고, 매개변수로 전달받은 count만큼 jump하고, 한 번 turn한다. 해당 레벨에서 불가능한 기능을 요청하면 할 수 없다는 메세지를 출력한다. 클래스 기능과 관계 예제 시나리오를 코드로 구현하기 전에 무조건 클래스를 만들어 코딩하는 것보다 주어진 문제를 어떻게 해결할 것인지 생각해보고, 손으로 클래스 다이어그램을 간단히 그려보는 것이 객체 지향 방식으로 문제를 해결하는 좋은 습관이다. 큰 프로젝트를 진행할 때는 이 과정을 분석 / 설계..
추상 클래스와 템플릿 메서드 템플릿 메서드는 디자인 패턴 중 하나로, 모든 객체 지향 프로그램에서 사용하는 구현 방법이다. 템플릿 메서드는 추상 클래스를 사용하여 구현할 수 있으며 예제를 통해 살펴보도록 하자. run( ) 메서드는 자동차가 달리는 방법을 순서대로 구현해 두었다. 시동을 켜고, 달리고, 멈추고, 시동을 끈다. Car 클래스를 상속받으면 어떤 자동차든 모두 이 순서대로 동일한 방식으로 달리는 것이다. 추상 메서드 중 하나라도 구현하지 않는다면 추상 메서드를 포함하고 있기 때문에 추상 클래스가 된다. Car 클래스를 상속받는 AICar 클래스와 ManualCar 클래스는 구현되지 않은 추상 메서드를 마저 구현하여 작성하자. 이제 테스트 프로그램을 만들어 각 차가 어떻게 움직이는지 확인해보자...
추상 클래스 추상 클래스를 영어로 표현하면 abstract class이고, 추상 클래스가 아닌 클래스는 concrete class라고 한다. 추상 클래스는 항상 구현 코드가 없는 추상 메서드를 포함한다. { }로 감싸진 함수의 구현부, 즉 함수 몸체가 없는 함수를 추상 메서드라고 한다. 추상 메서드는 abstract 예약어를 사용하며, { } 대신 ; 를 사용한다. 참고로 { } 를 사용하면 그것만으로도 메서드를 구현한 셈으로, 다음과 같은 메서드는 추상 메서드가 아니다. 자바에서 추상 메서드는 abstract 예약어를 사용하여 선언만 하는 메서드이다. 우리가 프로그램을 구현하고자 코딩을 하는 과정에서 로직을 만들고 기능을 구현할 때, 가장 중요한 것은 어떻게 구현할지를 결정하는 개발 설계 과정이다. 예..
하위 클래스로 형 변환, 다운 캐스팅 상위 클래스로 형 변환되었던 하위 클래스를 다시 원래 자료형으로 형 변환하는 것을 다운 캐스팅이라고 한다. 상위 클래스인 Animal 클래스와 하위 클래스인 Human / Tiger / Eagle 클래스가 있다. 여기서 Animal ani = new Human( ); 코드에서 생성된 인스턴스 Human은 Animal형이다. 인스턴스 Human은 Animal 클래스에서 선언한 메서드와 멤버 변수만 사용할 수 있다. 이럴 때 경우에 따라 다시 원래 인스턴스 자료형으로 되돌아가야 하는 경우가 있는데, 이럴 때 다운 캐스팅이 이루어진다. instanceof 다운캐스팅을 하기 전 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 변환할 때 오류를 방지할 수 있는데, ..
다형성을 활용하면 프로그램을 유지보수하는 데 매우 편리하다. 이 때 배열을 함께 사용하면 여러 하위 클래스 자료형을 상위 클래스 자료형으로 한꺼번에 관리할 수 있다. 일반 고객과 VIP 고객의 중간 등급 만들기 [ GOLD 고객 ] 제품을 살 때는 항상 10% 할인해 준다. 보너스 포인트를 2% 적립해 준다. 담당 전문 상담원은 없다. 위 등급의 고객을 Customer 클래스를 상속받아 GoldCustomer 클래스를 만들어 구현해보자. Customer 클래스를 상속받았기 때문에 지불 가격과 보너스 포인트를 계산하는 calcPrice( ) 메서드만 재정의하여 새로운 기능을 쉽게 추가하여 구현할 수 있다. 배열로 고객 5명 구현하기 VIP고객 1명, GOLD고객 2명, SILVER고객 2명을 객체 배열 A..
다형성 다형성이란 하나의 코드가 여러 자료형으로 구현되어 실현되는 것을 의미한다. 쉽게 말해 같은 코드에서 여러 실행 결과가 나오는 것이다. Animal 클래스를 상속받는 Human 클래스 / Tiger 클래스 / Eagle 클래스가 있고, Animal 클래스의 메서드를 하나 정의하고 상속받은 클래스에서 재정의해보자. AnimalTest 클래스를 통해 어떤 인스턴스가 매개변수로 넘어와도 모두 Animal 형으로 변환하도록 한다. 예를 들어 매개변수가 전달되는 부분에 Human 인스턴스가 전달되었다면 다음 코드와 같이 형 변환된다. 가상 메서드의 원리에 따라 animal.move( ) 메서드가 호출하는 메서드는 Animal의 move가 아닌 매개변수로 넘어온 실제 인스턴스의 메서드이다. animal.mov..
상위 클래스 메서드 재정의하기 08-1 상속 예제에서 VIP 고객에게 제공하는 할인율과 세일 가격을 어떻게 적용할지 구현하지 않았다. 그에 대한 코드를 구현해보도록 하자. 상위 클래스 Customer에는 제품 가격을 계산하는 정가를 그대로 지불하는 calcPrice( ) 메서드가 정의되어 있다. VIP 고객은 정가에서 10% 할인받을 수 있도록 하려면 상위 클래스의 calcPrice( ) 메서드를 재정의해야 하는데, 이를 메서드 오바리이딩이라고 한다. 오버라이딩을 하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다. 만약 그렇지 않을 경우 자바 컴파일러는 재정의한 메서드를 기존 메서드와 다른 메서드로 인식한다. 하위 클래스 VIPCustomer에서 상위 클래스의 calcP..