자바는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이다.
자바는 모든 데이터를 객체(object)로 취급한다.
객체(object)는 사물과 같은 것으로 상태(state)와 행동(behavior)을 포함한다.
자바에서는 객체를 클래스(class)로 나타낸다.
클래스
클래스는 자바의 가장 작은 단위로, 객체의 상태를 나타낸다.
객체는 상태(state)와 행동(behavior)을 포함한다고 했는데 클래스에서는 이 상태를 필드(field)로, 행동을 메소드(method)로 구성한다.
클래스의 기본 형태는 다음과 같다.
public class DoorLockManager{ //중간내용 } |
접근제어자, access modifier class 클래스명{ //중간내용 } |
메소드
클래스의 행동을 나타내는 것으로, 어떤 값을 받아 결과를 넘겨주는 것을 메소드라고 한다.
즉, 특정 작업을 수행하기 위한 명령문의 집합이라고 할 수 있다.
모든 자바 클래스는 main()메소드로 시작하며 형태는 다음과 같다.
public static void main(String[] args){ //메소드내용 } |
접근제어자, access modifier 리턴 타입, return type 메소드명 (매개변수, parameter) 예외목록, exception list { //메소드내용 } |
의미를 해석하자면, 매개변수를 입력받아 메소드명에 프로그래밍 되어있는 계산을 마치고 리턴 타입을 결과값으로 넘겨준다는 뜻이다.
메소드는 반드시 클래스에 속해 있어야한다.
- 제어자 : public, static과 같은 메소드의 특성을 정하는 부분.
- 리턴 타입(return type) : 메소드가 끝났을 때 돌려주는 타입. void는 이 메소드는 아무것도 돌려주지 않는다는 뜻이다.
- 메소드명(method name) : 메소드 이름을 지정한다.
- 매개변수(parameter) : 매개 변수의 목록. 여러개여도 되고, 없어도 된다.
- 예외목록(exception list) : 예외 목록을 선언할 수 있다.
- 메소드 내용(method body) : 중괄호 안에 있는 내용들을 말한다.
클래스 안에 메소드를 넣으면 다음과 같은 형태가 된다.
public class DoorLockManager{
public static void main(String[] args){
//메소드내용
}
}
DoorLockManager클래스에 main()메소드가 정의되어있다.
접근제어자에 대해서는 따로 정리해두었다.
2022.10.07 - [자바/개념정리] - [JAVA] 접근제어자(Access Modifier)
[JAVA] 접근제어자(Access Modifier)
메소드가 헷갈리는 경우 2022.10.04 - [자바/개념정리] - [JAVA] 클래스와 메소드 [JAVA] 클래스와 메소드 자바는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이다. 자바는 모든 데이터를 객체(obje..
jjh-blog.tistory.com
인스턴스(instance)
자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 하는데, 이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 한다.
다음과 같은 클래스를 만들어보자.
PlusMinus라는 클래스에 plus와 minus 메소드를 작성한 것이다.
package Class;
public class PlusMinus {
int add, sub;
public String plus(int x, int y) {
add = x+y;
return "두 수의 합은 " + add;
}
public String minus(int x, int y) {
sub = x+y;
return "두 수의 차는 " + sub;
}
}
이를 실행하면? 아무런 것도 나오지 않는다.
main()가 아니기 때문이다. 아까 말했듯이, 모든 자바 클래스는 main()메소드로 시작한다.
그럼 main()를 다음과 같이 작성해주자.
package Class;
public class PlusMinusTest1 {
public static void main(String[] args) {
PlusMinus ob1 = new PlusMinus(); //ob1 객체 생성. 객체 인스턴스 화
String ssum, sminus;
ssum = ob1.plus(50, 30);
sminus = ob1.minus(50, 30);
System.out.println(ssum);
System.out.println(sminus);
}
}
결과
해당 프로그램을 실행하면, 자바는 PlusMinusTest1에 있는 main()메소드를 찾아 실행한다.
PlusMinus ob1 = new PlusMinus(); 에서 ob1가 바로 인스턴스이다.
이전에 작성한 PlusMinus 에 접근하여 계산한 값이 도출되는 것을 확인할 수 있다.
이때,
클래스는 PlusMinus, PlusMinusTest1
메소드는 클래스 안에 정의 되어있는 public String plus(int x, int y), public String minus(int x, int y), main()
인스턴스는 클래스를 객체를 불러오는 ob1이다.
예제
Tv라는 클래스를 생성하자.
package Class;
public class Tv {
//필드(field) 속성
boolean power;
String color;
int size;
int channel;
int volume;
//전원 기능
void power(){
power = !power; //false면 true로 true면 false로 변경해주는 스위치 기능
}
//채널 기능
void channerUp() {
++channel;
}
void channerDown() {
--channel;
}
//볼륨 기능
void volumeUp() {
++volume;
}
void volumeDown() {
--volume;
}
}
Tv라는 객체 Class를 생성한 것이다.
아까 말했듯이 객체는 상태(state)와 행동(behavior)을 포함한다.
Class에서는 필드(field)와 메소드(method)로 이를 표현한다.
Tv 클래스에는 Tv의 상태를 알 수 있는 사이즈, 볼륨, 채널 등을 나타내는 필드가 설정되어있고, Tv의 전원을 끄고, 채널과 볼륨을 조절하는 행동을 나타내는 메소드가 설정되어있다.
하지만 이 객체만으로는 아무것도 실행되지 않는다.
main()메소드가 없고 무슨 메소드를 사용할지도 정하지 않았기 때문이다.
main()메소드를 다음과 같이 작성하면
package Class;
public class SampleTv {
public static void main(String[] args) {
Tv samsung = new Tv();
System.out.println("TV 전원은 " + samsung.power);
samsung.power();
System.out.println("TV 전원은 " + samsung.power);
}
}
Tv samsung = new Tv(); 를 통해 미리 만들어 두었던 Tv객체를 samsung이라는 객체를 선언했다. 이것을 클래스의 인스턴스화라고 한다.
samsung.power를 통해 Tv객체의 필드 power에 접근 할 수 있고
samsung.power();를 통해 Tv객체의 메소드 power()를 통해 전원을 변경할 수 있다.
결과
'DEV > JAVA' 카테고리의 다른 글
[JAVA] Array의 활용 (0) | 2022.10.05 |
---|---|
[JAVA] Array (0) | 2022.10.05 |
[JAVA] 369게임 (0) | 2022.09.16 |
[JAVA] 동전 계수기 프로그램 (0) | 2022.09.16 |
[JAVA] 자릿수 비교 (0) | 2022.09.16 |
댓글