분류 전체보기 1097

배열 응용 프로그램 { Student 클래스 구현하기, 테스트 클래스 구현 }

ArrayList 를 쓰면 좋은 상황? 지금까지 배운 ArrayList 를 사용해 학생 성적 출력 프로그램을 구현해 보겠습니다. 이 프로그램은 Student 클래스와 Subject 클래스를 사용합니다. 만약 어떤 학생이 10과목을 수강한다면 Subject 클래스형을 자료형으로 선언한 변수가 10개 필요할 것입니다. 또 어떤 학생은 3 과목을 수강할 수도 있고, 어떤 학생은 5과목을 수강할 수도 있습니다. 따라서 이러한 경우에는 배열을 사용하여 프로그램을 구현하는 것이 좋습니다. Student 클래스 구현하기 2 명의 학생을 만들고 두 학생의 과목 성적과 총점을 각각 출력해 봅시다. package arraylist; import java.util.ArrayList; public class Student {..

ArrayList 클래스 사용하기 { 기존 배열의 단점 & ArrayList, ArrayList 클래스의 주요 메서드, ArrayList 클래스 활용 }

기존 배열의 단점과 ArrayList 우리가 앞에서 배운 기본 배열은 프로그램에서 사용하려면 항상 배열 길이를 정하고 시작합니다. 이런 경우를 한번 생각해 보겠습니다. 처음에 100명의 학생을 위한 프로그램을 개발했는데, 어느 순간 학생 수가 100명이 넘었습니다. 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문에 코드를 수정해야 합니다. 혹은 중간에 학생 한 명이 전학을 갔습니다. 배열은 중간에 있는 요소를 비워 둘 수 없으므로 배열 요소 위치를 변경해야 합니다. 이 두 경우 모두 배열을 하나하나 수정하려면 힘들고 복잡합니다. 그래서 자바는 객체 배열을 좀 더 쉽게 사용할 수 있도록 객체 배열 클래스 ArrayList를 제공합니다. ArrayList 클래스는 객체 배열을 관리할 수 있는 멤버 ..

다차원 배열 { 다차원 배열이란, 이차원 배열 }

다차원 배열이란? 지금까지 배운 배열은 모두 행 하나로 이루어진 '일차원 배열'입니다. 수학에서 2차원을 표현하기 위해 x, y 좌표를 쓰는 것처럼 프로그램에서도 평면을 구현하기 위해 이차원 배열을 사용할 수 있습니다. 예를 들어, 네비게이션 지도, 체스, 바둑 등을 구현할 때 이차원 배열을 활용합니다. 삼차원 이상의 배열도 가능합니다. 삼차원 배열은 주로 공간을 나타내는 프로그램에서 활용합니다. 이렇게 이차원 이상으로 구현한 배열을 '다차원 배열'이라고 합니다. 이차원 배열 2행 3열의 이차원 배열을 선언해보겠습니다. package array; public class TwoDimension { public static void main(String[] args) { int[][] arr = {{1, 2..

배열이란? { 배열의 필요성, 배열이란, 배열 선언과 초기화, 배열 사용하기, 문장 저장 배열 만들기, 객체 배열 사용하기, 배열 복사하기, 향상된 for문과 배열}

배열의 필요성 이제까지 사용한 변수는 자료 한 개를 저장하기 위한 공간이었습니다. 그런데, 프로그래밍을 하다 보면 자료형이 같은 자료를 여러 개 처리해서 구현해야 하는 일이 종종 생깁니다. 이런 경우에는 변수를 각각 선언하는 것보다 여러 자료를 한 번에 처리할 수 있는 기능이 필요합니다. 이 장에서는 자료형이 같은 여러 자료를 효율적으로 다룰 수 있는 배열에 대해 알아보겠습니다. 배열이란? (자료를 순차적으로 관리하는 구조, 배열) 학교에 학새잉 100명 있습니다. 이 학생들 100명의 학번을 어떻게 관리할 수 있을까요? int studentID1, studentID2 .... 이런식으로 여러 개의 변수들을 일일이 쓰는 것은 너무 귀찮고 번거롭습니다. 이때 사용하는 자료형이 배열(array)입니다. 배열..

간단한 카페 프로그램 개발해보기(객체 간 협업, 참조변수 활용) {개발의 이유, 질문}

개발의 이유 문제 Question : 김씨가 4,000원을 내고 별다방에서 아메리카노를 사 마셨다. 이씨는 4,500원을 내고 콩다방에서 라테를 사 마셨습니다. 위의 문제를 처음에는 Customer 과 Cafe 클래스로 구성하여 문제를 해결했다. 그렇게 하니 다음과 같은 문제들이 보였다. 1. 메뉴별 판매 통계를 잡을 수 없었다. 2. Customer 클래스에 Customer 와 관련이 없는 변수와 메서드들이 생겨났다. 3. Customer 클래스에 buyAmericano, buyLatte 와 같이 메뉴가 추가될 때마다 메서드를 각자 따로 만들어주어야 했다. 4. 새로운 메뉴가 생길 때마다, 새로운 카페가 생길 때마다 변수들이 생겨났고 코드가 번잡해졌다. 아래 코드가 개발한 코드인데, 질문 2개가 있어서..

static 응용 - 싱글톤 패턴 {디자인 패턴이란, 싱글톤 패턴이란, 싱글톤 패턴으로 회사 클래스 구현하기, 연습하기}

디자인 패턴이란? 객체 지향 프로그램을 어떻게 구현해야 좀 더 유연하고 재활용성이 높은 프로그램을 만들 수 있는지를 정리한 내용이 디자인 패턴 design pattern 입니다. 간단히 말해서 프로그램 특성에 따른 설계 유형을 이론화한 내용이며, 특정 알고리즘이나 프로그래밍 언어를 위한 라이브러리가 아니라 객체 지향으로 설계하는 방법을 설명한 것입니다. 그렇기 때문에 디자인 패턴은 자바, C++, C# 과 같은 다른 객체 지향 언어에도 적용하여 구현할 수 있습니다. 디자인 패턴 이론만으로도 책 한 권을 만들 수 있을 정도로 내용이 방대합니다. 싱글톤 패턴이란? 프로그램을 구현하다 보면 여러 개의 인스턴스가 필요한 경우도 있고 단 하나의 인스턴스만 필요한 경우도 있습니다. 객체 지향 프로그램에서 인스턴스를..

GIT3 branch & conflict - 3 way merge(충돌의 이해) {충돌을 이해해야 하는 이유, 충돌 이해하기

충돌을 이해해야 하는 이유 Merge 를 잘 하기 위해서는 충돌이 발생하는 좀 더 근본적인 원리에 대해 이해해야 합니다. 이번 시간에는 git 이 충돌을 인지하는 방식에 대해서 알아보고자 합니다. 이런 이유로 3 way merge 에 대해서 공부할 것입니다. 충돌 이해하기 ABCD 4개의 파일이 있다고 생각해봅시다. 그런데, 버전관리를 시작하면서 branch 를 만들었다고 생각해봅시다. here 와 there 라고 생각해보죠. here 브랜치에서는 2, 4 번째 칸을 수정했고, there 브랜치에서는 3,4 번째 칸을 수정했습니다. 이런 상황에서 어느 부분은 자동 병합되고 어느 부분은 우리가 개입해야 할까요? 양쪽이 서로 다른 3개의 경우에서 충돌이 발생하게 됩니다. 1 번째 칸은 양쪽이 같으니, 문제가..

변수 유효 범위 {변수 유효 범위란, 변수 유형을 나눈 이유}

변수 유효 범위란? 지금까지 3 가지 종류의 변수를 배웠습니다. 첫 번째, 함수나 메서드 안에서만 사용할 수 있는 지역 변수(로컬 변수 local variable) 두 번째, 클래스 안에서 사용하는 멤버 변수(인스턴스 변수 instance variable) 세 번째, 여러 인스턴스에서 공통으로 사용할 수 있는 static 변수(클래스 변수 class variable) 변수는 어디에 어떻게 선언되느냐에 따라 유효 범위(scope)가 달라집니다. 지역 변수의 유효 범위 지역 변수는 함수나 메서드 내부에 선언하기 때문에 함수 밖에서는 사용할 수 없습니다. 즉, 하나의 함수에 선언한 지역 변수는 다른 함수에서 사용할 수 없습니다. 그 이유는 스택 메모리와 관련이 있습니다. 일반 메서드와 함수는 호출될 때 스택에..

static 변수 {static 변수가 필요한 상황은, static 변수란, static 변수 사용방법 예제, 클래스 변수, 클레스 메서드와 인스턴스 변수, 연습하기}

static 변수가 필요한 상황은? 이전에 만들었던 학생 클래스를 다시 보겠습니다. public class Student { public int studentID; public String studentName; public int grade; public String address; } 해당 클래스를 통해 생성되는 학생 인스턴스들은 학생마다 고유한 학번 studentID, 이름 studentName, 주소 address 를 가집니다. 그런데, 학생 인스턴스가 생성될 때마다 학번이 순차적으로 증가하면서 자동으로 부여되도록 하고 싶습니다. 어떻게 해야 할까요? 학생 마다 일일이 다른 학번을 부여할 수는 있지만, 학생의 수가 급격하게 증가하면 엄청 힘든 일이 될 겁니다. 이 경우에 각 인스턴스마다 따로 생성..

객체 간 협력 {학습목표, 학생 클래스 구현하기, 버스 클래스 구현하기, 지하철 클래스 구현하기, 학생&버스&지하철 객체 협력하기, 객체지향 프로그래밍 정리해보기, 객체지향 프로그래밍 연..

학습 목표 객체 지향 프로그램은 객체를 정의하고 객체 간 협력으로 만든다고 공부했습니다. 실제로 객체의 협력이 어떻게 이루어지는지 살펴보겠습니다. 학생이 버스나 지하철을 타고 학교에 가는 것을 객체 지향으로 프로그래밍 해보겠습니다. 학생, 버스, 지하철 세 객체를 만들고 이들 사이에 어떻게 협력이 이루어지는지 살펴보겠습니다 학생 클래스 구현하기 학생 클래스는 '이름', '학년', '가진 돈'을 멤버 변수(속성)로 가집니다. '버스를 탄다', '지하철을 탄다', '학생의 현재 정보를 보여 준다'를 메서드(멤버 함수)로 가집니다. package cooperation; public class Student { public String studentName; public int grade; public int ..