한 폴더 내에서 컴파일 할 때 발생하는 문제점
소스파일과 클래스파일이 섞이게 됨, 한 폴더에 모든 소스파일 존재
→ 파일 개수가 많아지면 관리 어려움! ⇒ 소스파일과 클래스파일 분리, 용도따라 디렉토리 분산배치
기본 컴파일 명령 : $ javac Hello.java 경로를 따로 지정하지 않으면? → 한 폴더 내에 생성
일일히 옮겨주는 대신 → 옵션 -d 이용
옵션 -d 로 클래스파일 저장할 폴더를 지정
$ javac -d [클래스파일 옮길 폴더경로] 컴파일할 소스파일명
상위 폴더로 가서 소스파일명 대신 소스파일 경로를 지정
$ javac -d 클래스파일폴더명 소스파일폴더/소스파일명
ex. $ javac -d bin src/Hello.java
여러 애플리케이션을 구분해서 개발할 때 소스파일과 관련파일을 애플리케이션 별로 구분
how? → ‘프로젝트’ 라는 단위로 구분
git / 프로젝트1/src1/bin1 프로젝트2/src2/bin2
이렇게 폴더가 많아질 때 사용하는 기본 디렉토리 구조
Maven : 컴파일, 테스트, 문서생성, 배포파일생성 등 개발 작업(build) 전반을 도와주는 프로그램(도구) ⇒ 빌드도구. Gradle도 비슷한 역할
main/ application source 및 관련파일
java/ 자바소스폴더
resources/ application 실행관련 설정파일
webapp/ HTML, CSS, Javascript, JSP, Image 등 웹 관련 파일
test/ 개발하는동안 단위테스트 관련 파일
java/ 단위테스트 자바소스파일
resources/ 단위테스트 실행할 때 사용할 설정파일
컴파일
프로젝트폴더> $javac -d bin/main src/main/java/Hello.java
실행
프로젝트폴더> $ java bin/main/Hello
$ java -classpath bin/main 클래스명
$ java -cp 클래스파일위치 클래스명
https://gradle.org/ gradle install
$mkdir 명령어 이용 프로젝트 폴더생성
초기화진행 → 프로젝트폴더> $ gradle init
원하는 방식 선택해서 진행
ex. project type-application / language-java / DSL-groovy / framework-JUnit4 / …
source package 만들때 이름 com.___ → 왜? 이름 안겹치게 도메인명사용 도메인을 뒤집어 작성
조건이 참이면 if 내의 코드1 실행, 조건이 거짓이면 else 내의 코드2 실행
소스코드의 양이 많아지면서 가독성, 효율, 관리 용이 등 위해 특정기능 수행단위로 묶은 것
→ 대량의 소스코드를 쉽게 관리하기위해서
하나의 파일 내에는 여러개의 function 존재 가능함
C언어 → 그 순서를 지정해주기위해 제일 처음 읽기 시작하는 function을 main으로 지정
소스코드의 양이 더 많은 Java 등 언어 → function을 묶음으로 분류해 관리하는 최소단위 class 사용
class { function1 { }, f2 { }, ...}
각 언어를 분류한 것은 속도에는 상관없이 복잡도로만 나타낸 것
이러한 언어를 사용해 프로그래밍한 것을 OPP
Object Oriented Programming : 객체지향 프로그래밍
cf.) Javascripit는 c처럼도 cobol처럼도 구동된다
C언어 최소단위 : function
최소한 main function은 만들고 소스코드를 묶어야함
Java 기본단위 : class
그 밑 선언부 main function 필요 → 없으면 오류 발생
C언어 → int main() { }
Java언어 → class XXX{ public static void main() { } }
class 클래스명 {
public static void main (String[] args) {
java code;
}
}
Statement 하나의 완성된 명령문
function (method)
⇒ functon은 실행하는 기능단위로 여러 개의 statement 를 묶어놓은 것
⇒ 관리 용이
class 서로 관련된 기능을 분류해 묶어둔 것
class A{ method1{} m2{} } class B{ ----- }
package
eng.alph.aaa/ A.class
statement < method(function) < class < package
Pa / C1 {m1 (s1, s2,…) m2( )}
패키지명 규칙 : 보통 다른 개발자나 회사와 이름 충돌방지위해 인터넷 도메인명 사용
com.naver.line ___ - 도메인명, 프로젝트명이나 서비스명
패키지에 소속된 클래스는 소스파일 선언부에 소속된 패키지명 적어줘야함
package com.eomcs.lang.ex01;
class A { }
$ java 패키지명.클래스
ex. $ java -cp app/bin/main com.eomcs.lang.ex00
주석 등 한글로 작성시 깨지는 오류 발생 → -encoding 옵션으로 언어형식 알려줘야함
$javac -encoding utf-8 -d app\bin\main V app\src\main\java.....
패키지에 소속되려면 class 상단부에 package 선언해야함
패키지에 소속된 소스파일을 컴파일하면 컴파일러가 자동으로 소속 패키지 폴더를 만들어줌
패키지 소속된 클래스를 실행하려면 패키지가 있는 폴더를 지정해서 실행해줘야함
$java -cp class위치 class속한package.class명
패키지 사용해야 여러 파일 관리가 더 쉽다
같은 이름의 java파일도 서로다른 패키지에 속하면 덮어씌워지지않고 존재가능
무소속 클래스는 그냥 지정 자리에 바로 생김
$java -cp 위치 class명
패키지 소속 클래스는 지정폴더 하위에 패키지 폴더가 새로 생성되고 그 제일 밑에 클래스 생성됨