본문 바로가기

프로그래밍

자바 싱글톤과 상수 싱글톤 가끔 전체 프로그램에서 단 하나의 객체만 만들도록 보장해햐 하는 경우는 있습니다. 단 하나만 생성된다고 해서 이 객체를 싱글톤(Singleton)이라고 합니다. 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야합니다. 생성자를 호출한 만큼 객체가 생성되기 때문입니다. 생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 됩니다. 접근제한자는 다음번에 포스팅하니까 자세히 사펴보시고 지금은 단순히 private 접근 제한자를 붙인다는 것만 알아주십시요. private은 말그대로 사적인 거라 다른 곳에서는 접근이 안되고 자기 자신에서만 접근이 됩니다. 그러므로 밖에서는 생성자에 접근이 안되므로 밖에서 new 를 사용할 수 없습니다.. 더보기
자바 인스턴스 멤버와 정적 멤버 클래스에 선언된 필드와 메소드가 모두 객체 내부에 포함되는 것은 아닙니다. 일부는 포함이 되지 않고 클래스에 그대로 남아있는 것도 있습니다. 클래스는 객체의 설계도입니다. 클래스 멤버필드, 메소드는 당연히 객체에도 포함되어야합니다. 그러므로 객체가 여러 개일 경우 클래스 멤버필드와 메소드는 객체의 개수만큼 존재해야 합니다. 하지만 객체의 필드값이 모두 같다면 이 필드를 모든 객체가 가질 필요가 있을까요? 자바는 이런 경우를 위해 클래스 멤버를 인스턴스 멤버와 정적 멤버로 구분해서 선언할 수 있도록 하고 있습니다. 인스턴스 멤버와 this 인스턴스(instance) 멤버란 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드를 말하는데, 이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부릅니다. 우리.. 더보기
자바의 메소드 메소드는 객체의 동작에 해당하는 중괄호 {} 블럭을 말합니다. 중괄호 블럭 이름이 메소드 이름이며, 메소드를 호출하면 중괄호 블럭에 있는 모든 코드들이 일괄적으로 실행됩니다. 메소드는 자바에서 어떤 동작을 할 수 있도록 하는 부분이기때문에 알고리즘을 적용할 수 있는 부분이고 실제적으로 코딩이 이루어지는 부분이라 할 수 있어서 굉장히 중요합니다. 메소드 선언 메소드 선언은 선언부(리턴 타입, 메소드 이름, 매개 변선 선언)와 실행 블럭으로 구성됩니다. 리턴 타입 리턴 타입은 리턴값의 타입을 말합니다. 리턴값이란 메소드를 실행한 후의 결과값을 말합니다. 메소드는 리턴값이 있을 수도 있고 없을 수도 있습니다. 하지만 리턴 타입은 선언부에 명시되어야 합니다. 리턴값이 있으면 그 리턴값의 타입을 선언부에 명시하고.. 더보기
자바의 필드와 생성자 필드는 객체의 속성을 저장하는 변수입니다. 필드는 클래스 내부에 존재하며 클래스의 라이프 싸이클을 같이 합니다. 필드는 클래스에서 굉장히 중요한 부분이고 클래스를 이해하는데 필수적인 부분이기 때문에 지금부터 설명하는 부분에 대해 잘 이해를 해야합니다. 이전 포스팅에서 클래스에 대해 배워봤지만 예제없이 단순히 개념에 대한 설명이었기 때문에 이해하기 힘들었지만 클래스의 가장 중요한 필드, 생성자와 메소드를 이해함으로써 클래스에 대해 쉽게 이해할 수 있을 것입니다. 필드 선언 필드 선언은 클래스 중괄호 {} 항목 어디서든 존재할 수 있습니다. 생성자 선언과 메소드 선언의 앞과 뒤 어떤 곳에서도 필드 선언이 가능합니다. 하지만 생성자와 메소드 중괄호 {} 블록 내부에는 선언 될 수 없습니다. 생성자와 메소드 중.. 더보기
자바 클래스 자바프로그램에서 가장 중요한 개념인 클래스에 대해 알아보도록 하겠습니다. 현실 세계에서 어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 제품을 완성하듯이 소프트웨어를 개발할 때에도 부품에 해당하는 객체를 먼저 만듭니다. 그리고 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체지향 프로그래밍(Object-Oriented Programming)이라고 합니다. 객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말합니다. 예를 들어 물리적으로 존재하는 자동차, 자전거, 책, 사람과 추상적인 학과, 강의, 주문 등이 모두 객체가 될 수 있습니다. 객체는 속성과 동작으로 구성되어있습니다. 예를 들어 사람.. 더보기
자바의 열거타입 열거타입은 한정된 값인 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는 타입입니다. 다음은 월, 화, 수, 목, 금, 토, 일이라는 7개의 값을 잦는 요일 데이터의 열거 타입 week을 선언한 것입니다. public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY} 여기서 Week는 열거 타입입니다. Week는 MONDAY부터 SUNDAY 열거상수를 저장할 수 있는 열거 타입입니다. 열거 타입은 기본타입이 아닌 참조 타입입니다. 그래서 첫문자를 대문자로 사용한 것입니다. 열거 타입 선언 열거 타입을 선언하기 위해서는 먼저 열거 타입의 이름을 정하고 해당 이름으로 소스파일(.java)를 생.. 더보기
자바의 배열과 향상된 for문 저번 포스팅에서 기본 타입에 대한 배열을 살펴봤습니다. 이번에는 참조 타입에 대한 배열에 대해 살펴보겠습니다. 객체를 참조하는 배열 기본 타입(byte, char, short, int, long, float, double, boolean) 배열은 각 항목에 직접 값을 갖고 있지만, 참조 타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 가지고 있습니다. 이것은 참조 타입이 주소를 가지고 있던 것과 마찬가지입니다. 예를 들어 String은 클래스이므로 String[] 배열은 각 항목에 문자열이 아니라, String 객체의 번지를 가지고 있습니다. 예를들어 살펴보도록 하겠습니다. String[] strArray = new String[3];strArray[0] = "Java";strArray[1] .. 더보기
자바의 배열 자바의 변수는 1개의 데이터만 저장할 수 있습니다. 그렇기 때문에 저장해야 할 데이터의 수가 많아지면 그만큼 많은 변수가 필요하고 코드도 매우 길어집니다. 그래서 자바에는 많은 양의 데이터를 처리할 수 있는 배열이 존재합니다.학생 30명의 성적을 저장하고, 평균값을 구한다고 가정하고 기존의 방법으로 변수를 사용해서 프로그램을 한다면 다음과 같이 작성을 해야됩니다. int score1 = 80;int score2 = 90;int score3 = 85;int score4 = 70;...int score30 = 77; int sum = 0;sum += score1;sum += score2;sum += score3;...sum += score30;double avg = sum / 30.0; 위와같이 굉장히 비효.. 더보기