자바 기초 프로그래밍 1일차

awarduuu·2023년 3월 2일
0

230302

1. 자바의 역사

자바는 오라클에서 인수한 이후로 라이센스를 냈다. 그래서 한동안 침체기가 있었는데 호환성, 레거시와 같은 IT 특성상 자바를 쓰지 않을 수 없는 상황이 계속되었다. 결국 자바를 배우는 이유를 여기서 알 수 있었다. "자바는 백엔드 대표 언어다"

JDK(Java Development Kit)

java 소스코드를 컴파일하고 실행해주는 kit

  • java는 운영체제에 독립적인 언어지만 jdk는 운영체제별로 다르다.
  • 이번 과정에서는 jdk11을 사용할 예정이다.
  • 현재 이클립스 버전에는 jdk가 포함되어있기 때문에 따로 다운로드하지 않는다.
  • LTS 버전들은 긴 사용기간을 보장하기에 사용하기 좋다.

JAVA Version별 추가 spec

  1. JAVA 5.0

    • 제네릭, 오토박싱, 언박싱, enum , annotation , 개선된 for, static import
  2. JAVA 8.0

    • Interface의 static, default
    • 함수형프로그래밍 : Lambda식
    • Stream
  3. JAVA 9.0

    • Immutable List 가능
    • Private Method in Interface : interface 안에 private메소드
    • The var for local variables : 타입 명시를 하지 않고 변수명으로만 선언 가능
    • Java 9의 가장 큰변화중 하나는 모듈시스템 : 패키지를 보다 작은 모듈로 활용 가능하게 하는 시스템

Servlet

java로 만들어 웹브라우져에서 동작하는 언어

  • java문서 안에 html, css, js 모두 함께 사용 가능
  • 결국 확장자는 .java이기 때문에 컴파일, 자바에 대한 이해가 필요하여 협업이 어려운 단점이 있음 : "코딩이 java 중심 코드"

JSP

  • .jsp 문서 안에 html, css, js를 코딩
  • html 중심으로 코딩하고 자바코드가 필요할 때 <% java 코드 %> 태그를 사용해서 작성
  • 뷰와 Business Logic이 한 페이지에 섞여 있다보니 소스는 복잡하고 유지보수, 확장성 떨어짐 -> 발전이 더디고, 경제성, 보안성이 떨어짐 -> 과정중심의 프로그래밍 필요성 대두

프레임워크가 탄생한 배경

  1. Refactoring의 필요
  2. 디자인패턴 GoF 23가지, SOLID 객체지향 설계원칙
  3. MVC 구조로 개발 필요
    • Model : java
    • View : html, css, js, jsp
    • Controller : Servlet - View와 Model사이 중간에서 연결해주는 역할

이를 실현하기 위해 Framework들이 개발되었다!-> 프레임워크를 활용한 개발을 배워야 하는 이유


라이브러리와 프레임워크의 차이점

라이브러리는 실행의 주체를 개발자가 가지고 있다. 실행의 흐름을 개발자가 정한다.
프레임워크는 실행의 흐름을 스스로 가지고 있다. 즉, 개발자가 실행의 흐름을 가지지 못한다.


2. JAVA의 특징 및 기본 문법

java의 특징

1) 운영체제에 독립적이다.
JVM(Java Virtual Machine)이 운영체제에 독립적일수 있도록 해준다.

2) 객체지향언어이다.(Object Oriented Programming)

     "OOP is A, P , I , E"
      A - Abstraction (추상화)
      P - Polymorphsim(다형성)
      I - Inheritance(상속)
      E - Encapulattion(캡슐화-은닉)

3) 상대적으로 배우기 쉽다. - C에 비해서...

4) 다양한 API제공한다.(Aplication Programming Interface)

5) 가비지 콜렉터(Garbage Collector : GC)
사용하지 않는 메모리 공간을 자동으로 제거, 개발자가 직접 메모리 관리 안함.

java 문법

1) 클래스의 첫글자는 대문자로 시작
2) 메소드, 변수의 첫글자는 소문자로 시작
3) 메소드는 항상 () 괄호가 붙는다.
4) 단어와 단어가 조합 될 때 낙타 표기법 ex) Class JavaExam
5) 상수는 모두 대문자로! (단어 조합 시 사용) ex) static final int JAVA_EXAM
6) 첫글자는 영문,
, $로 시작, 두번째부터 숫자 가능, 예약어 사용 불가

변수 : 데이터를 저장하는 공간, 한가지 타입과 값만 저장 가능하다. 또한 값 변경이 가능하다.

데이터타입의 종류(자료형)

1) primitive type = 기본형(8가지)

정수형 : 크기에 따라 byte(1byte) -> short(2byte) -> int(4byte) -> long(8byte) : 기본형은 int
실수형 : float(4byte) -> double(8byte) : 기본형은 double
문자형 : char(2byte) : 한글자 만 저장가능 ex) 'A'
※ String은 문자열, 객체이다. ex) "A"
논리형 : boolean - true, false 값만 가능한다.

※ 연산을 하기 위해선 최소 32비트의 저장공간이 필요하다.
※ 캐스팅은 크기 비교가 베이스기 때문에 boolean, 객체에서는 불가능하다. 단, 객체간 상속관계는 object down casting이 일어날 수 있다.

byte a = 5; b = 3;

byte c = a + b; // 컴파일 에러 -> byte에 담을 수 없음

byte c = (byte)(a+b)// 위 문장을 형변환(Casting)을 이용해서 byte에 저장할 수 있다! 다만, 데이터 손실은 있을 수 있다.

// 작은 타입 -> 큰 타입으로 변환하는 promotion은 자동이나, 큰 타입 -> 작은 타입으로 변환하는 Casting은 캐스팅 연산자가 필요
  1. Object type (reference type)

class가 존재한다면 그 class의 이름이 타입이 될 수 있다.


class Hello{   }
class Cat{  }

변수선언
int i; //정수형선언
Hello h; // Hello 형 선언
Cat t ;// Cat 타입 변수 선언

// 중요: String 은 Object 타입이다. !!!
class String {  }

연산자

연산자기호
대입연산자=
같다==
같지 않다!=
비교연산자>,<

제어문

1) 조건문

  • if문
  • switch문

2) 반복문

  • for문
// for문 구조
for( 초기화 ; 조건식  ;증감식  ){
      실행문장;
  }
// 실행 순서 : 초기화 -> 조건식 true -> 실행문 -> 증감식
  • while문
// while문 구조
초기화;
while( 조건식 ){
   실행문장;
   증감식;
  }
  
// for문과 다르게 실행문이랑 증감식의 위치를 바꾸어 실행 순서를 바꿀수 있다!

// 이중 while문 구조
초기화;
   while(조건식){
     초기화;
      while(조건식){
          문장;
          증감식;
     }

     증감식;
  }
  • do while문 : 무조건 반복문을 한번은 실행한다.
// do while문 구조
초기화;
do{
  실행문장;
   증감식;
}while( 조건식  );

// 이중 do while문 구조
초기화;
  do{
     초기화;
     do{
       문장;
       증감식;
     }while(조건식);

    증감식;
 }while(조건식);

※ 반복문 안에서 반복을 제어하는 키워드 2가지 : break, continue

java 실행 순서

컴파일이란? 실행파일을 만드는 작업 (소스코드를 검증하고, 컴퓨터가 읽을 수 있는 바이트코드로 변환하는 과정)

1) 컴파일
javac HelloExam.java -> 오류가 없으면 HelloExam.class 생성

2) 실행
java HelloExam.class 실행

동작 원리 구조도

자바는 코딩순서와 실행순서는 다르다!
컴파일은 순차적으로 진행, 실제 실행은 호출 순서로 진행 (메인메소드를 시작점으로!)

profile
선한 영향력을 만드는 개발자

0개의 댓글