오늘 배운 내용
1.클래스
- 클래스의 구성
- 필드 : 필드는 객체의 고유 데이터, 부품객체 등을 저장하는 곳이다. 변수와 비슷하지만 필드를 변수라고 부르진 않는다. 왜냐하면 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동으로 소멸하기 때문이다. 그런데 필드는 생성자와 메서드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다. 그림으로 그리면 약간 이런 느낌인가...

- 인스턴스 : 인스턴스는 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다. 즉, new 객체생성자를 이용해 객체를 생성하게되면 그게 인스턴스가 되는 것이다.
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의 기본 품질을 위해서 자바 메서드를 만들때 지켜줘야 하는 두가지 약속이 있다.
첫째) 동사로 시작해야 한다.
둘째) camel case로 작성해야 한다.
메서드 구현예시
int add(int x, int y) {
int result = x + y;
return result;
}
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변수가 중복되어 사용되었다. 하지만, 메소드내의 변수는 지역변수로써 메소드 내부에서만 사용할 수 있는 변수이다. 즉, 서로 다른 메소드라면 같은 이름의 지역변수를 선언하여 사용해도 된다.
- 생성자
- 생성자는 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
- 객체 초기화는 필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것이다.
- 생성자를 생략하면 기본 생성자가 생긴다.
- 생성자에게도 생성자만의 조건이 있다.
- 생성자의 이름은 클래스명과 같아야 한다.
- 생성자는 리턴 값이 없다.
생성자 예시코드
class Phone {
String model;
String color;
int price;
}
public class Main {
public static void main(String[] args) {
Phone galaxy = new Phone();
Phone iphone =new Phone();
System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
}
}
class Phone {
String model;
String color;
int price;
Phone(String model, String color, int price) {
this.model = model;
this.color = color;
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Phone galaxy = new Phone("Galaxy10", "Black", 100);
Phone iphone =new Phone("iPhoneX", "Black", 200);
System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
}
}
더 찾아볼 내용
모듈, 결합도와 응집도, 추상클래스, 인터페이스
느낀점
클래스의 개념이 아직 제대로 잡히지 않은것 같다. 클래스와 추상클래스, 인터페이스의 개념이 어렴풋이 알것 같으면서도 막상 설명하려고 하면 설명을 못하겠다.. CS 지식도 부족해서 틈틈히 CS 지식을 찾으려고 노력중이다.
튜터님들께 계속 찾아가서 CS 지식의 키워드로도 얻어들으려고 하고 튜터님들께 들은 키워드들은 그때그때 노션에 적어두었다가 주말이나 틈이날때 구글에 한번씩 검색해본다..
아직은 구글에 검색한 것을 읽어도 이해가 가지 않지만... 계속 여러번 읽다보면 가랑비에 옷 젖듯이 내 머릿속에 스며들겠지...
'Practice > Java' 카테고리의 다른 글
| 스프링) @Transactional 정리 (0) | 2022.12.19 |
|---|---|
| 스프링 코드 분석) 메모장 만들기 프로그램 (2) | 2022.12.08 |
| JDK,JRE,JVM 자바 프로그램의 구동 원리. (0) | 2022.12.01 |
| 기초 자바 개념정리: ArrayList (0) | 2022.11.24 |
| 기초 자바 개념정리: 접근 제어자 와 캡슐화 (0) | 2022.11.19 |