클래스와 객체
[1] 클래스
- 속성(학생 이름, 나이 등) + 동작(메서드)를 하나로 묶어 놓은 것
- 반환할 값의 자료형 : int, String 등
- 매개변수 자료형 매개변수 명 : 파라미터, 받아들이는 값 ex. (int num1, String name)
1. 클래스 생성
(접근 제어자) class 클래스명 {
멤버 변수; // int studentID; String studentName;
멤버 메서드; // public void showStudentInfo() { }
}
2. 메서드의 구조
(접근 제어자) (반환할 값의 자료형) 메서드명 (매개변수 자료형 메개변수 명) {
명령어 ...
return 반환할 값;
}
- 메서드 생성 시 return type (반환할 값의 자료형)이 없으면 void 작성
- 메서드 종류 : 반환값 X, 파라미터 X / 반환값 O, 파라미터 X / 반환값 X, 파라미터 O / 반환값 O, 파라미터 O
3. 클래스와 인스턴스
- ex. 붕어빵 틀(클래스), 붕어빵(인스턴스, 재료를 어떻게 넣느냐에 따라 붕어빵의 실체 달라짐)
- 인스턴스는 클래스가 데이터 타입이므로 정의한 클래스의 속성 값을 가질 수 있음
- 인스턴스 생성 : (정의한 클래스명) (인스턴스명) = new 생성자();
4. 생성자
- 생성자란 클래스를 통해 생성되는 인스턴스의 초기화를 도와주는 메서드의 일종(리턴 타입이 없는 메서드 구조와 동일)
- 클래스 내에 선언되며, 클래스의 이름과 같으며, 리턴 값이 없음
- 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러 개의 생성자가 존재 가능
* 기본 생성자와 명시적 생성자
- 클래스를 생성하게 되면 컴파일러가 자동적으로 '기본 생성자'를 만들어주며, '명시적 생성자'를 생성하게 되면 컴파일러가 생성자가 있다고 판단하여 '기본 생성자'를 자동적으로 생성해주지 않으므로 '기본 생성자'를 사용하고 싶은 경우 추가해 주어야 함
- 생성자의 동작 과정
1) 클래스를 정의하면 클래스의 정보를 읽어들이면서 생성자가 있는지 없는지를 파악함
2) 만약 인스턴스를 만들어내는 최소 조건인 생성자가 하나도 없다면 컴파일러가 기본 생성자를 공짜로 생성해줌
3) 만약 생성자가 하나라도 있다면(명시적 생성자), 인스턴스를 만들어내는 최소 조건을 만족하므로 컴파일러가 기본 생성자를 자동적으로 생성해주지 않음
4) 인스턴스를 만들어 낼 때 명시적 생성자로만 만들던가 아니면 기본 생성자를 클래스에 정의해두고 기본 생성자를 통해 인스턴스를 만들면 됨
5. 메서드 오버로딩
- 같은 이름의 메서드를 중복하여 정의하는 것
- 같은 이름의 메서드가 인자의 개수나 파라미터의 자료형에 따라서 다른 기능을 함 (리턴 값이 다름)
1. 오버로딩 조건
- 메서드의 이름이 같아야 함
- 파라미터의 개수가 달라야 함
- 파라미터의 데이터 타입이 달라야 함
- 파라미터의 순서가 달라야 함
2. 오버로딩 장점
- 자바에서는 원래 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없지만, 오버로딩을 통해 하나의 이름으로 메서드를 만들 수 있음
- 메서드에 사용되는 이름을 절약
- 메서드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출 가능
- 메서드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성을 구현
6. 접근 제어자 (접근 지정자)
- 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정하는 예약어
public | 외부 클래스 어디에서나 접근 가능 |
Protected | 같은 패키지 내부와 상속 관계의 클래스에서만 접근 가능 |
아무것도 없는 경우 | Default이며 같은 패키지 내부에서만 접근 가능 |
Private | 같은 클래스 내부에서만 접근 가능 |
- 만약 클래스에서 정의된 멤버 변수가 외부에서 접근하면 안되는 정보라면 private로 접근을 막아두고, public 메서드를 통해서 가져올 수 있도록 만들기 (get 메서드와 set 메서드 사용)
[2] OOP(객체 지향 프로그래밍, Object Oriented Programming) 특징
1. 캡슐화
- 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법 (정보 은닉도 포함됨)
- public, private등 접근 제어자를 변수나 메소드 앞에 작성, private 쓸 경우 해당 class 안에서만 사용 가능 (정보 은닉 가능하게 함)
2. 상속
- 부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는 것, 재사용으로 인한 코드 감소, 범용적 사용 가능
3. 다형성
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 표현이 가능한 구조 (오버라이딩, 오버로딩으로 구현 가능)
4. 추상화
- 클래스들의 공통적인 특성(변수, 메서드)들을 추출하는 것, 공통 속성과 행위를 찾아 타입을 정의하는 과정
* 객체 지향 프로그래밍 정리
2023.01.15 - [정보처리기사 필기] SW 설계 : 객체지향 설계(OOP)
[정보처리기사 필기] SW 설계 : 객체지향 설계(OOP)
정보처리기사 필기 1과목 - 소프트웨어 설계 : 객체지향 설계(OOP, Object-Oriented Programming) [1] 객체지향 프로그래밍(OOP, Object-Oriented Programming) 1. 객체지향 프로그래밍 - 컴퓨터 프로그램을 명령어의
yuna-story.tistory.com
[3] OOP의 장단점
1. 장점
- 클래스 단위의 모듈화로 편리, 대규모 개발에 적합
- 클래스 단위로 수정하므로 유지 보수 편리
- 클래스를 재사용하거나 상속을 통해 확장하므로 코드 재사용하기 용이
2. 단점
- 처리 속도가 느림
- 객체의 수가 많아지면 용량도 커짐
- 설계시 많은 시간과 노력이 필요