객체지향 언어(Object Oriented Programming)의 핵심적인 4가지의 개념
1. 캡슐화
2. 상속
3. 추상화
4. 다형성
객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)
규칙을 외워야지 프로그래밍을 할 수 있음.
클래스(class)
클래스의 정의: 클래스란 객체를 정의해놓은 것
클래스의 용도: 클래스는 객체를 생성하는 데 사용
객체의 정의: 실제로 존재하는 것, 사물 또는 개념
객체의 용도: 객체가 가지고 있는 기능과 속성에 따라 다름
-> 클래스는 설계도, 객체는 제품이라고 생각하면 편함
클래스의 정의
1. 설계도
2. 클래스 == 데이터 + 함수의 결합
1) 변수: 하나의 데이터를 저장할 수 있는 공간
2) 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3) 구조체: 서로 관련된 여러 데이터(종류 관계 x)를 하나로 저장할 수 있는 공간
4) 클래스: 데이터와 함수의 결합(구조체 + 함수)
3. 사용자정의타입: 원하는 타입을 직접 만들 수 있다.
class Time{
int hour;
int minute;
int second;
}
클래스 작성하는 법
(일반적으로는 하나의 소스파일에 하나의 클래스를 작성하는 것이지만 여러개를 작성할 수 있음.)
1. public class가 있는 경우에 소스파일의 이름은 반드시 public class의 이름과 일치해야 함.
둘다 public이 없다면 main method가 있는 클래스의 이름이 소스파일의 이름이 일치해야 함. (case-sensitive)
// Source file name: Hello
public class Hello{}
class Hello1 // 이건 잘못됨
2. 다만 public class가 없는 경우엔, 소스파일의 이름은 아무렇게나 가능
// source file name: Hello
class Hello1{}
class Hello2{}
3. 하나의 소스파일에 둘 이상의 public class가 존재하면 안됨.
// source file name: Hello
public class Hello{}
public class Hello1{}
각 클래스를 별도의 소스파일에 나눠서 저장하던가 아니면 둘 중 하나의 클래스에 public을 없애야함.
객체(object)
객체의 구성요소
객체 = 속성(변수) + 기능(메서드)
속성: 크기, 길이, 높이, 색상, 볼륨 등등
기능: 켜기, 끄기, 채널 변경 등등
객체: 모든 인스턴스를 대표하는 일반적인 용어
인스턴스: 특정 클래스로부터 생성된 객체
(두 용어는 거의 같은 개념)
클래스를 작성하고, 이를 인스턴스화 하면 인스턴스 즉 객체가 생성되는 것.
클래스가 필요한 이유는 객체를 생성하기 위해서임.
1. 객체의 생성
참조변수(reference variable)
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성한 후, 객체의 주소를 참조변수에 저장
Tv t; // Tv 클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv 인스턴스 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장
2. 객체의 사용
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다
t.channelDown(); // Tv 인스턴스의 메서드 channelDown()을 호출한다
System.out.println("현재 채널은 " + t.channel + "입니다.);
- 하나의 인스턴스를 여러개의 참조변수가 가르키는 것: 가능
- 여러 인스턴스를 하나의 참조변수가 가르키는 것: 불가능
3. 객체배열
객체배열 == 참조변수 배열
Tv tv1, tv2, tv3;
Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열로 바꿀 수 있음.
//객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
//이것을 다르게 표현하면
Tv[] tvArr = { new Tv(), new Tv(), new Tv()};
'Self-study > 자바' 카테고리의 다른 글
[Java] HashMap (0) | 2024.01.02 |
---|---|
[자바/Java] overloading (0) | 2023.09.15 |
[자바/Java] Method(메서드)/ Return / Call Stack (0) | 2023.09.15 |
[자바/Java] 변수(Variable) (0) | 2023.09.15 |