Java 89

[Java] 패키지 2022.11.28

Intro. 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야 함 클래스를 체계적으로 관리하지 않으면 클래스 간의 관계가 뒤엉켜 복잡하고 난해한 프로그램이 됨 ➡ 유지보수가 어려워짐 자바에서는 클래스를 체계적으로 관리하기 위해 패키지(package)를 사용함 폴더를 만들어 파일을 저장 관리하듯 패키지를 만들어 클래스를 저장 관리함 패키지의 물리적인 형태 == 파일 시스템의 폴더 패키지란? 패키지는 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분임 클래스를 유일하게 만들어주는 식별자 역할을 함 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식 클래스의 전체 이름은 "패키지명 + 클래스명" 패키지가 상·하위로 구분되어 있다면 도트( . )를 사용해..

[Java] final 필드와 상수 2022.11.28

final 필드 : 초기값이 저장되면 이것이 최종적인 값이 되어 프로그램 실행 도중에 수정할 수 없는 필드 final 필드의 선언 final 타입 필드 [= 초기값]; final 필드의 초기화 final 필드의 초기값을 줄 수 있는 방법은 두 가지 밖에 없음 필드 선언시 초기값을 주는 방법 생성자에서 주는 방법 단순 값이라면 필드 선언시에 주는 것이 제일 간단 복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부 데이터로 초기화해야 한다면 생성자에서 초기값을 지정 생성자는 final 필드의 최종 초기화를 마쳐야 하는데, 만약 초기화 되지 않은 final 필드를 그대로 남겨두면 컴파일 에러 발생 final 필드 초기화 EX) //[Person.java] public class Person { final S..

[Java] 싱글톤 (Singleton) 2022.11.28

프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있음단 하나만 생성된다고 하여 이 객체를 싱글톤 (Singleton) 이라고 함 1) 싱글톤을 만들려면 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 함 생성자를 호출한 만큼 객체가 생성되기 때문생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙이면 됨2) 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화클래스 내부에는 new 연산자로 생성자 호출이 가능3) 정적 필드도 private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 막음 4) 대신 외부에서 호출할 수 있는 정적 메소드인 getInstance()를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴 ..

[Java] 정적 멤버와 static 2022.11.28

정적 멤버 : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드 정적 (static) : '고정된' 각각 정적 필드, 정적 메소드라고 부름 정적 멤버는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고도 함 정적 멤버 선언 필드와 메소드 선언 시 static 키워드를 추가적으로 붙임 public class 클래스 { //정적필드 static 타입 필드 [= 초기값]; //정적 메소드 static 리턴 타입 메소드( 매개변수선언, ... ) { ... } } 정적 필드와 정적 메소드는 클래스에 고정된 멤버 클래스 로더가 클래스 (바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리됨 클래스의 로딩이 끝나면 바로 사용할 수..

[Java] 인스턴스 멤버와 this 2022.11.28

인스턴스(instance) 멤버 : 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드 각각을 인스턴스 필드, 인스턴스 메소드라 부름 인스턴스 필드와 인스턴스 메소드는 객체에 소속된 멤버이기 때문에 객체 없이는 사용할 수 없음 인스턴스 멤버 EX) public class Car { //필드 int gas; //메소드 void setSpeed(int speed) { ... } } gas 필드와 setSpeed() 메소드는 인스턴스 멤버 외부 클래스에서 사용하기 위해서 Car 객체(인스턴스)를 생성하고 참조 변수로 접근해야 함 Car myCar = new Car(); myCar.gas = 10; myCar.setSpeed(60); Car yourCar = new Car(); yourCar.gas = ..

[Java] 메소드 오버로딩 2022.11.28

메소드 오버로딩 (overloading) : 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것 overloading : (사전적 의미) 많이 싣는 것 ➡ 메소드 오버로딩 : "하나의 메소드 이름으로 여러 기능을 담는다" 메소드 오버라이딩의 가장 대표적인 EX) - System.out.println() 메소드 void println() {...} void println(char x) {...} void println(char[] x) {...} void println(double x) {...} void println(float x) {...} void println(int x) {...} void println(long x) {...} void println(Object x) {...} void p..

[Java] 메소드 호출 2022.11.27

메소드는 클래스 내 · 외부의 호출에 의해 실행됨클래스 내부의 다른 메소드에서 호출할 경우 단순한 메소드 이름으로 호출하면 됨클래스 외부에서 호출할 경우 우선 클래스로부터 객체를 생성한 뒤, 참조 변수를 이용해서 메소드를 호출해야 함➡  객체가 존재해야 메소드도 존재하기 때문    객체 내부에서 호출메소드 ( 매개값, ... );클래스 내부에서 다른 메소드를 호출할 경우 메소드 이름(매개값, ...) 으로 호출메소드가 매개 변수를 가지고 있을 경우 매개 변수의 타입과 수에 맞게 매개 값을 제공 method2() 메소드에서 method1() 메소드를 호출① 호출에서 method1("홍길동", 100)이 호출 매개값인 "홍길동"은 p1 매개 변수에 대입 100은 p2 매개 변수에 대입② 실행에서 p1과 p2..

[Java] 리턴(return)문 2022.11.27

리턴 값이 있는 메소드 메소드 선언에 리턴타입이 있는 메소드는 반드시 리턴(return)문을 사용해서 리턴값을 지정해야 함 만약 return 문이 없다면 컴파일 에러 발생 return 문이 실행되면 메소드는 즉시 종료 됨 return 리턴값; return문의 리턴값은 리턴 타입이거나 리턴 타입으로 변환될 수 있어야 함 리턴 타입 EX) int plus(int x, int y) { int result = x+y; return result; } int plus(int x, int y) { byte result = (byte)(x+y); return result; } 리턴 타입이 int인 plus() 메소드에서 byte, short, int 타입의 값이 리턴되어도 OK byte와 short은 int로 자동 타..

[Java] 메소드의 매개 변수의 수를 모를 경우 2022.11.27

메소드의 매개 변수는 개수가 이미 정해져 있는 것이 일반적 But, 경우에 따라서 메소드를 선언할 때 매개 변수의 개수를 알 수 없는 경우가 있음 EX) 여러개의 수를 모두 합산하는 메소드 : 몇 개의 변수가 입력될지 알 수 없음 ➡ 매개 변수의 개수를 결정할 수 없음 sol1 ) 매개 변수를 배열 타입으로 선언 int sum1(int[] values) { } sum1() 메소드를 호출할 때 배열을 넘겨줌으로써 배열의 항목 값들을 모두 전달할 수 있음 배열의 항목 수는 호출할 때 결정됨 int[] values = {1, 2, 3}; int result = sum1(values); int result = sum1(new int[] {1, 2, 3, 4, 5}); 매개 변수를 배열 타입으로 선언하면 메소드를..

[Java] 메소드 2022.11.27

메소드 : 객체의 동작에 해당하는 중괄호 { } 블록 이름을 가지고 있음 메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행됨 필드를 읽고 수정하는 역할 + 다른 객체를 생성해서 다양한 기능을 수행 객체 간의 데이터 전달의 수단으로 사용 외부로부터 매개값을 받을 수 있고 실행 후 값을 리턴할 수 있음 메소드 선언 메소드 선언 : 선언부 (리턴 타입-output, 메소드 이름-기능, 매개변수 선언-input) + 실행 블록 선언부 == 메소드 시그니쳐 (signature) 리턴 타입 메소드가 실행 후 리턴하는 값의 타입 메소드는 리턴값이 있을 수도 있고 없을 수도 있음 메소드가 실행 후 결과를 호출한 곳에 넘겨줄 경우 리턴값이 있어야 함 리턴 값이 없는 메소드의 리턴 타입 : void..