1. 개발 진행 상황
2. 개발 중 발생한 이슈와 해결
3. 새로 배운 것
이클립스에서 자바 프로그램 작성하는 순서
프로젝트 생성: 메뉴 File -> New -> Java Project
클래스 생성: 프로젝트 이름 위 우클릭 -> New -> Class
저장 및 컴파일: 소스파일 작성 후 저장(자동 컴파일 됨)
실행: 메뉴Run -> Run
빌드: 소스파일(*.java)로 부터 프로그램을 만들어내는 전 과정
workspace의 모든 프로젝트 빌드 : Project -> Build All
현재 프로젝트 빌드(변경된 소스 파일만 새로 컴파일): Project -> Build Project
이전 빌드 정보 모두 삭제(모든 소스파일 새로 컴파일): Project -> Clean
소스파일 변경 후 저장 시 자동 컴파일: Project -> Build Automatically
배열
선언: 타입[] 변수명; int[] score = new int[5]; // 정수형 배열, 배열명, 5크기로 생성
선언2: 타입 변수명[]; int score[];
생성: 변수명 = new 타입[길이
클래스의 정의
1. 설계도
클래스와 객체
클래스: 객체를 정의한 것으로 객체를 생성하는데 사용 ex. 제품설계도, TV설계도, 붕어빵 틀
객체: 실제로 존재하는 것(사물 또는 개념)으로 객체가 가지고 있는 기능과 속성에 따라 다름 ex. 제품, TV, 붕어빵
객체의 구성요소: 객체 = 속성(변수) + 기능(메서드)
모든 인스턴스를 대표하는 일반적 용어
인스턴스: 특정 클래스로부터 생성된 객체
클래스 | 설계도 |
객체 | TV |
속성(변수=데이터) | 크기, 길이, 높이, 색상, 볼륨, 채널 등 |
기능(메서드=함수=명령묶음) | 켜기, 끄기, 볼륨 높이고, 볼륨 낮추기, 채널 변경 |
class TV {
int width;
int height;
string color;
int volume;
int channel;
void power() {powe = !power;}
void channelUp() {channel++;}
void channelDown() {channel--;}
}
객체의 생성과 사용
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후 객체의 주소를 참조변수에 저장
Tv = t; // Tv타입(기본형x,참조형o)의 참조변수 t선언
t = new Tv(); // Tv인스턴스 생성 후 생성된 Tv인스턴스의 주소를 t에 저장
Tv t = new Tv(); //Tv형 변수명이 t인 참조변수 선언 및 클래스의 객체 생성, 위 두문장을 합쳐서 쓴 것
t.channel = 7; //Tv인스턴스의 멤버변수 channel의 값에 7을 저장함
t.channelDown(); // Tv인스턴스의 channelDown()메서드 호출
System.out.println("현재 채널은 + t.channel + "입니다.");
예제
Tv t1 = new Tv();
Tv t2 = new Tv();
t2 = t1;
t1.channel = 7;
System.out.println("t1의 채널은 + t1.channel + "입니다."); // t1의 채널은 7 입니다.
System.out.println("t2의 채널은 + t2.channel + "입니다."); // t2의 채널은 7 입니다.
//channel이라는 하나의 인스턴스를 여러개의 참조변수(t1, t2)가 가리키는 경우는 가능ㅇ
//여러 인스턴스를 하나의 참조변수가 가리키는 경우는 불가능(변수는 하나의 값만 저장함)
객체 배열
객체 배열 == 참조변수 배열
Tv tv1, tv2, tv3; -> Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열
객체 배열
Tv t1 = new Tv();
Tv t2 = new Tv();
Tv t3 = new Tv();
참조변수 배열
Tv[] tvArr = new Tv[3] //Tv형(데이터타입)의 참조변수 tvArr에 길이가 3인 배열 생성
tvArr[0] = new Tv(); // 객체는 각 인덱스별로 생성 필요
tvArr[1] = new Tv();
tvArr[2] = new Tv();
2. 데이터 + 함수
클래스 == 데이터 + 함수
변수: 하나의 데이터를 저장할 수 있는 공간
배열: 같은 종류의 여러 데이터(같은 타입)를 하나로 저장할 수 있는 공간
구조체: 서로 관련된 여러 데이터(각각 다른 타입 가능)를 하나로 저장할 수 있는 공간
클래스: 데이터와 함수의 결합(구조체 + 함수)
3. 사용자 정의 타입: 원하는 타입을 직접 만들 수 있음
사용자 정의 타입 Time클래스를 만들어서 간략해지는 코드 예시
class Time{ int hour; int minute; int second;}
int hour; int minute; int second; |
Time t = new TimeI(); // Time형 참조 변수 t에 Time객체 생성 |
int hour1, hour2, hour3; int minute1, minute2, minute3; int second1, second2, second3; //여러 시간을 다루려면 변수가 많아짐 |
Time t1 = new TimeI(); Time t2 = new TimeI(); Time t3 = new TimeI(); |
int[] hour = new int[3]; int[] minute = new int[3]; int[] second = new int[3]; //더 많은 시간을 다루기 위해 배열 사용: 시, 분, 초가 따로 묶여 있음 |
Time[] t = new Time[3] t[0] = new Time(); t[1] = new Time(); t[2] = new Time(); |
선언위치에 따른 변수의 종류
//클래스 영역 시작
{
int iv; //인스턴스 변수(instance valiable)
static int cv; //클래스 변수(static변수, 공유변수), cv=static+iv
//메서드 영역 시작
void method()
{
int lv = 0; //지역변수(local valiable)
}
{
1. 클래스 영역: 선언문(변수선언, 메서드 선언)만 가능
2. 메서드 영역: 메서드 선언(메서드 정의)
변수의 종류 | 선언 위치 | 생성 시기 |
클래스 변수 (cv: class variable) |
클래스 영역 | 클래스가 메모리에 올라갈 때 생성 아무때나 사용 가능 |
인스턴스 변수 (iv: instance variable) |
인스턴스(객체)가 생성되었을 때 생성 | |
지역변수 (lv: local variable) |
클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부 |
변수 선언문이 수행되었을 때 생성 메서드 종료 시 자동 종료 |
객체 = iv를 여러개 묶어 놓은 것
메서드: 작업단위로 문장들을 묶어 놓은 것
값(입력)을 받아서 처리하고 결과를 반환(출력)
int add(int x, int y) { // 반환타입(출력)int 메서드명 add 매개변수선언(입력) int x, int y
int result = x + y;
return result; //결과를 반환
}
메서드 장점: 중복 코드 제거, 관리 용이, 재사용 가능
메서드 작성: 반복적으로 수행되는 여러 문장을 메서드로 작성, 하나의 메서드는 한가지 기능만 수행하도록 작성
메서드 = 선언부 + 구현부
반환타입 메서드명(타입 변수명, 타입변수명, ...) // 선언부
{
//메서드 호출 시 수행 될 코드
} // 구현부
int add(int a, int b) //선언부
{
int result = a + b;
return result; //호출한 메서드로 결과를 반환
}
메서드의 호출
메서드명(값1, 값2, ...); // 메서드 호출 방법
print99danAll(); // void print99danAll()을 호출(void는 출력할게 없다는 뜻)
int result = add(3, 5); // int add(int x, int y)를 호출하고 결과를 result에 저장
하나의 소스파일에 여러개의 클래스
public class: 하나의 소스파일에 public class 하나만 존재함, 소스파일명과 클래스명이 같아야 함
public 클래스가 아닌 일반 class는 한개의 소스파일에 여러개 있을 수 있음(public class 없을 시 소스파일명은 n개 클래스 중 한개와 이름 같으면 됨)
메인메소드가 있는 클래스는 소스파일과 이름 같아야함
return할 게 없을 경우 void로
메서드의 실행흐름
MyMath mm = new MyMath(); // 인스턴스 생성
long value = mm.add(1L, 2L); // 메서드 호출
long add(long a, long b) {
long result = a + b;
return result;
}
1. 객체 생성
하나의 소스파일에는 하나의 class만 작성하는것이 바람직
4. 참고 레퍼런스
https://www.youtube.com/user/MasterNKS
5. 오늘 한 일 / 회고
- 오늘 알고리즘 모의고사를 봤는데..솔직히 쉽게 풀거라고 생각했다..근데 시간 왜이렇게 빨리가는지ㅠㅠ문제해석도 꼬아서하고 java문법도 어렵고 해서 제한시간 2시간이였는데.. 겨우 풀고 겨우 영상 찍어서 제출할 수 있었다.. 본 테스트에서도 이렇게 꼬일까봐ㅠㅠ 알고리즘 강의 듣고 java강의 듣고있는데.. 너무 배울게 많아서 우선순위를 못정하겠다ㅠㅠ 할건많은데 나 왜이렇게 느리냐..계속 앉아만 있는데ㅠㅠㅠ또륵........
6. TO-DO LIST
- java문법 공부
- 알고리즘 공부
- 2주차 과제...
7. 특이사항
'개발 일지' 카테고리의 다른 글
TIL]이노베이션 캠프 11일차 (0) | 2022.08.12 |
---|---|
[TIL]이노베이션 캠프 10일차 (0) | 2022.08.10 |
[TIL]이노베이션 캠프 8일차 (0) | 2022.08.08 |
[WIL]이노베이션 캠프 1주차 (0) | 2022.08.08 |
[TIL]이노베이션 캠프 7일차 (0) | 2022.08.07 |