Java
는객체지향
언어로써 코드간에 관계를 맺어 줌으로써 보다 유기적인 프로그램을 구성할 수 있습니다. 이번 장에서는 이러한 특징을 가진Java
의 대표적인 요소들의 특징과 관계에 대해서 한번 살펴 보겠습니다!
어떠한 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 ****합니다.
→ 코드를 직접 보면서 익히도록 하겠습니다!
[코드스니펫] 인스턴스 - Phone, Main 클래스
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으로 각기 다른 인스턴스를 만들었습니다.
👉 인스턴스의 멤버변수에 접근할 때는
[생성된 인스턴스.멤버변수]
의 형식을 사용하면 됩니다.
구조화에 대해서는 아래 예시를 보면서 이해를 할 수 있습니다.
int[] heights = new int[5]; // 키가 들어가 있는 배열
initHeight(heights); // 1. 키에 대한 초기화
sortHeight(heights); // 2. 키를 오름차순으로 정렬
printHeight(heights); // 3. 정렬된 키를 출력
보시다시피 코드가 어떠한 작업을 하느냐에 따라 구분이 되어 구조화가 된 것을 확인할 수 있습니다. 엄청나게 긴 코드를 작성할 때 이러한 방식을 통해 보다 쉽게 수정 및 관리를 할 수 있습니다.
메소드를 만들 때는 메소드 안에서 동작하는 내용을 잘 표현할 수 있도록 이름을 잘 지어주면, 메소드 안을 들여다 보지 않고도 한 눈에 코드를 읽어내려갈 수 있어서 좋습니다. 이것을 readability가 좋다고 표현합니다. 이 readability의 기본 품질을 위해서 Java로 메소드를 만들 때 지켜줘야 하는 기본 약속은 다음 두 가지가 있습니다.
1. 동사로 시작해야한다.
2. camel case로 작성해야한다. (첫 단어는 소문자로, 이후 단어의 구분에 따라서 첫 글자만 대문자인 단어가 이어집니다. 중간에 띄어쓰기나 특수문자는 들어가지 않습니다.)
메소드의 역할과 필요한 이유를 알게되었다면, 어떻게 구현을 하는지 알아야겠죠?
메소드는 다음의 형식으로 정의할 수 있습니다.
반환타입 메소드이름 (타입 변수명,타입 변수명, ...){
수행되어야 할 코드
}
메소드이름은 이름이 것일며 수행되어야 할 코드는 수행코드이지만 반환타입이 무엇이지?라는 생각이 드실 수 있습니다. 메소드는 return문을 통해 수행의 결과를 반환하게 됩니다. 이때, 결과의 자료형을 결정하는 부분이 반환 타입입니다.
add(int x, int y) {
int result = x + y;
return result;
}
메소드의 반환타입은 int이며 이는 반환되어지는 변수인 result와 일치하여야 합니다.
👉 반환타입중 void는 '아무 것도 없음'을 의미합니다. 예시로, 메소드내에서 출력을 할 경우 사용할 수 있겠죠?
메소드를 실제로 구현하면서 어떻게 사용되는지 한번 확인해보도록 하겠습니다!
[코드스니펫] 메소드 예제 - Main 함수
class Main {
public static void main(String[] args) {
// write your code here
}
}
[CalScoreTest.java]
class Calculation {
int add(int x, int y) {
int result = x + y;
return result;
}// 두 값을 더한 결과
int subtract(int x, int y) {
int result = x - y;
return result;
}// 두 값을 뺀 결과
}
public class Main {
public static void main(String[] args) {
Calculation calculation = new Calculation();
int addResult = calculation.add(100, 90);
int subResult = calculation.subtract(90, 70);
System.out.println("두 개를 더한 값은 " + addResult);
System.out.println("두 개를 뺀 값은 " + subResult);
}
}
👉 add 메소드와 subtract 메소드 모두 x와 y변수가 중복되어 사용된 것을 확인할 수 있습니다. 하지만, 메소드내의 변수는 지역변수로써 메소드 내부에서만 사용할 수 있는 변수입니다. 즉, 서로 다른 메소드라면 같은 이름의 지역변수를 선언하여 사용해도 됩니다!