오늘의 과정 목록

  • Java의 개념과 특징, 컴포넌트
  • 개발 언어의 종류와 개발 방법론
  • 자바 프로젝트 구조 및 주석
  • 데이터 저장을 위한 변수 및 데이터 타입
    (변수, 상수, 기본 데이터 타입 중 정수, 실수)

Java란

  • 널리 사용되는 고급 프로그래밍 언어이다.
  • 객체 지향 프로그래밍 언어로, 네트워크 및 분산 환경에서 사용하기에 특히 효과적이다.

Java의 특징

  • 플랫폼 독립성
    java 코드는 한 번 작성하면 어느 플랫폼에서든 실행이 가능하다.
    JVM이라는 중간 소프트웨어 계층은 java 코드를 플랫폼 독립적인 바이트코드로 컴파일 할 수 있도록 한다.

  • 객체 지향
    객체 지향 프로그래밍 언어로, 상속, 캡슐화, 다형성 등의 객체 지향 원칙을 완벽하게 지원한다.

  • 멀티스레딩
    동시에 여러 작업을 수행할 수 있는 멀티스레딩을 내장하고 있다.

  • 자동 메모리 관리
    가비지 컬렉션(Garbage Collection)이라는 프로세스를 통해 자동 메모리 관리를 수행한다.
    이는 프로그래머가 메모리 해제와 같은 작업에 신경 쓸 필요가 없게 해준다.

Java의 주요 컴포넌트

  • JVM(Java Virtual Machine)
    바이트 코드를 실행하는 추상 기계.
    플랫폼에 독립적이며 'write once, run anywhere' 원칙을 가능하게 한다.
    바이트코드를 읽고 이를 해당 시스템의 기계어로 해석하거나 실행한다.
    메모리 관리와 가비지 컬렉션 등의 작업도 수행한다.

  • JRE(Java Runtime Environment)
    Java 프로그램을 실행하는 데 필요한 모든 것을 제공한다.
    (JVM, Java클래스 라이브러리, Java 프로그램이 실행되는 데 필요한 다른 파일들 등등)
    사용자가 Java 프로그램을 실행할 수 있게 해주지만, Java 프고르갬을 개발하려면 JDK가 필요로 하다.

  • JDK(Java Development Kit)
    Java 프로그램을 개발하기 위한 모든 것을 제공한다.
    JRE, 컴파일러(javac), 디커거(jdb), 아카이버(jar) 등 유용한 도구들이 포함되어 있다.'
    Java 프로그램을 개발하고, 컴파일하며, 디버그하고, 실행하는 데 필요한 전체 환경을 제공한다.

  • JDK ( JRE ( JVM ) ) ) 개념.

개발 언어의 종류

  • 구조적 언어 (Structured Programming Language)
    흐름 제어를 위해 고수준의 구조를 사용하는 언어로써 프로그램을 이해하기 쉽고 수정하기 쉽도록 만드는데에 초점을 맞추었다.
    + C언어, Pascal

  • 객체지향 언어 (Object-Oriented Programming Language)
    프로그램을 객체라는 개념을 중심으로 설계한 것으로 객체는 상태(속성), 행동(메소드)을 가질 수 있다.
    클래스와 인스턴스, 캡슐화, 상속, 다형성 등이 있다.
    + Java, Python, C++ 등

  • 스크립트 언어 (Scripting Language)
    작고 간단한 프로그램을 작성하는 데 사용되며, 웹개발, 자동화, 텍스트 처리 등에서 주로 사용된다.
    + JavaScript, Python, Ruby 등

  • 컴파일 언어 (Compiled Language)
    전체 코드를 기계어로 번역하는 컴파일러를 사용한다. 실행 시간이 빠르나 수정 할 때 코드를 다시 컴파일 해야한다. (속도가 느려질 수 있다)
    + C, C++, Java 등

  • 인터프리터 언어 (Interpreted Language)
    코드를 한 번에 한 줄씩 실행하는 인터프리터라고 하며, 코드를 수정하고 즉시 결과를 볼 수 있지만 실행 시간이 느릴 수 있다.
    + Python, Ruby, JavaScript 등

개발 방법론

소프트웨어 개발 프로젝트를 수행하는 동안 지켜야 할 프로세스, 절차, 규칙 등을 정의하는 방식이다. 각 방법론은 고유한 접근 방식을 제공하며, 특정 상황에 더 적합할 수 있다.

  • Waterfall Model (폭포수 모델)
    가장 전통적인 소프트웨어 개발 방법론 중 하나이다.
    개발 과정을 명확하게 정의된 여러 단계로 분할한다.
    일반적으로 요구사항 정의, 설계, 테스트, 배포, 유지보수 등을 포함한다.
    각 단계는 이전 단계가 완료된 후에 시작할 수 있다.
    이전 단계에서 요구사항이 바뀌면 다시 돌아가 개발과정을 거쳐야 하기 때문에 요구사항이 고정되어 있을 때 사용된다.

  • Agile (애자일)
    고정된 요구사항보다 고객의 요구사항에 유연하게 대응할 수 있는 방법론이다.
    개발 과정을 작은 반복 주기로 나누고, 각 주기마다 사용 가능한 제품의 일부를 제공한다.
    스크럼과 칸반은 애자일 방법론의 일부이다.

  • DevOps (개발/운영)
    소프트웨어 개발(Dev)과 IT 운영(Ops) 사이의 통합을 강조하는 방법론이다.
    개발과 운영 간의 협력을 통해 제품 배포의 주기를 단축하고, 문제 해결 시간을 줄이며, 서비스 품질을 향상시키는 것이 목표이다.

  • Lean (린 개발)
    낭비를 최소화하고 고객 가치를 최대화 하는 것에 초점이 맞추어져있다.
    Toyota의 제조 시스템에서 유래되었으며 기능을 빠르게 제공하고, 고객 피드백에 기반한 지속적인 개선을 통해 가치를 창출하려고 한다.

프로젝트 구조

Java 프로젝트의 구조는 다음과 같은 디렉토리 및 파일 구조로 구성된다.
이는 일반적인 구조이며, 프로젝트의 크기와 종류에 따라 조금씩 다를 수 있다.

  • 소스 코드 디렉토리 (src)
    Java 소스 코드 파일들을 포함하는 곳으로 주로 패키지 구조에 따라 하위 디렉토리가 생성되며, 패키지 이름에 따라 디렉토리 구조가 반영된다.
    ex) 패키지 이름이 "com.example.project"인 경우 "src/com/example/project"와 같은 디렉토리 구조가 생성될 수 있다.

  • 패키지 (packages)
    소스 코드 디렉토리(src) 안에 들어있는 패키지로 패키지는 소스 코드의 조직화와 명명 규칙을 제공하는 논리적인 단위이다.
    클래스나 인터페이스를 포함하며, 패키지 이름은 소스 코드 파일의 맨 위에 작성된다.
    ex) "com.example.project" 패키지에 속하는 클래스는 "package com.example.project;"라는 선언을 가질 것이니다.

  • 클래스 파일 (class files)
    컴파일된 Java 소스 코드는 클래스 파일로 변환되며 이러한 클래스 파일들은 보통 소스 코드 디렉토리와는 별도의 디렉토리에 저장된다.
    대부분의 IDE에서 컴파일된 클래스 파일을 자동으로 생성 및 관리한다.

  • 리소스 파일 (resources)
    소스 코드 외의 지원 파일 (ex) 설정파일, 이미지 파일, 텍스트 파일 등)은 주로 "resources" 디렉토리에 저장된다.
    이러한 파일들은 프로그램 실행 시 필요한 데이터를 제공하거나 사용자 인터페이스 요소에 대한 리소스를 포함할 수 있다.

  • 빌드 및 의존성 관리 파일
    Java 프로젝트는 종종 빌드 도구를 사용하여 컴파일, 텍스트, 패키지 등의 작업을 자동화 한다.
    이러한 빌드 도구(Apache Maven, Gradle)는 주로 프로젝트의 구조 의존성 관리를 위한 설정 파일을 사용한다.
    ex) Maven 프로젝트의 경우 "pom.xml"이라는 XML 파일이 사용된다.

  • 기타파일
    프로그램의 실행과 관련된 기타 파일들이 포함될 수 있 다.
    이는 실행 가능한 JAR파일, 배포 스크립트, 문서, 테스트 코드 등을 포함할 수 있다.

주석

  • // : 한 줄 주석
  • /* */ : 범위주석
public class Hello {
	public static void main(String[] args) {
		
		// 아래 코드는 콘솔에 출력을 하기 위한 코드입니다.
		System.out.println("Hello");
		System.out.println(/*"Hello"*/);
		//범위 주석을 이용하여 원하는 범위를 지정해서 주석처리가 가능하다.
	}
}

변수

  • 데이터를 저장하는 메모리 공간.
  • 메모리 공간을 할당하는 행위를 '변수를 선언한다'라고 한다.
  • 할당한 메모리 공간에 첫 데이터를 넣는 행위를 '변수를 초기화한다'라고 한다.
    + 이 때 사용하는 '='은 같은 것이 아니라 오른쪽 값이 왼쪽 값에 대입한다는 의미이다.
    + 변수 초기화 또한 reset 개념이 아닌 상자에 물건을 담는 행위. 즉 값을 넣는 것을 의미한다.
// 변수 선언 방법 : 데이터타입 변수명;
int number; // 정수를 담는 int

// 변수 초기화 방법 : 변수명 = 초기데이터;
number = 100;

// 변수 선언과 동시에 초기화
double pie = 3.14 // 실수를 담는 double

변수의 주의 사항

  1. 변수는 선언한 이후에 사용할 수 있다. (즉. 선언하지 않은 변수는 사용할 수 없다)
comment = "안녕하세요"
/*
오류코드) comment cannot be resolved to a variable
해석) 설명을 변수로 확인할 수 없습니다
	 변수를 선언하지 않음.
*/
 nubmer = 100; 
 /*
 오류코드) nubmer cannot be resolved to a variable 
 해석) 숫자를 변수로 확인할 수 없습니다. 
 	  변수명이 틀림 
 */
  1. 동일한 변수명을 중복해서 선언할 수 없다.
int number = 100;
/*
 오류코드) Duplicate local variable number
 해석) 중복된 지역 변수 번호. 
 	  변수를 중복해서 선언함.
 */
  1. 선언한 변수는 반드시 초기화가 되어야 한다.
int age;
System.out.println(age);
/*
오류코드) The local variable age may not have been initialized
해석) 로컬 변수 연령이 초기화되지 않았을 수 있습니다. 
	 초기화가 되어있지 않음.
*/
  1. 변수 선언시에는 변수 명명 규칙을 따라야 한다.
  • 컴파일이 불가능한 명명규칙

1) 변수명에 특수문자 불가능($, _ 제외)

int variable!; 
/*
오류코드) Syntax error on token "!", delete this token
해석) 토큰 "!"에 구문 오류가 발생했습니다. 이 토큰을 삭제하십시오.
	 띄어쓰기를 포함하여 연산자로 사용하는 특수문자와 구분이 불가능하기 때문에.

2) 문법상의 키워드 사용 불가능 하다.

int int;
/*
오류코드) Syntax error on token "int", invalid VariableDeclarator
해석) 토큰 "int"의 구문 오류, VariableDeclarator가 잘못되었습니다
	 변수명의 int인지 데이터 타입의 int인지 구별이 불가하다.
     int 뒤에 추가적으로 숫자나 문자가 붙으면 사용이 가능하다.
 */

3) 변수명의 첫글자가 숫자일 수 없다.

int 1number;
/*
오류코드) Syntax error on token "1", delete this token
해석) 토큰 "1"에 구문 오류가 있습니다. 이 토큰을 삭제하십시오
	 숫자를 넣고 싶으면 첫 글자가 아니면 된다. 첫 글자만 아니면 사용이 가능하다.
*/
  • 변수명은 대소문자를 구분한다.
int Number = 100;
// 기본 데이터 타입은 숫자로 관리된다. 
// 아스키값, 유니코드값으로 변환되어 사용하기 때문에 대문자 소문자 구별이 가능하다.

컴파일은 되지만 개발자 간의 암묵적인 규칙
(변수명은 lowerCamelCase 규칙을 따라야 한다)

  • 명명규칙
  1. Camel Case
    띄어쓰기 위치를 표현하기 위하여 띄어쓰기 뒤에오는 첫 문자를 대문자로 표기한다.
    ex) Hello World -> HelloWorld
    1-1. lowerCamelCase : 첫 글자를 무조건 소문자로 지정한다.
    1-2. UpperCamelCase : 첫 글자를 무조건 대문자로 지정한다.

  2. Snake Case
    띄어쓰기를 '_'(언더바)로 표기한다.
    ex) Hello World -> Hello_world
    2-1. lower_snake_case : 모든 문자를 소문자로 표기한다.
    2-2. UPPER_SNAKE_CASE : 모든 문자를 대문자로 표기한다.

  3. 사용처
    lowerCamelCase : 변수, 메서드
    UpperCamelCase : 클래스, 인터페이스
    lower_snake_case : 안쓰임 (JST에서 java 변수와 javascript 변수를 구분짓기 위한 javascript의 변수명)
    UPPER_SNAKE_CASE : 상수
    + 변수명을 사용할 때 약어 사용은 지향해야 한다.

변수에 값 재할당

int number = 10;
number = 999;
// 기존에 10으로 초기화 되었던 초기 변수의 값이 999로 값을 재할당 받음.

상수

  • 한번 초기화 하면 변경할 수 없는 변수.
  • final 키워드를 사용하여 변수 선언이 가능하다.
  • 명명 규칙 : 기본 변수 명명 규칙 + UPPER_SNAKE_CASE
// 선언방법 : final 데이터타입 상수명;
final double PIE;

// 초기화 방법
PIE = 3.1415;

// 상수는 재할당이 불가능하다.
PIE = 3.14;
/*
오류코드) The final local variable PIE may already have been assigned
해석) 최종 로컬 변수 PIE가 이미 할당되었을 수 있습니다
	 PIE는 3.1415라는 값을 final로 인하여 3.14로 값을 재할당 할 수 없다.
*/

// 선언과 동시에 초기화
final int NUMBER = 1000;
*/
  • 상수를 사용하는 이유
  1. 값의 보호 : 상수로 지정되어 잇는 데이터를 변경할 수 없도록 강제로 막음
  2. 코드의 가독성 증가 : 데이터에 이름을 부여함으로써 코드의 가독성을 증가
// 변수를 선언 했을 때.
int size;
		
// 1)
size = 415 * 915;
		
// 2) (가독성이 더 좋다)
final int GALAXY_S20_WIDTH = 415;
final int GALAXY_S20_HEIGHT = 915;
		
size = GALAXY_S20_WIDTH * GALAXY_S20_HEIGHT;

데이터 타입

  • 자바의 변수는 여러 형태의 데이터를 저장할 수 있따.
  • 해당 변수에 저장할 수 있는 데이터의 형태를 데이터 타입이라고 한다.
  • 데이터 타입
    - 기본형 데이터 타입 (실제로 데이터를 가지고 있음)
    - 참조형 데이터 타입 (실제로 데이터를 가지고 있지 않음)

기본형 데이터 타입

  • 실제로 데이터를 저장하고 있는 변수의 타입이다
  1. 정수형 타입
  2. 실수형 타입
  3. 문자형 타입
  4. 논리형 타입

정수형 타입

  • 정수만 담을 수 있는 데이터 타입
  • byte, short, int, long

1) byte

  • 1byte (8bit)의 메모리 공간을 차지한다.
  • -128 ~ 127
byte byteVariable;
byteVariable = 127;
byteVariable = -128;
// byteVariable = 128;
/*
오류) Type mismatch: cannot convert from int to byte
해석) 유형 불일치: "int"에서 바이트로 변환할 수 없습니다
*/

2) short

  • 2byte(16bit)의 메모리 공간을 차지한다.
  • -32,768 ~ 32,767
short shortVariable;
shortVariable = 32767;
shortVariable = -32768;
// shortVariable = 32768;
/*
오류) Type mismatch: cannot convert from int to short
해석) 유형 불일치: int에서 short로 변환할 수 없습니다
*/

3) int

  • 리터럴(12345같은 고정된 데이터)의 기본 데이터 타입이 정수일 경우 int로 저장하게 된다.
  • 4byte(32bit)의 메모리 공간을 차지한다.
  • -2^31 ~ 2^31-1
int intVariable;
intVariable = 2^31-1; 
//(== 2_147_483_647); (언더바 자리는 자유롭게)
intVariable = -2^31;
//intVariable = 2_147_483_648; 
/*
오류) The literal 2_147_483_648 of type int is out of range 
해석) int 형식의 리터럴 2_147_483_648이 범위를 벗어났습니다
	 컴파일러가 기본적으로 int를 인식하기 때문에 다른 데이터 타입과 다른 오류가 뜬다.

4) long

  • int 범위가 넘어가는 수를 long 데이터 타입으로 선언하기 위해서는 숫자 뒤에 'L' 이나 'l' 식별자를 사용한다.
  • 숫자 뒤에 사용할 때 대소문자 구분이 없지만 가독성을 위해 대문자 'L'을 주로 사용할 것.
  • 8byte(64bit)의 메모리 공간을 차지한다.
  • -2^63 ~ 2^63-1
long longVariable;
longVariable = 2_147_483_648L;
longVariable = -2^63L;

실수형 타입

  • 실수와 정수를 모두 담을 수 있는 데이터 타입이다.

1) float

  • long와 마찬가지로 숫자 뒤에 'F' 나 'f' 식별자가 있어야 한다.
  • 4byte(32bit)의 메모리 공간을 차지함
  • 소수점 6~7 자리에서 오차 발생
float floatVariable;
floatVariable = 3.14151617F;
System.out.println(floatVariable);

2) double

  • int와 마찬가지로 실수의 기본 데이터 타입으로 저장 된다.
  • 8byte(64bit)의 메모리 공간을 차지한다.
  • 소수점 15~17자리에서 오차 발생
double doubleVariable;
doubleVariable = 3.141516171819;
System.out.println(doubleVariable);

0개의 댓글