랑아
article thumbnail

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
profile

랑아

@RangA

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!