03. 자바(Java)
01. Java와 객체의 개념
1) Java의 특징
- Java는 클래스 단위로 프로그래밍함
- main() 함수를 포함한 클래스명과 파일명이 같아야 함
- 파일명과 클래스명이 같은 클래스가 가장 먼저 실행되는 클래스
2) 객체(Object) 이해하기
- 객체는 움직이거나 동작할 수 있는 모든 사물이나 실체를 말함
- 대부분 모든 명사 형태로 표현할 수 있는 것이면 모두 객체가 될 수 있음
- 컴퓨터의 기술이 계속 발전하면서 사람의 직접적인 일상에 접근되므로 객체는 실세계의 접근 기술이라고 함
- 사람, 자동차, 컴퓨터, 자전거 등 동작할 수 있는 것들이 모두 객체가 될 수 있음
- 객체 프로그래밍은 객체를 정의하고 생성하여 객체 간의 관계를 맺어 프로그래밍하는 것
3) 객체 고유의 속성과 동작, 행위
객체 | 속성 | 동작, 행위 |
---|---|---|
자동차 | 운전대, 바퀴, 엔진 등 | 운전하기, 정지하기, 속력 내기 등 |
사람 | 눈, 코, 입, 다리 등 | 걷기, 달리기, 심부름하기 등 |
02. 클래스(Class)와 멤버
1) 클래스와 객체의 관계
- 클래스는 객체를 만들기 위한 틀
- 실제로 프로그램에서 사용되어지는 것은 기억 장소를 확보하고 있는 객체
객체 | 클래스 | 객체 인스턴스 |
---|---|---|
가전제품 | 금형 | 금형으로 만들어진 제품들 |
로봇 | 로봇 제작 시스템 | 여러 개의 로봇 |
붕어빵 | 붕어빵을 만들어내는 쇠 그릇 | 여러 개의 붕어빵 |
2) 멤버 변수와 멤버 메소드
객체 | 속성 | 동작, 행위 |
---|---|---|
자동차 | 운전대. 바퀴, 엔진 등 | 운전하기, 정지하기, 속력내기 등 |
사람 | 눈, 코, 입, 다리 등 | 걷기, 달리기, 심부름하기 등 |
객체 | 멤버 변수 | 멤버 메소드(함수) |
- 멤버 변수는 객체가 일어날 수 있는 모든 상태나 결과들을 기억하는 용도로 사용됨
- 멤버 변수는 가능한 다른 객체에서 쉽게 접근하지 못하도록 해야 부작용이 최소화됨
- 멤버 메소드는 C언어에서는 함수이며 객체에서 일어나는 모든 행위, 연산, 지시 등을 의미
- 멤버 메소드는 컴퓨터의 동작을 일으키는 명령, 즉 오퍼레이션(Operation)
03. 클래스 선언과 객체 사용
1) 클래스 선언
- 객체를 만들기 위한 틀을 선언하는 것
- 멤버 변수와 멤버 메소드가 존재하며 각각 그 위치는 상관없이 안에 존재하면 됨
- 클래스는 기억 장소를 확보하지 읂는 것이며, 그 틀만을 만들어 놓는 것
- 클래스를 선언할 때 접근 지정자(public 혹은 private)를 지정하여 클래스의 사용을 제한함
- 접근 지정자는 프로그램의 부작용 방지나 보안을 유지할 수 있음
- 멤버 변수와 멤버 메소드의 개수는 제한 없이 사용할 수 있음
- 멤버 변수는 선언과 동시에 초기화가 가능함
2) 객체의 생성
- 객체를 생성하는 것은 이미 만들어진 틀에 맞게 기억 장소에 할당하는 것
- 객체 생성 명령은 new 예약어를 사용하며, 객체 변수를 선언하여 생성된 객체를 가리키게 해야 함
- 객체 생성의 방법은 두 가지 형태이며 객체 생성은 일반 변수와 동일하게 그 수에는 제한이 없음
- 생성된 객체들은 인스턴스라고 함
- 생성된 객체의 실제 기억 장소가 확보됨
객체를 생성하는 두 가지 방법 | 예시 |
---|---|
클래스명 객체 변수명; 객체 변수명 = new 클래스명(); |
mathCircle m; m = new mathCircle(); |
클래스명 객체 변수명 = new 클래스명(); | mathCircle m = new mathCircle(); |
3) 객체의 멤버 사용
- 객체 변수는 해당되는 객체를 가리키고 있음
- 객체 변수는 점(.)으로 멤버 변수나 멤버 메소드를 지정하여 사용할 수 있음
- Ex) m.length, m.area, m.circle_Length(), m.circle_Area()
04. 클래스의 상속
1) 상속
- 객체지향 프로그램에서 가장 중요한 기술 중의 하나
- 하나의 클래스에 존재하는 멤버 변수와 멤버 메소드를 자신의 클래스에서만 사용하는 것이 아니라 다른 클래스에서도 사용할 수 있도록 전달해주는 기술
2) 상위 클래스, 하위 클래스
- 상속 개념에서 부모를 상위 클래스, 자식은 하위 클래스라는 명칭을 사용함
- 하위 클래스는 하나의 상위 클래스에서만 상속 받는 것이 아니라 여러 개의 상위 클래스로부터 상속 받을 수 있으며, 이를 다중 상속이라고 함
- 하나의 클래스는 여러 개의 하위 클래스에게 상속시킬 수 있음
3) extends, implements
- Java에서는 상속을 받기 위한 예약어로 extends, implements를 사용함
- 클래스로 정의된 상위 클래스를 하위 클래스로 상속 받기 위해서는 extends를 사용함
- 상위 클래스가
- implements는 상위 클래스의 메소드를 반드시 재정의(오버라이딩) 해야 함
4) 다중 상속
- Java는 기본적으로 다중 상속을 할 수 없음
- Java는 기본적으로 다중 상속을 배제하지만, 다중 상속의 사용을 편법적으로 제공하고 있음
- 여러 개의 상위 클래스를 상속 받다 보면 프로그램이 복잡할 뿐 아니라 전혀 알 수 없는 부작용이 일부 발생하기 때문에 다중 상속을 배제함
5) 다중 상속의문제점을 해결한 interface
- 다중 상속의 문제는 클래스로 정의된 멤버 변수와 멤버 메소드가 상속 과정에서 변경될 수 있기 때문에 발생한 것
- 클래스를 선언할 때 클래스 내부에 존재하는 모든 멤버 변수나 멤버 메소드를 변경되지 않도록 고정시키게 되면 다중 상속 시 발생하는 문제점을 막을 수 있음
- 클래스 선언을 예약어 class 대신에 interface를 사용하고, extends 대신에 implements를 사용함
- extends는 기존의 클래스를 확장하는 의미를 담고 있고, implements는 결정된 사항을 구체적으로 구현한다는 의미를 담고 있음
05. 생성자(Constructors)
1) 생성자 메소드
- 변수를 선언하고 초기화하듯이 객체를 생성하고 초기화하는 작업
- 객체 내부에 존재하게 하여 객체가 생성될 때 자동 실행되게 하는 메소드
- 클래스를 정의할 때 생성자 메소드를 추가하지 않으면 Java가 자동으로 생성해 줌
- 객체 안에 기억 장소의 초기 값들은 어떠한 값들이 기억되어 있는지 모르는 상태가 되므로 대부분 생성자 메소드를 사용함
- 생성자 메소드는 오버로딩이 가능하여 클래스명과 같은 생성자 메소드는 제한 없이 사용할 수 있음
- 생성자 메소드명은 반드시 클래스명과 같아야 함
- 생성자 메소드는 반환 값의 데이터형을 저장하지 않으며, 메소드 앞에 void, int, double 같은 것을 사용하지 않는다는 것을 의미함
2) 생성자가 인수를 갖지 않는 경우
- 상속은 부모 클래스로부터 속성과 메소드를 물려받아 사용함
- new로 인스턴스를 생성할 때 생성자를 호출하게 됨
- 생성자를 정의하지 않으면 컴파일러가 자동적으로 기본 생성자를 생성, 호출함
- 인수(매개변수)가 있는 생성자를 정의하면 컴파일러는 기본 생성자를 생성하지 않음
- 부모 클래스의 기본 생성자 호출 인스턴스를 생성하기 위해서는 반드시 생성자를 호출해야 함
- 부모 클래스로부터 상속 받은 속성과 메소드는 부모 클래스에 정의된 것이고 부모의 것
- 부모 클래스의 생성자가 호출되어야 자식 클래스에서 사용이 가능함
- 생성자는 상속이 되지 않기 때문에 자식 클래스로 인스턴스를 생성할 때 부모 클래스의 기본 생성자를 자동으로 호출하게 됨
- 자식 클래스의 생성자를 호출하면 부모 클래스의 생성자가 먼저 호출된 다음에 자식 클래스의 생성자가 호출됨
3) 생성자가 인수를 갖는 경우
- 부모 클래스의 생성자는 상속되지 않고, 자식 클래스로 인스턴스를 생성할 때 자동적으로 부모의 기본 생성자가 호출됨
- 부모 생성자가 인수를 갖고 있다면 자식 클래스를 인스턴스화할 때 자동으로 호출되지 않으므로 자식 생성자에서 명시적으로 부모 생성자를 호출해야 함
- super() 키워드를 사용함
- super()를 사용할 때는 자식 생성자의 첫 줄에 위치해야 함
'정보처리기사 > 프로그래밍 언어 활용' 카테고리의 다른 글
객체지향 기술 5 (0) | 2023.05.30 |
---|---|
객체지향 기술 4 (0) | 2023.05.30 |
객체지향 기술 2 (0) | 2023.05.30 |
객체지향 기술 1 (0) | 2023.05.29 |
프로그래밍 언어 활용 5 (0) | 2023.05.29 |