1. 클래스
데이터 타입 생성기
데이터와 메소드가 결합된 형태의 사용자 정의 데이터 타입
여러 개의 작업을 하나로 묶어서 관리할 수 있는 작업의 덩어리. 사용자가 필요로 할 때 작업을 대표하는 이름을 통해 반복적으로 호출 가능
ㄱ. 구성 요소 : 멤버변수, 멤버필드 - 클래스가 살아 있는 동안만 생존
멤버메소드 - 클래스의 메소드 안에서만 선언되고 메소드 안에서만 사용되고 사라짐
* JDK (Java Development Kit) : 자바 컴파일러를 포함한 개발 도구
- SE (Standard Edition) : 표준 개발 환경
- EE (Enterprise Edition) : 기업 솔루션 개발 환경
- ME (Micro Edition) : 모바일 솔루션 개발 환경
=> EE이든 ME이든 기초는 SE에서 출발함
* JDK 설치 : 자바 설치 후 환경 설정을 위해 설치 디렉토리를 기억해야 함
- java.exe : 실제 컴파일러 역할
- javac.exe : 자바 프로그램의 실행을 위한 명령 해석기 역할
* JAVA DOC API : 사용한 클래스 라이브러리의 도움말을 HTML 형태로 제공. 클래스 설명서와 같은 역할
* 자바의 환경 설정
ㄱ. 자바의 bin 디렉터리 경로(path) 설정
ㄴ. 현재 작업하는 디렉터리의 클래스 패스(class path) 지정
2. 메소드
ㄱ. 분류
일만 하는 메소드 - 리턴하는 값이 없음 => void 형으로 메소드를 선언
일한 후 값을 리턴하는 메소드 : 값을 리턴함
* return : 메소드의 종료
메소드를 끝내기 위해서는 메소드 내의 모든 작업을 완료하던지, 아니면 return을 통해 메소드의 특정 부분에서 작업을 끝내면 됨
만약 값을 가지고 리턴한다면 반드시 리턴하는 값의 형을 메소드의 선언부에 명시해야 함
리턴하지 않는다면 void형으로 명시
ㄴ. 메소드의 프로토타입(형태) : 리턴 타입 + 메소드 이름(매개변수)
ex. 자판기에 돈을 넣으면 음료가 나온다
- 자판기 : 주체 (메소드 이름)
- 돈 : 매개변수, 시작점
- 음료 : 리턴 타입, 결과
ㄷ. 메소드 생성시 주의점
- 하나의 메소드는 한 가지 기능만 구현
- 반복적으로 수행되는 여러 문장을 하나의 메소드로 정의
- 관련된 여러 문장을 하나의 메소드로 정의
- 리턴값과 선언부에 명시된 리턴타입은 반드시 일치해야 함
- 값을 리턴하고자 할 때만 리턴해야 함
- 호출시 매개변수의 갯수와 매개변수의 형을 맞춰서 호출해야 함
- 메소드 이름은 동작적인 의미를 사용하는 것이 좋음
- 메소드 이름은 소문자로 시작, 이름 중간에 새로운 단어가 들어가면 대문자로 시작
ㄹ. 종류
- call by name : 메소드 이름에 의해 호출. 특정 매개변수가 없음(정적일 때)
- call by vaule : 메소드 이름으로 호출시 특정 매개변수를 전달함(동적일 때) => 그 값을 기초로 실행
- call by reference : 매개변수로 사용되는 값이 특정 위치를 참조하는 reference 함수
* 메소드는 변수의 역할을 할 수 있다 => 기본 데이터 타입 변수 : 직접 할당 / 메소드 : 간접 할당
- 직접 할당 : 변수의 재할당 (ex. int x = 5;)
- 간접 할당 : 메소드의 재할당 (ex. int x = sum(1, 2); / x = sum(3, 4);)
* 리턴 값을 가진 메소드는 호출과 동시에 그 자체로 변수의 역할이 가능
* 메소드의 리턴값이 존재한다면 호출되었을 때 하나의 변수로서의 역할을 하게 됨
* 값 복사 (Value Copy)
메모리가 둘 다 존재하는 상태에서 한 쪽의 메모리에 들어 있는 값을 다른 쪽의 메모리로 복사하는 행위
(ex. a = b)
자바에서 메소드 호출시 매개변수가 전달되는 방식은 전부 값 복사를 이용하고 있는 것
* 멤버 (Member)
ㄱ. 클래스 내의 변수 : 멤버필드, 멤버변수
ㄴ. 클래스 내의 메소드 : 멤버메소드
* 인스턴스 변수
Example example = new Example();
example.멤버변수();
객체의 멤버메소드를 쓰려면 객체 생성(인스턴스 생성) 먼저 해야 함
- 멤버변수 : public 속성이거나 default 속성이어야 함(private : getter / setter 통해서만 가능)
* 데이터와 메소드가 분리되어 있을 때의 문제점
- 메소드 호출 시마다 데이터를 매개변수로 넘겨줘야 함
- 특정 데이터를 사용하는 메소드가 몇 개인지 알 수 없음
- 특정 데이터를 사용하는 메소드를 묶어서 관리할 수 없음
3. 접근 제어
새로운 데이터 타입을 만들고 그 데이터 타입으로 객체를 선언한 후 객체 내의 멤버 변수에 값을 할당할 때, 값을 직접 할당할 수 있는가 없는가를 결정하는 접근 제한자(Access Identifier)
메모리를 이용한 객체에 접근하여 멤버에 점을 찍고 접근할 수 있는지 없는지를 결정함
ㄱ. 목적
- 자료의 은폐화(Encapsulation)
ㄴ. 접근 제어 방법
- 객체를 이용한 멤버의 접근 제어
- 상속관계에서 클래스와 하위 클래스간의 접근 제어
ㄷ. 접근 지정자의 종류
- public : 다른 클래스, 다른 패키지에서도 접근 가능
- private : 같은 패키지 내의 같은 클래스 내에서만 접근 가능
- protected : 같은 패키지 내에서만 접근 가능
- default : 접근 지정자를 생략하고 클래스를 선언한 경우. 같은 패키지 내의 클래스들만 접근 가능
* 오로지 public 메소드만이 private에 접근 가능
* private를 사용하는 이유
- 자료를 보호하기 위해 => public 멤버 메소드를 통해서만 접근하게 함(은폐화, 캡슐화, 자료 보호) (getter / setter)
- 내부적으로만 사용하기 위해
* 메모리 생성
- 데이터 타입에 해당하는 만큼의 메모리를 확보하는 일
- new 연산자를 사용하고 무조건적으로 생성자를 호출
* 객체 : 클래스를 이용하여 새로운 데이터 타입을 만드는 것
기본 데이터 타입의 변수와 구별하기 위해 객체라고 칭함
* == 연산자 : 자바에서 클래스의 참조값을 비교할 때 사용
* 참조값 (Reference Value)
- 객체의 메모리를 생성시 메모리와 연결된 유일한 숫자값
- 이 숫자값을 참조 변수가 받으며 자바에서는 참조값으로 해당 객체를 제어 가능
- 참조값으로 작업시 내부에서 참조값에 연결된 메모리로 작업하는 것과 같은 효과
=> 객체를 하나 생성하면 객체 변수를 위한 공간 / new 했을 때 힙 영역에 생성되는 객체 자체의 메모리 공간
이렇게 2가지가 생성됨
* 하나의 파일에 여러 개의 클래스가 존재할 때 하나의 클래스만 public 클래스가 될 수 있음
보통 main을 포함한 클래스를 public 클래스로 둔다