학습 목표
- 자료형의 여러 형태의 특징에 대해 설명할 수 있다.
- 클래스에 대해 설명할 수 있다.
- 오브젝트에 대해 설명할 수 있다.
- 필드 및 메소드에 대해 설명할 수 있다.
- 메소드 호출방법에 대해 설명할 수 있다.
- 오버로딩에 대해 설명할 수 있다.
- static 메소드에 대해 설명할 수 있다.
- 수학연산 메소드의 사용에 대해 설명할 수 있다.
학습 내용
자료형의 여러 형태
자료형에 따른 변수 : 개별 데이터를 저장하기 위한 것
배열 : 동일한 자료형을 갖는 변수를 묶어서 처리하기 위한 것
C언어에서 구조체 : 여러 자료형을 묶어서 처리하기 위한 것 (Struct)
c언어에서는 데이터와 데이터를 처리하기 위한 함수가 독립되어 있음
c++ 언어에서는 구조체 안에 데이터와 데이터를 처리하기 위한 함수를 묶을 수 있음
(데이터와 함수를 모두 가지고 있는 구조)
클래스(class)
- 클래스의 개념
클래스 : 데이터와 처리를 하나로 모아놓은 것 (C++의 구조체와 유사하다.)
데이터를 필드(field) 라고 하고, 처리를 메소드(method) 라고 함
필드와 메소드를 클래스의 멤버(member) 라고 함
- 오브젝트, 객체
- 자바의 클래스는 일종의 자료형에 해당함
- 클래스는 변수가 아닌 변수의 자료형임
- 클래스 자체에 데이터를 저장할 수 없고, 변수에 해당하는 오브젝트(변수)를 만들어야 함 (class : 쿠키틀, object : 쿠키)
- 오브젝트를 해당 클래스의 인스턴스라고도 함
- 하나의 클래스에서 오브젝트를 몇 개라도 생성할 수 있음
- 인스턴스와 : 클래스에서 오브젝트를 생성하는것 (쿠키 찍어내기)
- 각 오브젝트에는 다른 데이터를 부여할 수 있음 (쿠키 토핑 선택하기)
- 오브젝트를 만드는 방법
- Book 클래스에서 book1 이라는 이름의 오브젝트를 생성함
- 오브젝트를 생성하기 위해서는 new 연산자를 사용함.
여기서 주의해야할 점은 main 메소드 전에 class를 선언해줘야 컴파일 에러가 발생하지 않는다.


디폴트 생성자가 들어가있는 모습

2개의 class가 정의되었다
클래스 생성시 다른 자료형과 같이 열거해서 선언할 수 있고 참조 선언 후 참조에 대입해서 연결하는 방법도 있다.
- 필드의 정의
- 클래스에 필드를 정의하는 형식은 변수의 선언과 유사함
- 클래스의 내부에 변수를 선언하고 초기화 하는 것이고 아직 오브젝트는 생성되지 않았음
- 클래스 내부에서 초기화는 가능하지만, 이후에는 오브젝트가 없으면 필드에 값을 대입할 수 없음
- 초기값을 정해주는 개념이라고 생각하면 될듯. 설정해주지 않으면 디폴트 값이 들어감
- 필드의 참조와 대입
- 동일 클래스에서 오브젝트 내의 필드를 참조거나 대입하는 경우 필드명을 그대로 사용함

클래스의 필드 값을 할당해주는 모습

메소드(method)
메소드의 정의
클래스의 메소드는 데이터를 조작하는 방법을 클래스 내에서 구현한 것임
메소드는 프로그래머가 준 값을 지시대로 처리하여 결과값을 반환해주는 일종의 블랙박스와 같은것임
어떤 작업을 수행하기 위해 작업을 그룹화 시켜서 묶어놓은 모듈임
C언어, C++ 언어에서의 함수에 해당함
처리하고자 하는 입력값을 전달받을 수도 있고 그렇지 않을수도 있으며, 전달받는 값을 인수 또는 인자 라고 함
처리결과 값을 반환 할수도 있고 그렇지 않을수도 있으며 반환하는 값을 반환값 이라고 함
메소드의 형식
- 반환값이 있고 인자가 있는경우
- 반환값의 자료형 다음에 메소드 이름을 표시함
- ()안에 변수의 자료형과 변수들을 ,(comma)로 구분해서 나열함
- 반환값이 있고 인자가 없는 경우
- 리턴값의 자료형 다음에 메소드 이름을 표시함
- () 안은 빈칸으로 둠
- 메소드를 호출한 곳으로 리턴하기 위해 “return값 또는 변수” 를 실행함


- 반환값이 없고 인자가 있는 경우
- void 다음에 메소드 이름을 표시함
- () 안에 변수의 자료형과 변수들을 ,(comma)로 구분해서 나열함
- 메소드를 호출한 곳으로 리턴하기 위해 return을 쓰거나 생햑할 수 있음


- 반환값이 없고 인자도 없는경우
- void 다음에 메소드 이름을 표시함
- () 안은 빈칸으로 둠
- 메소드를 호출한 곳으로 리턴하기 위해 return을 쓰거나 생략할 수 있음


동일한 오브젝트 내의 메소드 호출
- 인수를 가지는 메소드
- 메소드를 호출하는 쪽에서는 메소드 이름(인수) 형식으로 호출함
- 호출받는 메소드에서는 인수를 넘겨받아 처리함
- 처리가 모두 끝나거나 return 문을 만나면 호출한 쪽으로 리턴함(제어가 이동함)


약간 재귀의 구조가 생각나는 예제이다.
- 인수를 가지지 않는 메소드
- 메소드를 호출하는 쪽에서는 메소드의 이름() 형식으로 호출함
- 처리가 모두 끝나거나 return 문을 만나면 호출한 쪽으로 리턴함(제어가 동일)


- 반환값의 이용
- 메소드가 값을 반환할때는 반환값의 자료형에 맞는 변수에 반환값을 대입할 수 있음.


다른 오브젝트 내의 메소드 호출
다른 오브젝트의 메소드를 호출하기 위해서는.(점) 를 사용함
오브젝트 이름.메소드 형식으로 빈간 없이 붙여서 쓰며, 인수가 있다면 괄호() 안에 인수를 나열하고 인수가 없다면 괄호 () 안은 빈칸임


오버로딩(overloading)
하나의 클래스 내에서 인수의 개수나 형이 다르면서, 동일한 이름의 메소드를 여러개 정의하는 것
즉, 동일 이름의 메소드들을 중복해서 정의하는 것
- 호출하고자 하는 메소드의 인수 형식은 정의된 메소드 간의 인수 형식과 동일해야 함
- 오버로딩 장점은 다양한 자료형의 데이터에 대해서 유사하거나 같은 처리를 위해 동일 이름의 메소드를 호출함으로써 일관성을 유지할 수 있다는 것

- 오버로딩에 사용하는 여러 메소드들의 인수 형식은 서로 달라야 함
- 오버로딩 시 동일 이름의 메소드에서 인수의 자료형 및 개수가 동일하면 오류가 발생함

예시)


들어가는 인수의 type에 따라 다른 메서드가 호출되는 것을 확인할 수 있다.
- 클래스의 필드에 값을 지정하기와 가져오기 위한 메소드
- 오브젝트의 필드에 값을 직접 접근하지 않고 메소드를 통해서 접근하는 것은 객체지향개념 중 은닉성에 해당함

필드값을 직접 설정하는 것이 아닌 메소드를 통해 접근한다.


static(정적) 메소드
static 메소드는 클래스의 객체가 존재하는지에 관계 없이 호출할 수 있음
static 메소드도 객체가 존재한다면 객체의 멤버로서 호출할 수도 있음


여기서 public은 다른 클래스에서 호출 가능하다는 뜻
자바 프로그램 내에서는 많아야 한 개의 main 메소드가 있음
main 메소드는 static으로 지정되어 있는데, 객체 없이 자체로 실행되어야 하기 떄문임!
수학 연산 메소드의 사용
자바에는 미리 정의된 수많은 static 메소드가 패키지화 되어있음
Math 클래스에는 수학 연산을 위한 다양한 메소드를 포함하고 있음
다음 표에 있는 메소드들은 static으로 지정되어 있으므로 해당 Math 객체를 만들지 않고 호출할 수 있음


Math.sqrt() 메소드는 주어진 숫자의 제곱근을 반환합니다.
'코딩딩 > Java' 카테고리의 다른 글
메소드의 가변 인수와 생성자, 클래스의 속성 (0) | 2023.06.29 |
---|---|
비트 연산자와 시프트 연산자, 각종 조건문과 반복문 (0) | 2023.06.29 |
각종 연산자와 조건식, 형변환과 printf 메소드 (0) | 2023.06.28 |
자바의 데이터 입력 방법, 배열, 각종 연산자 (0) | 2023.06.28 |
자료구조 - Arraylist (0) | 2023.05.14 |