현실 세계에서 어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 완성된 제품을 만들듯이, 소프트 웨어를 개발할 때도 부품에 해당하는 객체들을 먼저 만들고 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체지향 프로그래밍(OOP)이라고 합니다.
Java는 객체 지향 프로그래밍 언어로 메서드와 함께 클래스 및 객체(object)와 연관됩니다.
이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 합니다.
즉, 클래스는 객체 생성자 또는 객체를 만들기 위한 청사진과 같습니다.
위 자전거 클래스는 이름, 무게, 가격을 필드(상태)로 가지고 있네요.
메서드(동작)로는 이동하기와 경적 울리기 기능이 가능하도록 설계되었습니다.
객체란?
객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것들 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말합니다.
예를 들어 물리적으로 존재하는 자동차, 자전거, 책, 사람과 추상적인 학과, 강의, 주문 등이 모두 객체가 될 수 있습니다.
객체는 속성과 동작으로 구성되어 있는데 예를 들어 사람은 이름, 나이 등의 속성과 웃다, 걷다 등의 동작이 있습니다.
자동차는 색상, 모델명등의 속성과 달린다, 멈춘다 등의 동작이 있습니다.
자바는 이 속성과 동작들을 각각 필드(field)와 메서드(method)라고 부릅니다.
현실세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링(Object Modeling)이라고 합니다.
객체 모델링은 현실 세계 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메서드로 정의하는 과정이라고 볼 수 있습니다.
객체의 상호작용
메소드 호출은 객체에 도트 연산자를 묻히고 메서드 이름을 기술하는 방식입니다.
도트 연산자는 객체의 필드와 메서드에 접근할 때 사용합니다.
리턴값 = 전자계산기객체.메소드 (매개값1, 매개값2 ...);
int result = Calculator.add (10,20,30);
|
cs |
메서드를 실행하기 위해 필요한 데이터입니다.
예를 들어 10과 20을 주고 더하기 기능을 이용한다라고 했을 때 이 10과 20이라는 매개 값이 더하기 기능의 매개 값인 것입니다.
리턴 값은 메서드가 실행하고 나서 호출한 곳으로 되돌려주는(리턴하는) 값입니다.
객체의 상호작용은 객체 간의 메서드 호출을 의미하며 매개 값과 리턴 값을 통해서 데이터를 주고받습니다.
객체지향 프로그래밍의 특징
객체지향 프로그램의 특징으로는 캡슐화, 상속, 다형성을 들 수 있습니다.
캡슐화
객체의 필드, 메서드를 하나로 묶고 실제 구현 내용을 감추는 것을 말합니다.
외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메서드만 이용할 수 있습니다.
필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 데 있습니다.
예를 들어 TV의 중요한 부품이 바깥으로 노출되어 있다면 사용자의 실수로 인해 고장 날 수 있습니다.
자바 언어는 캡슐화된 멤버를 노출시킬 것인지, 숨길것인지를 결정하기 위해 접근 제한자(Access Modifier)를 사용합니다.
접근 제한자는 객체의 필드와 메소드의 사용범위를 제한함으로써 외부로부터 보호합니다.
상속
상속은 부모가 가지고 있는 재산을 자식에게 물려주는 것을 말합니다.
자식은 특별한 노력 없이 부모가 물려준 재산을 갖게 되는데요.
객체 지향 프로그래밍에서도 부모 역할의 상위 객체와 자식 역할의 하위 객체가 존재합니다.
클래스(class)란
객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.
자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.
클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메서드(method)로 구성됩니다.
즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미하며, 메서드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.
<기본문법>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Cat { // 클래스 이름
public String Name; // 필드
public String color; // 필드
public int age; // 필드
public Cat(String Name, String color, int age) { // 생성자
this.Name = Name;
this.color = color;
this.age = age;
}
void CatInfo() { //메소드 (클래스 출력)
System.out.println(Name);
System.out.println(color);
System.out.println(age);
}
}
public class classtast1 {
public static void main(String[] args) {
Cat c1 = new Cat("나비", "노란색", 1);
c1.CatInfo();
}
}
|
cs |
필드(field)
클래스에 포함된 변수(variable)를 의미합니다.
클래스 내에서 필드는 선언된 위치에 따라 다음과 같이 구분됩니다.
- 클래스 변수(static variable)
- 인스턴스 변수(instance variable)
- 지역 변수(local variable)
변수에 관한 자세한 설명은 다른 페이지에서 이어가도록 하겠습니다
메서드(method)
어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.
즉, 메서드를 사용하면 중복되는 코드의 반복적인 프로그래밍을 피할 수 있게 됩니다.
생성자(constructor)
클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성됩니다.
하지만 이렇게 생성된 객체는 모든 인스턴스 변수가 아직 초기화되지 않은 상태입니다.
따라서 자바에서는 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자(constructor)라는 메서드를 제공합니다.
자바에서 생성자(constructor)의 이름은 해당 클래스의 이름과 같아야 합니다.
즉, Cat 클래스의 생성자는 Cat()가 됩니다.
클래스 선언
int x 변수를 사용하여 "MyClass"라는 클래스를 만들어보겠습니다.
1
2
3
|
class MyClass {
int x = 5;
}
|
cs |
자바 구문 장 클래스는 항상 대문자 첫 글자로 시작해야 하고, 자바 파일의 이름이 클래스 이름과 일치해야 합니다.
객체 생성
"myObj"라는 객체를 만들고 x 값을 인쇄해보겠습니다.
1
2
3
4
5
6
7
8
|
class MyClass {
int x = 5;
public static void main(String[] args) {
MyClass myObj = new MyClass();
System.out.println(myObj.x);
}
}
|
cs |
객체는 클래스에서 생성됩니다.
우리는 이미 "MyClass"라는 클래스를 만들었으므로 이제 이것을 사용하여 객체를 만들 수 있습니다.
여러 객체 생성
이번에는 "MyClass" 클래스에서 3가지 객체를 만들어보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
|
class MyClass {
int x = 5;
public static void main(String[] args) {
MyClass myObj1 = new MyClass();
MyClass myObj2 = new MyClass();
MyClass myObj3 = new MyClass();
System.out.println(myObj1.x);
System.out.println(myObj2.x);
}
}
|
cs |
myObj1, myObj2, myObj3이라는 객체 3가지를 생성했습니다.
클래스 속성 수정
클래스 내부의 속성 값을 main에서 수정할 수 있습니다.
MyClass의 name속성과 age속성 값을 재설정해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Cat {
String name = "나비";
String color = "검정";
int age = 5;
}
public static void main(String[] args) {
Cat cat1 = new Cat();
cat1.name="흰둥";
cat1.age=7;
System.out.println("Name: " + cat1.name+" color: " + cat1.color);
System.out.println("Age: " + cat1.age);
}
}
|
cs |
<실행결과>
Name: 흰둥 color: 검정
Age: 7
여러 속성 지정하기
원하는 수의 속성을 지정할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
|
class Cat {
String name = "나비";
String color = "검정";
int age = 5;
}
public static void main(String[] args) {
Cat cat1 = new Cat();
System.out.println("Name: " + cat1.name+" color: " + cat1.color);
System.out.println("Age: " + cat1.age);
}
}
|
cs |
<실행결과>
Name: 나비 color: 검정
Age: 5
'개발자였던 것 > JAVA 기초' 카테고리의 다른 글
참조 타입과 참조 변수 (0) | 2020.05.10 |
---|---|
자바 문자열 함수/ length(), length, equals(), format() (0) | 2020.04.03 |
배열 (0) | 2020.03.08 |
조건문 (0) | 2020.03.07 |
문자의 입력과 출력-Scanner (0) | 2020.03.06 |