(이 강의는 새로운 용어 정리가 많아서 강의자료에서 많이 가져옴.)
책이랑 같이보고 있는데 책 내용부터 먼저 정리해보자면,
객체란 자신의 속성을 가지고 있으면서 식별 가능한 것으로, 속성(필드)과 동작(메소드)으로 구성되어있다.
클래스는 자바의 설계도. 객체를 생성하기 위한 필드(속성)와 메소드(동작)이 정의되어있다.
인스턴스(instance) : 클래스로부터 만들어진 객체
하나의 클래스로 여러 개의 인스턴스를 만들 수 있는데, 이건 동일 설계도로 여러 대의 자동차를 만드는 것과 같다.
객체지향프로그래밍(OOP: Object-Oriented Programming)은 부품에 해당하는 객체(Object)를 먼저 만들고 객체를 조립해 완성된 프로그램을 만드는 기법.
- 1단계 클래스 설계
- 2단계 설계된 클래스를 가지고 사용할 객체를 생성
- 3단계 생성된 객체를 이용
쓰고 다시 읽다보니 그럼 객체나 인스턴스나 같은 말인가 싶어서 검색
객체[Object]와 인스턴스[Instance]
객체[Object]와 인스턴스[Instance] 객체와 인스턴스는 객체지향 프로그래밍에서는 거의 비슷한 개념으로 사용되지만 엄밀히 말하면 조금은 차이가 있는 개념이다. 객체지향 프로그래밍이 생성된
cooablue.tistory.com
둘의 차이점이 약간 존재하는데
'인스턴스'는 클래스의 정의로 부터 만들어진 객체로 조금 더 한정적인 용어인 것 같다.
...근데 이렇게 검색한 내용들 다 정확한 걸까..? 믿어도 되나..? 이제 의문이 슬슬 들기 시작하는데
이래서 나중에 공식문서 위주로 보게 되는 건가... 싶어..ㅎ
사전)instance : 사례, 경우; ~을 예로 들다.
<클래스 선언 방법>
- 하나 이상의 문자로 구성
- 첫 글자에 숫자x
- 특수문자는 $, _만 가능
- 자바 키워드 사용x
한글이냐 영어냐 상관없지만 한글로 만드는 경우는 거의 없고
자바 언어는 대소문자 구별함.
통상 클래스 이름이 단일 단어라면 첫 글자는 대문자, 나머지 소문자
여러단어 혼합 이름이면 각 단어 첫글자 대문자.
Java는 객체지향언어로써 코드간에 관계를 맺어 줌으로써 보다 유기적인 프로그램을 구성할 수 있습니다.
1. 클래스란?
-
- 클래스는 표현하고자 하는 대상의 공통 속성을 한 군데에 정의해 놓은 것이라고 할 수 있습니다. 즉, 클래스는 객체의 속성을 정의해 놓은 것이죠.
- 또한 클래스 내부의 정보를 멤버 변수라라고 합니다.
- 붕어빵 틀은 붕어빵을 만드는데 이용이 되죠. 클래스랑 인스턴스도 이와 마찬가지로 생각하시면 됩니다. 붕어빵을 만드는 틀이 곧 클래스가 되며 붕어빵 틀로부터 만들어진 붕어빵이 곧 인스턴스가 되는 것입니다!
- **인스턴스(Instance)**란?
- 어떠한 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 ****합니다.
class Phone {
String model;
String color;
int price;
}
public class Main {
public static void main(String[] args) {
Phone galaxy = new Phone();
galaxy.model = "Galaxy10";
galaxy.color = "Black";
galaxy.price = 100;
Phone iphone =new Phone();
iphone.model = "iPhoneX";
iphone.color = "Black";
iphone.price = 200;
System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
}
}
- Phone라는 클래스에는 컴퓨터의 모델, 색깔, 가격에 대한 정보가 담겨져 있습니다. 이를 활용하여 model, color, price라는 같은 속성을 가진 galaxy, iphone으로 각기 다른 인스턴스를 만들었습니다.
👉 인스턴스의 멤버변수에 접근할 때는 [생성된 인스턴스.멤버변수] 의 형식을 사용하면 됩니다.
2.메소드(method)
-
- 자! 생성자를 설명하기 이전에 메소드에 대해서 이야기하도록 하겠습니다. 메소드는 어떠한 작업을 수행하는 코드를 하나로 묶어 놓은 것이라고 생각하면 됩니다.
- 메소드가 필요한 이유
- 재사용성
- 메소드를 만들어 놓으면 이후 반복적으로 재사용이 가능합니다. 물론, 다른 프로그램에서도 사용이 가능하죠.
- 중복된 코드 제거
- 프로그램을 작성하다보면 같은 코드가 여러번 반복되어 작성되곤 합니다. 이럴 때, 메소드를 활용하면 중복된 부분을 없애므로 보다 효율적인 코드가 됩니다.
- 프로그램 구조화
- 구조화에 대해서는 아래 예시를 보면서 이해를 할 수 있습니다.
class Phone {
String model;
String color;
int price;
}
public class Main {
public static void main(String[] args) {
int [] heights = new int[] {10,20,30,40,50};
initHeight(heights);
sortHeight(heights);
printHeight(heights);
}
}
마지막 세줄은 함수 정의하지 않아서 빨갛게 뜨는 데 일단 예시를 위한 거라고 한다.
sortHeight(heights) : 나는 heights를 오름차순으로 정렬하고 싶어.
printHeight(heights) : 나는 heights에 있는 것을 하나하나 꺼내서 출력하고 싶어
int[] heights = new int[5]; // 키가 들어가 있는 배열
initHeight(heights); // 1. 키에 대한 초기화
sortHeight(heights); // 2. 키를 오름차순으로 정렬
printHeight(heights); // 3. 정렬된 키를 출력
보시다시피 코드가 어떠한 작업을 하느냐에 따라 구분이 되어 구조화가 된 것을 확인할 수 있습니다. 엄청나게 긴 코드를 작성할 때 이러한 방식을 통해 보다 쉽게 수정 및 관리를 할 수 있습니다.
sort나 이런 함수를 쓰지 않으면
height[0] = 50;
height[1] = 40;
이렇게 하나씩 해줘야함. 코드도 길어지고 읽기도 어려워 짐.
일정한 작업의 단위, 중복된 코드, 프로그램의 재사용성 구조화를 위해 method 선언해서 사용
method 선언시 사용하면 좋을 convention
1. 동사로 시작
2. camel case지켜서 할 것.
int add(int x, int y){
return x+y;
제일 앞 int는 함수의 결과값이 전달되는 type : return type
(파라미터)는 여러개나 내가 원하는 만큼 선언해서 쓸 수 있다.
항상 type, 변수 이름 순으로 써 줌.
return 뒤는 제일 앞 type에 맞게 어떤 값을 결과로 넘겨줄 건지 쓰게 됨.
x+y이렇게 expression표현으로도 가능하고 특정 값을 return할 수도 있고,
int add(int x, int y){
int result = x+y;
return result;
이렇게 안에서 선언된 변수 자체를 넘겨줄 수도 있음.
int add(int x, int y){
int result = x+y;
return result;
}
int minus(int x, int y){
return x-y;
}
함수 안에서 정의된 x, y는 그 안에서만 존재하는 친구들임.
<함수 사용 방법 예시>
class Calculation{
int add(int x, int y){
return x+y;
}
int subtract(int x, int y){
return x-y;
}
}
public class Main {
public static void main(String[] args) {
Calculation calculation = new Calculation();
int addResult = calculation.add( 1, 2);
int subtractResult = calculation.subtract(5, 3);
System.out.println(addResult);
System.out.println(subtractResult);
}
}
=>3
2
강의자료 : https://www.notion.so/80db7f3685304ab3ac749e0e9cd29b30#3225851008da40e1ab0a9da70311c852
[스파르타코딩클럽] 자바 문법 뽀개기
매 주차 강의자료 시작에 PDF파일을 올려두었어요!
www.notion.so
'항해99 > Java 문법 뽀개기' 카테고리의 다른 글
자바문법뽀개기(10) - 객체지향언어(상속) (0) | 2022.09.26 |
---|---|
자바문법뽀개기(9) - 객체지향언어(생성자) (0) | 2022.09.26 |
자바문법뽀개기(7) - 반복문 (1) | 2022.09.26 |
자바문법뽀개기(6) - 조건문 (0) | 2022.09.25 |
자바문법뽀개기(5) - 연산자 (0) | 2022.09.25 |