[이것이 자바다] 6장 정리

자바에서의 객체와 클래스, 필드, 생성자, 메소드, 인스턴스, 정적 멤버, 접근 제한자에 대한 내용을 정리한 포스트입니다.
Jan 09, 2024
[이것이 자바다] 6장 정리

Car.java

package ch06; public class Car { String model = "현대자동차"; // 명시적 초기화 int speed = 60; boolean start = true; { // 초기화 블록 model = "기아자동차"; speed = 30; } Car() { // 생성자 블록 순으로 실행순서 가짐. model = "자동차"; } Car(String model) { // 파라미터의 개수가 같더라도 타입이 다르거나 순서가 다르면 오버로딩이 가능하다. this(model, 60, true); // 파라미터와 필드명이 같으면 구분이 어려우므로 this로 표기 } Car(int speed) { // this()를 통해 간결하게 코드 작성 가능. this("현대자동차", speed, true); } Car(String model, int speed, boolean start) { this.model = model; this.speed = speed; this.start = start; } String drive(String name) { // 메서드를 만들때 리턴할 타입을 표시한다. return name + "을 태우고 " + this.speed + "의 속도로 출발합니다"; } }

CarExam.java

package ch06; public class CarExam { public static void main(String[] args) { // 자동차 인스턴스 생성 Car myCar = new Car("현대자동차", 60, true); System.out.println("내 차의 모델명: " + myCar.model); System.out.println("내 차의 속도: " + myCar.speed); System.out.println("내 차의 시동여부: " + myCar.start); System.out.println(myCar.drive("김김김")); } }

핵심 키워드

  • 객체에서 값을 선언을 할 경우 디폴트 값, 명시적 초기화, 초기화 블록, 생성자 순서로 실행순서를 가진다.
  • 파라미터와 필드 이름은 똑같이 선언하는 것을 원칙으로 한다.
    • 이 경우 구분이 어려울 수 있으므로 this를 사용한다.
  • 메소드를 만들때는 리턴할 타입을 표시해야 한다.
  • 동일한 이름을 가진 메소드를 만들 수 없다.
    • 하지만 파라미터의 타입이 다르거나, 순서가 다르면 오버로딩을 통해 메소드를 만들 수 있다.
 

Calculator.java

package ch06; public class Calculator { boolean power = false; // 전원 켜기 void powerOn() { this.power = true; System.out.println("전원을 켭니다."); } // 전원 끄기 void powerOff() { this.power = false; System.out.println("전원을 끕니다."); } int plus(int x, int y) { int result = 0; if(power) { result = x + y; }else { System.out.println("전원이 꺼져있습니다."); } return result; } double plus(double x, double y) { // 오버로딩 double result = 0; if(power) { result = x + y; }else { System.out.println("전원이 꺼져있습니다."); } return result; } int minus(int x, int y) { int result = 0; if(power) { result = x - y; }else { System.out.println("전원이 꺼져있습니다."); } return result; } // int sum(int ... values) { // int result = 0; // for(int v : values) { // result += v; // } // return result; // } int sum(int[] values) { // 이 형태를 더 많이 쓴다. int result = 0; for(int v : values) { result += v; } return result; } }

CalculatorExam.java

package ch06; public class CalculatorExam { public static void main(String[] args) { Calculator cal = new Calculator(); cal.plus(10, 10); cal.powerOn(); System.out.println(cal.plus(10, 10)); System.out.println(cal.minus(10, 10)); System.out.println(cal.plus(10.0, 10.0)); System.out.println(cal.sum(new int[] {1,2,3,1})); cal.powerOff(); } }
 

핵심 키워드

  • 만약 메소드가 가변길이 매개변수를 가지고 있다면 매개변수의 개수와 상관없이 매개값을 줄 수 있다.
    • 가변길이 매개변수는 int sum(int … values) 와 같이 선언한다.
  • 하지만 int sum(int[] values) 이와 같은 형태를 더 많이 사용한다.
 

Korean.java

package ch06; public class Korean { final static String nation = "대한민국"; // 상수: 고정되어야 하고 공유되어야 하는 값 final String ssn; // final 필드: 고정되어야 하지만 공유는 하지 않아도 되는 값 String name; public Korean(String ssn, String name) { this.ssn = ssn; this.name = name; } }

KoreanExam.java

package ch06; public class KoreanExam { public static void main(String[] args) { Korean k1 = new Korean("123456-1234567","김김김"); System.out.println(k1.nation); System.out.println(k1.ssn); System.out.println(k1.name); k1.name = "박박박"; System.out.println(k1.name); } }
 

핵심 키워드

  • 상수란 불변하는 값이다. 이러한 상수를 자바에서 표현하기 위해선 final과 static을 함께 사용한다.
  • final필드는 고정된 값을 원하지만 공유는 하지 않아도 되는 경우에 사용한다.
 

Singleton.java

package ch06; public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } }

SingletonExam.java

package ch06; public class SingletonExam { public static void main(String[] args) { // 싱글톤: 생성자를 새로 만드는게 아닌 이미 존재하는 하나의 공유되는 인스턴스만 사용하게 하는 것 Singleton s = Singleton.getInstance(); } }
 

핵심 키워드

  • public, protected, (default), private와 같은 접근 제한자를 통해 객체의 필드를 외부에서 변경하거나 메소드를 호출할 수 없도록 막을 수 있다.
  • 애플리케이션 전체에서 단 한 개의 객체만 생성해서 사용하고 싶다면 싱글톤 패턴을 적용한다. 싱글톤 패턴의 핵심은 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것이다.
 

결론

해당 문제를 풀면서 자바에서의 객체와 클래스, 필드, 생성자, 메소드, 인스턴스, 정적 멤버, 접근 제한자를 사용하는 방법을 익힐 수 있었다.
 
Share article

👨🏻‍💻DriedPollack's Blog