<언어>
1. 절차적 언어
- 순서가 정해져 있다.
- C언어
2. 객체지향언어(OOP)
- Java, C++, Python ...
- ①추상화 ②상속 ③다형성
- 매개 변수: method가 행위를 하는 재료가 됨
~ 형식 매개변수, 실질적 매개변수
package ex01.sample02;
public class Parameter {
public static void main(String[] args) {
int sum;
sum = add(100, 200); //100, 200 : 실질적 매개변수
// add(int a, int b); int a, int b : 형식적 매개변수
System.out.printf("100, 200의 add()의 결과는 : %d\n", sum);
}
}
- 끝낼 때 꼭 ;(세미콜론) 붙이기
- 이름 뒤에 괄호() : 절차적 언어-함수 / 객체 지향 언어-메서드, 함수
~ 메서드: 무엇인가의 도움이 필요함.
ex) b.a()
~ 함수: 무엇인가의 도움 없이 혼자 쓰일 수 있음
ex) a()
- class ☞ object ☞ method
~ System ☞ out ☞ println
- 위 ☞ 를 보고 method가 object에 속한다고 생각할 수 있는데, 사실상 class에 속한다.
~ class는 값을 가질 수 없다. 값을 가질 수 있게 해주는 게 객체
- new Calculator() 에서 Calculator()는 메서드의 형식을 띄고 있지만, 앞의 class명과 동일하기 때문에 생성자라고 칭함.
~ class를 생성하면 자동으로 생성자가 만들어진다.(default 생성자)
- 생성자와 메서드의 차이점: 생성자는 결과값을 반환하지 않는다.
- 생성자 | 메서드의 이름은 같지만 가지고 있는 자료형 타입이 다른 경우 : 생성자 | 메서드의 overloading
- 클래스 Scanner와 오브젝트(객체) sc가 분리되어 떨어져 있다가 연산자 new와 생성자 new Scanner()를 사용하면서 sc가 Scanner가 가지고 있는 기능을 가질 수 있게 된다.
// 클래스
- 추상형(추상화), 비어 있는 상자 (바로 사용하지 못 함! 사용하려면 객체가 필요)
- (같은 목적을 가진) 코드의 집합
- 데이터 집합
- 사용자 정의 자료형
- 데이터 구조 명확 > 같은 성질의 데이터를 저장하는 식별자(변수)가 서로 다른 이름을 사용하는 문제 해결
- 클래스의 객체(인스턴스)를 생성 :
~ Point p1 = new Point();
클래스 참조변수(객체) = 객체생성연산자 생성자();
※ p1은 정확히 말하면 참조변수, but 편의상 객체로 칭함.
- 클래스 : 붕어빵틀, 설계도, 사람, 포메라니언
객체 : 붕어빵, 제품, 홍길동, 똘이
- 객체를 생성한 후 해당 클래스의 멤버에 접근하기 위해 '.'(멤버 접근 연산자) 사용
~ p1.y = 100;
a. 멤버 변수(필드) : 데이터가 저장되는 곳
- 다른 package에 객체가 존재할 때는 디폴트 멤버 필드는 접근 불가능하다.
- 객체를 생성할 때 멤버 변수도 같이 생성됨.★
~ Point p1 = new Point(); > 이 구문이 실행될 때 생성
- 객체는 모든 참조가 끊기면 가비지가 된다. > 가비지 컬렉터가 객체 수거 > 객체를 소멸시킴 > 멤버 변수도 같이 소멸됨.★
b. 멤버 메서드 : 객체에 의해 호출시 실행
- 자신만이 가진 데이터를 활용해서 행동해야 함(개성 있는 행동)
- 웬만하면 멤버 변수를 활용해서 만드는 것이 좋다.
//생성자
- 객체의 상태(멤버 변수)를 초기화하는 역할 > 객체의 초기 상태를 개발자가 원하는 대로 설정이 가능하다.★
- 메서드명이 클래스명과 동일하다.(반드시)
- 반환형이 생략되어 있다. > 생성자라는 메서드는 반환값을 가질 수 없다.
- 생성자 내부: 클래스 멤버 변수를 초기화하는 코드 구현 (최소한의 의무)
- 자바는 개발자가 생성자를 선언하지 않으면, 자동으로 아래의 생성자를 생성함.
public Cup() {
this.color = null;
this.size = 0;
}
※명시적으로 생성자를 1개 이상 만들게 되면, 기본 생성자는 만들어지지 xxx
- 무조건 좋은 것은 아니다. 상황에 따라 좋을 수도 있고, 안 좋을 수도 있다.
- 매개변수를 사용하는 경우, 유효성 검사가 필요하다.
// ★★객체: 클래스가 가지고 있는 멤버 필드(데이터)와 멤버 메서드의 집합(구체화)
- 객체는 클래스의 멤버 필드와 멤버 메서드를 공유한다 -> 접근할 수 있음!
- 함수나 메서드의 형태
1. int func1(int a)
2. int func1(void)
3. void func1(int a)
4. void func1(void)
- 컴포지션: 클래스 안에 다른 클래스의 객체를 생성
※객체 vs 인스턴스
- 객체, Object : 실존하고, 다른 객체와 구분되어지는 객체
- 인스턴스, Instance : 메모리에 실체화된 객체
// 메서드: 행위를 하는 것(결과값이 있다 == 실행에 의해 어떤 특정한 값을 얻을 수 있다.)
- 메서드, 함수(Function), 프로시저(Procedure), 서브루틴(subRoutine)
- 반복적인 코딩의 내용을 간결하게 코딩하여 사용
- 프로그램에서 제공하는 메서드, 사용자 정의 메서드
- (같은 목적을 가진) 코드의 집합 > 동일한 목적을 가지는 동일한 코드가 2번 이상 반복되면 안 되기 때문★
- 메서드끼리의 선언 순서는 상관 없다. (main은 맨 위에 두는 편)
- 지역 변수, 전역 변수
- 객체의 호출에 의해 사용됨.(객체.메서드())
<->함수 : 자신 혼자서 사용
1. 메서드 선언
- 1회
2. 메서드 호출
- 무한대
- 메서드 내의 코드 실현
- 선언부 + 구현부
~ 선언부(시그니처,sign): (접근지정자 + 정적키워드 +) 반환자료형 + 메서드명 + 인자리스트
~ 구현부(body): 메서드가 하려는 업무 코드 구현
a. 메서드 인자리스트
- 인자리스트, 인자(Arguments)
- 파라미터(Parameters)
- 매개변수
- 메서드를 호출할 때 값을 전달해서, 메서드 내에서 사용할 수 있게 해주는 역할
- 메서드 활용도를 높여준다. > 메서드 가용성 향상
- 가인자 / 실인자
b. 반환
- 리턴문, 반환문
- return 키워드 사용
- return 뒤의 값 1개(★)를 돌려주는 역할.
※ 빈 리턴문 : 메서드를 종료한다.
~ void {return;}
// new 연산자: 객체를 생성한 후 바로 생성자를 호출 ==> 객체를 초기화
~ 객체 초기화: 필드를 초기화하거나 메서드도 사용할 준비를 하는 것
~ 객체뿐만 아니라 클래스가 가지고 있는 멤버 필드까지 초기화 시켜줌.
ex) 전화: 클래스 / 9개의 버튼: 데이터 /9개의 버튼을 누름: 메서드
- 객체, 필드, 메서드, 생성자, 변수, 함수 => 초기화 순서에 따라 결과값이 변경된다.
'자바(JAVA)' 카테고리의 다른 글
[자바(Java)] 제어문 - 반복문 (0) | 2022.09.22 |
---|---|
[자바(Java)] 제어문 - 조건문 (0) | 2022.09.22 |
[자바(Java)] package (0) | 2022.09.22 |
[자바(Java)] 변수, 리터럴, 데이터 형, 형변환 (0) | 2022.09.15 |
[자바(Java)] 설치, 환경설정, println vs print vs printf(형식 지정자) (1) | 2022.09.13 |