배열(Array)배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 자료구조를 의미한다.배열의 특징- 배열을 다루기 위해서는 참조변수를 선언해줘야 하고, 한 번 생성한 배열은 실행하는 동안 그 길이를 바꿀 수 없다.- 배열의 길이는 int 또는 short 값으로 지정해야 하며 long으로 지정할 수 없다.- 배열의 저장공간을 알려주는 인덱스는 0부터 시작한다.- 배열의 길이는 바꿀 수 없기 때문에 int형 상수가 된다.여기서 배열의 길이가 고정되는 이유는 배열은 값들을 연속적인 메모리 위치에 저장하기 때문이다.메모리에서 개발자가 설정한 배열의 길이만큼 메모리를 차지하게 되는데 길이를 늘리게 된다면 개발자가 설정한 배열 뒤에 늘릴 수 있는 길이만큼의 메모리 공간이 있다고 확신할 수 없게 된다. 따라서 ..
문자(Charactar)char ch = 'A'; // 하나의 문자를 저장하는 것은 가능하다.// char ch1 = 'AB'; // 문자 타입은 한 개 이상의 문자를 저장하는 것을 허용하지 않는다.// char ch2 = ''; // 문자 타입은 빈 값은 저장할 수 없다.문자 타입은 하나의 문자를 저장한다.빈 문자를 저장할 수 없다.하나의 문자 값은 아스키코드값을 이용하면 숫자로 변환할 수 있다.// TODO: 1. 문자와 숫자간의 변환// 문자를 숫자로int num = '3' - '0';// 숫자를 문자로char ch = 3 + '0';문자 '3' 과 '0'을 - 연산자를 통해서 계산한 결과 숫자 3이 나오듯이 문자 타입은 아스키코드를 통한 연산이 가능..
제어문프로그래밍 언어가 특정 조건에 기반하여 프로그램의 실행 흐름을 제어하기 위해 제어문을 사용한다. 이러한 조건문을 통해 프로그램의 상태 변경에 따라 실행 흐름을 진행하고 분기시키는 데 사용된다.제어문의 종류로는 총 3가지가 있다.조건문: 특정 조건의 참/거짓 여부에 따라 코드 실행 경로를 결정한다. (if문, else문, switch문) 반복문: 특정 조건이 충족될 때까지 코드 블록을 반복적으로 실행한다. (for문, while문, do-while문) 점프문: 실행 흐름을 다른 부분으로 이동시킨다. (break문, continue문, return문)프로그래밍에서 로직을 제어하고 원하는 결과를 얻기 위해 제어문을 사용하는 것이 중요하다.조건문(Condition)주어지는 조건식을 만족하면 블럭({}) ..
연산자(Operator)연산자는 모든 프로그래밍 언어의 기본 구성 요소이다.연산을 하는 데 있어 연산을 수행하는 기호인 연산자와 연산 수행의 대상이 되는 피연산자로 나눠지고 모든 연산자는 연산 결과를 반환하게 된다.Java에서는 기본적으로 산술 연산자부터 인스턴스 연산자까지 여러 가지 종류의 연산자를 제공하고 있다. 산술 연산자연산자결과+두 개의 숫자를 더한다.-두 개의 숫자를 뺀다.*두 개의 숫자를 곱한다./두 개의 숫자를 나누고 몫을 반환한다.%두 개의 숫자를 나누고 나머지를 반환한다.int a = 5;int b = 3;// TODO: 산술 연산자System.out.println(a + b); // 8System.out.println(a - b); // 2System.out.prin..
변수(Variable)변수란 하나의 값을 저장할 수 있는 메모리 공간을 뜻한다.변수의 타입에 따라서 값을 저장할 수 있는 메모리 공간의 범위가 달라진다. 변수의 선언"변수타입 변수이름;"으로 선언을 해준다. 변수의 초기화변수에 처음으로 값을 저장하는 것으로 "변수이름 = 값; "으로 초기화를 진행한다.반드시 초기화를 할 필요는 없지만 만약 변수가 지역 변수라면 읽기 전에 꼭 초기화를 해야 한다.해당 코드와 같이 같은 타입이라면 여러 개의 값을 동시에 초기화할 수 있다.변수의 값을 읽어오기 위해서는 해당 값이 필요한 곳에서 변수의 이름을 적어준다. 변수의 타입변수의 타입으로는 기본형과 참조형으로 나눠진다.기본형 타입을 제외한 나머지 모든 타입은 다 참조형 타입이다. (값이 아닌 메모리 주소를 저장함)..
추상화(Abstraction) 컴퓨터 프로그래밍에서의 추상화란 복잡한 소프트웨어 시스템을 효율적으로 설계하고 구현할 수 있는 방법을 의미한다. 추상 클래스 추상 클래스는 미완성 메서드를 갖고 있는 클래스를 의미한다. 추상 메서드를 가지고 있으면 해당 클래스는 추상 클래스가 된다. 상속을 통해 추상 메서드를 완성해야 인스턴스를 생성할 수 있다. 인스턴스를 생성한다는 것은 해당 인스턴스가 가지고 있는 기능을 사용한다는 것인데 추상 메서드는 미완성 메서드이기 때문에 해당 기능을 구현하지 않으면 사용할 수 없다. 따라서 상속을 통해서 추상 메서드를 구현하고 인스턴스를 생성해야된다. 추상 클래스의 작성 여러 클래스에 공통적으로 사용될 수 있는 추상 클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상 ..
인터페이스(Interface) 인터페이스는 실행활에서나 아니면 프로그래밍을 접하다 보면 자주 듣는 용어이다. 일반적인 사람은 기계의 작동 원리나 방식을 알지 못하면 사용을 못한다. 예를 들면 우리가 자판기를 사용한다고 했을 때 우리가 흔히 생각하는 자판기 외부가 없고 내부 기계만 있다면 어떻게 사용하는지 모를 것이다. 하지만 우리는 자판기를 사용할 때 자판기 외부에 있는 버튼을 누르고, 결제하고, 해당 상품을 받는다. 자판기 외부를 사용하면서 우리는 내부가 어떻게 동작하는지 고민하거나 신경쓸 필요가 없어진다. 자판기 외부를 인터페이스라고 이해하면 쉽다. 이제 인터페이스를 프로그래밍적으로 이해해보면 인터페이스는 추상 메서드의 집합이다. 구현된 것이 전혀 없으므로 모든 멤버가 public이다. (구현을 해야..
다형성(Polymorphism) 다형성은 여러 가지 형태를 가질 수 있는 능력을 의미한다. 객체 지향에서 다형성은 부모 타입의 참조 변수로 자식 타입 객체를 다루는 것을 뜻한다. 다형성을 활용하면 멤버를 사용할 수 있는 범위가 달라진다. 단, 자식 타입의 참조 변수로 부모 타입의 객체를 가리킬 수 없고 또 다른 자식 타입의 객체를 가리킬 수 없다. 자식 타입의 참조 변수로 부모 타입의 객체를 가리킬 수 없는 이유는 있는 기능을 안 쓰는 것은 괜찮지만, 없는 기능을 쓰려고 하면 문제가 생긴다. 예시와 같이 부모 타입인 Car는 색깔과 문, 운전 기능이 있고 자식 타입인 Suv는 바퀴를 추가하는 기능과 라디오 기능이 있다. 부모 타입인 Car가 자식 타입인 Suv를 참조하면 자식 객체만 가지고 있는 기능을 ..
제어자 제어자는 클래스와 클래스의 멤버에 부가적인 의미를 부여한다. 제어자는 2가지러 분류할 수 있는다. 1. 접근 제어자 2. 그 외 제어자 접근 제어자 접근 제어자는 4가지 종류가 있다. private: 같은 클래스 내에서 접근 가능 default: 같은 패키지 내에서 접근이 가능 protected: 같은 패키지 내에서, 다른 패키지의 자식 클래스에서 접근이 가능 public: 접근 제한이 없음(모든 영역에서 접근이 가능) 접근 제어자는 4개 중 한 개만 붙일 수 있다. 접근 제어자를 사용하는 이유 접근 제어자를 사용하는 이유는 데이터 캡슐화를 위해서 사용한다. 만약 외부에서 데이터 접근이 가능하면 각 사람들의 개인 정보는 모든 사람이 알 수 있게 될 것이다. 따라서 외부로부터 멤버 변수의 직접 접근..
참조변수 super 객체 자신을 가리키는 참조 변수로 부모의 멤버를 자신의 멤버와 구별할 때 사용한다. 인스턴스 메서드(생성자) 내에서만 존재한다. 자손 클래스에 인스턴스 변수가 없을 경우 참조 변수 this와 참조변수 super는 같은 값이 나오게 된다. 그 이유는 상속 받으면 부모의 멤버를 물려 받기 때문에 자식 클래스는 부모가 가지고 있는 변수를 상속을 통해서 소유하게 되고 그것을 참조 변수 this가 가리키게 된다. 조상의 생성자 super() super()는 부모의 생성자를 호출할 때 사용한다. 자식 클래스가 부모 클래스를 상속 받으면 생성자, 초기화 블록은 상속되지 않기 때문에 super()를 사용한다. 생성자 super()를 사용하려면 반드시 생성자의 첫 줄에서 호출해야 한다. 만약 위의 사..
상속(Inheritance) 객체 지향 프로그래밍의 핵심 원리 중 하나인 상속(Inheritance)은 기존의 클래스와 다른 클래스 사이에 부모 / 자식 관계를 맺어주어 새로운 클래스를 작성하는 것으로 코드의 재사용성을 높일 수 있다. extends 키워드를 사용하는데 이는 상속 받은 멤버를 통해 새로운 클래스를 작성하여 점점 확장되는 것을 뜻한다. 상속의 특성 - 자식 클래스는 부모 클래스의 모든 멤버를 상속 받는다. (생성자, 초기화 블록 제외) - 자식의 변경은 부모에 영향을 미치지 않는다. 위의 자식 클래스에서 자식이 보유한 계좌에 현재 자신의 돈과 부모의 돈을 합쳐 계좌에 저축했지만 부모의 계좌는 변하지 않는다. - 부모의 멤버가 변경되면 자식까지 영향을 미친다. 부모 클래스에서 부모의 돈을 변..
생성자(Constructor) 생성자는 인스턴스를 초기화 해주는 메서드를 의미한다. 컴파일러가 자동적으로 생성해주는 기본 생성자, 사용자가 직접 생성하는 매개변수가 있는 생성자로 구분한다. 위의 코드처럼 생성자는 인스턴스 변수를 초기화 해주는데 직접 객체를 생성하고 변수를 하나씩 초기화 해주는 것이 아닌 생성자를 통해서 변수를 초기화하여 코드의 양을 줄일 수 있게 해준다. 그럼 생성자를 만들기 위해서는 어떤 조건이 있을까 생성자의 조건 1. 생성자 이름은 클래스와 이름이 같아야 한다. 2. 반환값이 존재하지 않는다. 3. 모든 클래스는 반드시 생성자를 가져야 한다. 먼저 생성자의 이름은 클래스 이름과 같아야 한다. 코드와 같이 Car 라는 클래스에서 만들어진 생성자는 Car 이름을 가지고 있다. Car ..
오버로딩(Overloading) 오버로딩은 한 클래스 안에 같은 이름의 메서드 여러 개를 정의한 것을 의미한다. 당장 자바에서 많이 사용하는 println 메서드를 확인해보면 이름은 같은 메서드지만 다른 데이터 타입을 받는 것을 알 수 있다. 우리가 파스타를 만든다고 상상을 해보자. 먼저 우리가 파스타를 만들어도 어떤 재료가 들어가는지에 따라서 파스타의 종류가 바뀐다. 위의 코드를 보면 똑같은 makePasta 메서드를 사용하여 파스타를 만들지만, 들어가는 재료에 따라서 다른 파스타를 반환해준다. 메서드를 오버로딩하면 이름이 같은 새로운 메서드를 만들 수 있다. 그렇다면 오버로딩을 활용할 때 고려해야 되는 조건은 뭐가 있을까? 오버로딩의 조건 3가지 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수..
변수(Variable) 변수는 크게 클래스 영역과 메서드 영역으로 나뉘어 3가지로 분류할 수 있다. iv(Instance variable, 인스턴스 변수 - 클래스 영역) 인스턴스가 생성되었을 때 만들어지는 변수로 개별적으로 값을 유지해야 하는 값을 저장한다. ※ 인스턴스를 넓은 범위에서 객체라 부르기 때문에 서로 같은 의미라고 생각하면 된다. cv(Class variable, 클래스 변수 - 클래스 영역) - 클래스가 메모리에 올라갈 때 생성되며 공통적으로 값을 유지해야 하는 값을 저장한다. - 변수에 static을 붙여야 클래스 변수가 된다. - 클래스 변수는 객체가 생성될 때 다른 공간에 하나만 생성된다. ※ 객체를 생성해서 사용할 때 클래스 변수는 해당 클래스 명을 명시해줘야 한다. 하지 않아도 ..
클래스(Class) 우리가 어떤 가전 제품을 만들 때 해당 제품의 설계도가 있어야 만들 수 있다. 클래스는 제품(객체)를 만드는데 사용되는 설계도로 어떤 제품인지 정의하고 생성하는데 사용된다. 클래스의 3가지 관점 클래스는 다음의 3가지 관점으로 볼 수 있다. 1. 설계도 앞서 언급한 내용처럼 어떠한 제품(객체)를 만드는데 필요한 설계도로 볼 수 있다. 2. 데이터 + 함수 클래스는 여러 가지 데이터 타입들과 함수를 묶을 수 있다. Class Time { int hour; int minute; int second; } 3. 사용자 정의타입 클래스는 원하는 타입을 직접 만들 수 있다. 객체(Object) 객체는 설계도(클래스)를 바탕으로 만들어진 제품(객체)을 의미한다. 설계도(클래스)를 바탕으로 에어컨(..