본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 싱글톤 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤이라고 한다. 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자 호출을 막아야 한다. 생성자를 외부에서 호출할 수 없도록 하려면 private 접근 제한자를 붙여주면 된다. 생성자를 private으로 접근을 제한했더라도, 클래스 내부에서는 생성자 호출이 가능하다. 싱글톤을 만드는 방법은 다음과 같다. 정적 필드로 자신 타입의 객체를 생성하고 private로 외부 접근을 제한한다. 생성자를 private를 이용하여 외부 접근을 제한한다. 정적 메소드를 선언하고 ..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 객체마다 필드값이 달라야 한다면 해당 필드는 객체마다 가지고 있는 것이 맞다. 하지만 객체의 필드값이 모두 같아야 한다면 이 필드를 객체마다 가지고 있을 필요가 있을지 의문이 든다. 만약 객체마다 갖고 있다면 메모리가 낭비되며, 모든 객체의 필드값을 같게 맞추는 추가적인 작업이 필요할 수도 있다. 오히려 이런 필드는 한 곳에 위치시키고 객체들이 공유하는 것이 좋을 수 있다. 자바는 이런 경우를 위해 클래스 멤버를 인스턴스 멤버와 정적 멤버로 구분해서 선언할 수 있도록 하고 있다. 인스턴스 멤버는 객체마다 가지고 있는 멤버를 말하고, 정적 멤버는 클래스에 위치시키고 객체들이 공유하는 멤버를 말한다. 인스턴스 멤버와 thi..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 메소드 선언은 선언부와 실행 블록으로 구성된다. 메소드 선언부를 메소드 시그니처라고 한다. 메소드 시그니처에는 리턴타입, 메소드 이름, 매개 변수 선언이 온다. 메소드 선언 리턴 타입 리턴 타입은 있을 수도 있고 없을 수도 있다. 리턴 타입이 없다면 void라고 명시하면 되고, 리턴 타입이 있다면 해당 타입을 명시하면 된다. 리턴 타입이 있다면 반드시 리턴 값을 리턴해야 한다. 리턴 값을 담는 변수와 리턴 값이 자동으로 형변환이 된다면 타입이 달라도 상관이 없다. 메소드 이름 메소드 이름은 자바 식별자 규칙에 맞게 작성하면 된다. 관례적으로 메소드 이름은 소문자로 작성한다. 서로 다른 단어가 혼합된 이름이라면 뒤이어 오..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 생성자 생성자는 new 연산자로 클래스로부터 객체를 생성할 때 호출되어 주로 객체의 초기화를 담당한다. 생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다. 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다. new 연산자에 의해 생성자가 실행되면 힙 영역에 객체가 생성되고 객체의 주소가 리턴된다. 리턴된 객체의 주소는 클래스 변수에 저장된다. 기본 생성자(Default Constructor) 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 기본 생성자를 바이트 코드에 자동 추가한다. 클래스가 public class로 선언되면 기본 생성자에서도 public이 붙지만 클래스가 public..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 필드는 객체의 고유 데이터, 객체가 가져야 할 다른 객체, 객체의 현재 상태 데이터를 저장하는 곳이다. 필드 선언 필드 선언은 클래스 중괄호 블록 어디든 할 수 있다, 하지만 생성자와 메소드 중괄호 블록 내부에는 선언될 수 없다. 생성자와 메소드 중괄호 블록 내부에 선언된 것은 모두 로컬 변수가 되기 때문이다. 필드 선언은 변수의 선언 형태와 비슷하다. 그래서 일부 사람들은 클래스 멤버 변수라고 부르기도 한다. 필드의 초기값은 필드 선언 시 주어질 수도 있고 생략될 수도 있는데, 초기값이 지정되지 않은 필드는 객체 생성 시 자동으로 기본 초기값으로 설정된다. 필드 사용 필드를 사용한다는 것은 필드값을 읽고 변경하는 작업..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 클래스는 두 가지 용도가 있다. 하나는 라이브러리(API)용이고, 다른 하나는 실행용이다. 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다. 프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리 클래스이고, 단 하나가 실행용 클래스이다. 실행용 클래스는 프로그램의 실행 진입점인 main()메소드를 제공하는 역할을 한다. 클래스 구성 멤버 클래스의 구성 멤버로는 필드(field), 생성자(constructor), 메소드(method)가 있다. 필드 선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지는 않는다. 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 객체 지향 프로그래밍 현실 세계에서 어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 제품을 완성하듯이 소프트웨어를 개발할 때에도 부품에 해당하는 객체를 먼저 만든다. 그리고 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP : Obeject Orented Programming)이라고 한다. 객체는 속성과 동작으로 구성되어 있다. 예를 들어 사람 객체의 속성으로는 이름, 나이 등이 있고, 동작으로는 걷기, 말하기, 먹기 등이 있다. 자바는 이 속성과 동작을 각각 필드와 메소드라고 부른다. 현실 세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링이라고 한다. ..
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있다. 예를 들어 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일이라는 7개의 값만을 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 4개의 값만을 가진다. 이와 같이 한정된 값만을 갖는 타입을 열거 타입(enumeration type)이라 한다. 열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입이다. 다음은 요일이라는 7개의 값을 갖는 데이터의 열거 타입 week를 선언한 것이다. 열거 타입 선언 열거 타입을 선언하기 위해서는 먼저 열거 타입의 이름을 정하고 해당 이름으로 소스 파일(.java)을 생성해야 한다. 열거 타입 이..