Code.presso Java 웹 개발 트랙 체험단 활동 2주차 두번째 코스로 수강한 강의는
Java Programming에 관한 내용이다.
그 중 오늘은 객체지향의 기초 개념으로, 클래스, 메소드, 접근제어자, 생성자, 메소드 오버로딩에 대해 정리해보려고 한다.
강의 제목은 "Java Programming 초급" 으로, 자세한 정보는 👇🏻아래👇🏻 링크를 통해 확인할 수 있다.
✋🏻 포스팅 내 사용된 사진 파일들의 저작권은 모두 코드프레소에 있으며, 강의자료 공유 및 업로드는 불가능합니다.
객체 지향 프로그래밍(Object Oriented Programming) 이란, 데이터와 데이터에 대한 연산을 수행하는 코드를 그룹화 한 객체를 중심으로 소프트웨어를 설계/개발하는 패러다임이다.
시스템의 행위보다, 시스템에 참여하고 책임을 가지는 객체가 무엇인지에 주목한다.
다수의 객체가 각자의 역할을 가지고이쏙, 객체 간에는 메시지를 주고 받으면서 전체 시스템을 구성한다.
커피숍을 운영한다고 가정했을 떄, 어떠한 관점에서 업무를 설계하느냐에 따라 업무의 효율이 달라질 수 있다.
소프트웨어 또한 마찬가지로, 무엇을 중심에 두고 설계를 하는 지가 중요한데 이를 절차 지향과 객체 지향으로 나누어 볼 수 있다.
이러닝 시스템을 설계하고 있다고 가정해보자!
클래스는 Java 프로그램의 기본단위로, Java 프로그램은 한 개 이상의 클래스로 구성된다.
(+ 일반적으로 1개의 클래스는 1개의 Java 파일을 가진다.)
객체라는 것은 쉽게 말해 사물이다.
클래스는 특정 객체를 어떻게 생성할 지에 대한 정보를 가지 고 있는 설계도로, 클래스는 객체를 만들기 위한 틀 또는 템플릿 이라고 볼 수 있다.
각각의 객체는 속성과 행동을 가지고 있다.
사진과 같이 각각의 데이터는 속성을, 메소드는 행동을 나타낸다.
구체적❓
추상적❓
추상화💡
좋은 클래스에 대한 이야기는 설계에 관련된 이야기이고, 고급 레벨이지만 그래도 간단히 정리해보자면!
1. 클래스 문법
class
키워드가 사용된다.2. 클래스 이름
클래스로부터 객체를 생성할 수 있다.
➡️ [클래스명] [변수명] = new [클래스명]();
.
연산자로 객체의 멤버에 접근이 가능하다.
➡️ [객체 참조 변수명].[멤버 변수명]
이와 같이 하나의 클래스를 기반으로 다수의 독립적인 객체를 생성하고 멤버 변수에 접근할 수 있다!
1. 메소드
객체는 속성과 행위를 가지고있고, 메소드는 객체의 행위를 정의한다.
메소드는 함수와 거의 유사한 동작을 한다!
그러나 메소드는, 독립적으로 존재하지 않으며 특정 객체에 포함되어 있다!
2. 함수
함수는 특정한 작업을 수행하기 위한 코드들의 집합이다.
특정 작업의 코드들을 모듈화하여 필요한 경우 호출하며, 코드의 중복을 줄일 수 있다.
정리하자면❗️
메소드는, 특정 객체 내부에 존재하며, 객체의 멤버 변수에 대한 연산이 가능하고
함수는, 독립적으로 존재하며, 특정 작업에 필요한 데이터를 모두 제공해야 한다!
1. 메소드의 문법
메소드를 호출하기 위한 메소드의 이름이 존재하고, 특정 작업을 위한 메소드의 구현 코드가 중괄호({}
) 내부에 구현된다.
메소드는 Input
과 Output
이 존재한다.
Input
은 없거나, 1개 이상의 파라미터 리스트이다.Output
은 없거나 리턴값으로 표시된다.void
로 표시한다.2 . 메소드의 이름
캡슐화에는 2가지 의미가 있다.
하나, 객체의 속성과 행동을 하나의 단위로 그룹화한다.
둘, 객체의 속성과 행동을 은닉한다.
Java의 접근 제어자를 활용하여 멤버의 접근을 제어할 수 있다
접근 제어자의 종류는 4가지가 있는데, 이번 강의에서는 public
과 private
만 알아보도록 하겠다.
public
private
private
멤버도 객체 내부에서는 접근 가능하다.private
으로 지정private
으로 지정한다.클래스, 멤버 변수, 메소드에 활용된다.
클래스는 class
키워드 앞에 명시한다.
➡️ public class User
멤버 변수는 자료형 앞에 명시한다.
➡️ private String email;
메소드는 리턴 타입 앞에 명시한다.
➡️ public boolean isOver20()
만약 private
멤버 변수의 값을 변경하거나 사용하고 싶을 때는 어떻게 할까🧐❓
setter
메소드로 객체 멤버 변수의 값을 변경getter
메소드로 객체 멤버 변수의 값을 사용input
데이터를 받는 변수이다.[자료형][변수명]
쌍으로 표현할 수 있다.,
로 분리하여 여러개의 파라미터를 선언할 수 있다.그림곽 같이, 객체 내부에서의 this
는 해당 객체 자신을 의미한다.
만약 변수의 이름이 중복되지 않느 경우 this
로 명시하지 않아도 되지만,
파라미터 이름을 의미있게 만들면, 멤버 변수와 파라미터 이름이 보통 중복된다.
멤버 변수의 값을 저장(변경)하는 Setter
메소드에 대해 알아보자.
보통 1개의 멤버 변수의 값을 세팅하는 메소드는 set
이라는 동사로 시작하며, setter
라고 지칭한다.
이와 같이 setter
를 호출하여 객체의 멤버 변수 값을 저장하고 변경할 수 있다.
📌 인자(argument) vs 파라미터(parameter)
- 전달하는 쪽이 인자
- 받는 쪽이 파라미터
메소드는 수행 결과를 값으로 반환한다.
➡️ return
키워드를 사용하며, return
을 만나면 메소드는 값을 반환하고 종료된다.
메소드 내에 1개 이상의 return
문을 사용할 수 있다.
메소드에는 리턴하는 값의 자료형을 명시해야 한다.
또한, 리턴 값이 없는 경우도 존재한다(void
).
📌
Getter
&Setter
생성 단축키
mac 기준command + N
단축키를 통해 간단하고 쉽게 생성할 수 있다.
생성자(Constructor) 란 객체가 생성되는 시점에 호출되는 특별한 형태의 메소드로,
객체가 생성되는 시점에 초기화를 하기 위해 사용된다.
주로 객체 멤버 변수의 초기화 작업을 하는데, 멤버 변수를 명시적으로 초기화 하지 않은 경우에는
0
false
null
으로 저장된다.
public
을 사용한다.📌
Default
생성자
생성자를 명시적으로 추가하지 않은 경우Default
생성자를 제공한다.
(1개 이상의 생성자를 명시적으로 구현한 경우는 제외)
현재까지 우리는 이러한 형태로Default
생성자를 사용해 왔다!
사진과 같이 모든 멤버 변수의 값을 인자로 전달받아 초기화 하는 생성자를 파라미터가 있는 생성자라고 한다.
객체 생성과 함께 전달하는 인자 값으로 객체의 멤버 변수를 초기화한다.
파라미터 개수를 조절하여 멤버 변수의 일부만 초기화 할 수도 있다.
주의✋🏻, 생성자를 구현하는 경우 Default 생성자는 사용할 수 없다
개발을 진행하다보면, 같은 작업을 하지만 파라미터만 다른 메소드가 필요한 경우가 있다!
이런 경우에 메소드 오버로딩을 적절히 사용하면 원하는 결과를 얻을 수 있다😉
메소드 오버로딩이란, 특정 클래스 안에서 파라미터가 다른 동일한 이름의 메소드를 선언하는 것이다.
파라미터의 자료형 또는 개수가 다르면, 동일한 이름을 사용할 수 있다.
메소드 호출 시 파라미터 세팅 조건에 따라 호출되는 메소드가 결정된다.
단, 리턴 타입은 메소드 오버로딩의 조건에 해당하지 않으니 주의하자!
1. 적합한 예시🙆🏻♀️
첫번째와 두번째, 두번째와 세번째는 파라미터의 개수가 다르기 때문에 메소드 오버로딩을 사용할 수 있다.
첫번째와 세번째는 파라미터의 개수는 같지만 자료형이 다르기 때문에 이 경우에도 메소드 오버로딩을 사용할 수 있다.
2. 부적합한 예시🙅🏻♀️
첫번째와 두번째는 파라미터의 개수와 자료형이 모두 같기 때문에 메소드 오버로딩이 불가능하다.
첫번째와 세번째, 두번째와 세번째의 경우에도 같은 이유로 메소드 오버로딩이 불가능하다.
리턴타입은 같아도, 같지 않아도 메소드 오버로딩의 조건에 해당되지 않는다는 것을 명심하자!!
생성자도 특수한 형태의 메소드이기 때문에 오버로딩을 적용할 수 있다.
이와 같이 초기화를 원하는 멤버 변수만 선택해서 초기화를 할 수 있다.
그 결과, 객체 생성 시 세팅하는 파라미터의 조합에 따라 서로 다른 생성자가 호출되는 것을 확인할 수 있다.
이렇게 Code.presso Java 웹 개발 트랙 체험단 활동 2주차 두번째 코스도 시작되었다!
코드프레소 홈페이지(https://www.codepresso.kr/)에는 오늘 포스팅한 객체지향의 기본 개념 관련 강의뿐만 아니라 다양한 강의들이 개설되어 있으니 모두 한번 씩 살펴보고 수강해보면 좋을 것 같다😃