목록분류 전체보기 (213)
각진 세상에 둥근 춤을 추자
배열을 통해 100명의 학생을 위한 프로그램을 개발했다고 가정한다. 학생 수가 어느 순간 100명이 넘었다. 배열을 사용하는 중에는 배열의 길이를 변경 할 수 없기 때문에 다시 코드를 수정해야 하는 일이 생긴다. 객체 배열 클래스 ArrayList를 통해 객체 배열을 좀 더 쉽게 사용할 수 있다. 메서드 설명 boolean add(자료형 e) 요소 하나를 배열에 추가한다. int size( ) 배열에 추가된 요소 전체 개수를 반환한다. 자료형 get(int index) 배열의 index 위치에 있는 요소 값을 반환한다. 자료형 remove(int index) 배열의 Index 위치에 있는 요소 값을 제거하고 그 값을 반환한다. boolean isEmpty( ) 배열이 비어 있는지 확인한다. ArrayLi..
행 하나로만 이루어진 배열은 '1차원 배열'이다. 프로그램에서는 바둑이나 체스 게임, 네비게이션 지도 등을 구현하는 등 평면을 구하기 위해 2차원 배열을 사용하거나, 공간 개념을 구현하기 위해 3차원 배열을 사용하기도 한다. (1) 2차원 배열 다음은 2행 3열의 2차원 배열을 선언하는 코드와 논리 구조이다. arr [0][0] arr [0][1] arr [0][2] arr [1][0] arr [1][1] arr [1][2] 2차원 배열을 초기화하려면 다음과 같이 행과 열 개수에 맞추어 {중괄호} 안에 콤아(,)로 구분해 값을 적는다. 이 내용을 코드로 구현해 본다. package ch7_2; public class TwoDimension { public static void main(String[] a..
향상된 for문 (enhanced for loop)은 배열의 처음에서 끝까지 모든 요소를 참조할 때 사용하면 편리한 반복문이다. 향상된 for문은 배열 요소 값을 순서대로 하나씩 가져 와서 변수에 대입한다. 기존의 for문과 달리 따로 초기화와 종료 조건이 없기 때문에 모든 배열의 시작 요소부터 끝 요소까지 실행한다. for (변수 : 배열){ 반복 실행문; } package ch07_1; public class EnhancedForLoop { public static void main(String[] args) { String [] strArray = {"Hello", "This", "is", "Java"}; for (String lang : strArray) { System.out.println(la..
배열을 복사하는 방법은 두 가지가 있다. 1. 기존 배열과 배열 길이가 같거나 더 긴 배열을 만들고 for문을 사용하여 각 요소 값을 반복하여 복사하기 2. System.arraycopy( ) 메소드 사용하기 System.arraycopy (src, srcPos, dest, destPos, length) 매개변수 설명 src 복사할 때 배열 이름 srcPos 복사할 배열의 첫 번째 위치 dest 복사해서 붙여 넣을 대상 배열 이름 destPos 복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 위치 length src에서 dest로 자료를 복사할 요소 개수 System.arraycopy() 메소드를 사용해 배열을 복사해 본다. package ch07_1; public class ArrayCopy { pu..
동일한 기본 자료형 (int, double ...) 변수 여러 개를 배열로 사용할 수 있듯이 참조 자료형 변수도 여러 개로 배열을 사용할 수 있다. Book 클래스를 만든 후 이 클래스로 객체 배열을 만들어 본다. Book 클래스는 책 이름과 저자를 멤버 변수로 가지는 클래스이다. 자료형을 private로 생성했지만 다른 코드에서 이 클래스를 사용할 때 멤버 변수 값을 가져오거나 지정할 수 있도록 get(), set() 메소드를 구현한다. 마지막으로 책의 정보를 출력해 주는 show() 메소드도 구현한다. package ch07_1; public class Book { private String bookName; private String author; // 디폴드 생성자 public Book() {};..
프로그래밍을 하다 보면 변수를 각각 선언하는 것보다 여러 자료를 한 번에 처리할 수 있는 기능이 필요하다. 배열이란? 배열(array)은 여러 개의 변수를 하나로 묶어 넣은 것이다. 배열을 사용하면 같은 종류의 대량의 데이터를 한 번에 선언할 수 있다. (1) 배열 선언하기 자료형 [] 변수이름 = new 자료형[개수]; 자료형 변수이름 [] = new 자료형[개수]; (2) 배열 초기화하기 int [] studentIDs = new int [] {101,102,103}; int [] studentIDs = {101,102,103}; // new int [] 생략 가능 (3) 배열 사용하기 선언한 배열의 각 요소에 값을 넣을 때나 배열 요소에 있는 값을 가져올 때는 []을 사용한다. 배열의 첫 번째 요소..
객체 지향 프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴을 싱글톤 패턴 (Singleton pattern)이라고 한다. 싱글톤 패턴은 static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식이다. 싱글톤 패턴으로 회사 클래스를 구현해 본다. 1. 생성자를 private로 만들기 접근 제어자를 private로 지정한다. package ch06_5; public class Company { private Company() {} } 2단계: 클래스 내부에 static으로 유일한 인스턴스 생성하기 1단계를 통해 외부에서 인스턴스를 생성할 수 없도록 하였다. 프로그램에서 사용할 유일한 인스턴스를 생성한다. 또한 private로 선언하여 외부에서 인스턴스에 접근하지 못하도록 제한한..
변수는 크게 3가지로 나눌 수 있다. 1. 지역 변수 (로컬 변수, local variable): 함수나 메서드 안에서만 사용할 수 있다. 2. 멤버 변수 (인스턴스 변수, instance variable): 클래스 안에서 사용한다. 3. static 변수 (클래스 변수, class variable): 여러 인스턴스에서 공통으로 사용할 수 있다. 이러한 변수는 어디에, 어떻게 선언되느냐에 따라 유효 범위 (scope)가 달라진다. 1. 지역 변수의 유효 범위 지역 변수는 함수나 메서드 내부에 선언하기 때문에 함수 밖에서는 사용할 수 없다. 즉, 하나의 함수에 선언한 지역 변수는 다른 함수에서 사용할 수 없다. 지역 변수가 생성되는 메모리를 스택 (stack)이라고 하는데, 스택에 생성되는 지역 변수는 함..
static 변수란 정적 변수를 말한다. static 변수는 클래스 내부에 선언하지만, 다른 멤버 변수처럼 인스턴스가 생성될 때마다 새로 생성하지 않는다. static 변수는 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리 공간이 할당되며, 그 값은 모든 인스턴스가 공유한다. 학생이 새로 생성되면 학번을 차례로 부여하는 프로그램을 생성해 본다. 여기서 static 변수의 이름은 serialNum이다. serialNum은 학생이 생성될 때마다 순서대로 증가한다. 이 증가한 값을 각 학생의 학번에 대입해 학생에게 새로운 학번을 부여한다. 1. 학생 클래스 생성하기 package ch06_3; public class Student { // static 변수는 인스턴스 생성과 상관 없이 먼저 생성된다..
객체 지향 프로그램은 객체를 정의하고 객체 간 협력으로 만들어 진다. 학생이 버스나 지하철을 타고 학교에 가는 것을 객체 지향으로 프로그래밍 해 본다. 1. 학생 클래스 구현하기 멤버 변수(속성): '이름', '학년', '가진 돈' 멤버 함수(메서드): '버스를 탄다', '지하철을 탄다', '학생의 현재 정보를 보여 준다' package ch06_2; // P175 - 학생 클래스 생성하기 public class Student { public String studentName;//학생 이름 public int grade;//학년 public int money;//학생이 가지고 있는 돈 // 학생 이름과 가진 돈을 매개변수로 받는 생성자 public Student(String studentName, int..