JAVA (생활코딩 정리)

개발빼-엠·2023년 1월 30일

Java

목록 보기
2/8
post-thumbnail

Java SE

Java Platform, Standard Edition. 자바의 표준안 어떤 문법적인 구성을 가지는지등을 정의

JDK

Java Development Kit. Java SE에 따라서 만들어진 소프트웨어. (개발자를 위함)

JRE

Java Runtime Environment. 자바가 실제로 동작하는데 필요한 JVM, 라이브러리, 각종파일이 포함. (일반인을 위함)

JVM

Java Virtual Machine. 자바가 실제로 구동하는 환경

JDK안에 JRE가 포함 그 안에 JVM가 포함.


동적 웹 서버: 아파치, Nginx

동적 웹 서버 구현을 도와주는 프로그램(서블릿 엔진): 아파치 톰캣


설치

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk11

JAVA 실행

파일명.java (ex Helloworld.java) → 컴파일 javac Helloworld.java → 명령을 실행하면 Helloworld.class라는 이름의 파일이 생성 (실행파일. 이작업을 하는 프로그램을 런처라고함) → java Helloworld

javac 파일이름.java를 하면 컴파일러가 해당 컴파일을 하게 되고 파일이름.class라는 파일을 생성한다.

이 파일을 자바가상머신이 실행하려면 java 파일이름 명령어를 친다.

파일명과 일치하는 클래스를 찾게 되고 그 안에 있는 main함수를 실행하게 된다.

CODE (컴파일러명령어 javac)→ Byte Code (런처명령어 java)→ vm

Untitled

Untitled


eclipse

  • Package Explorer: 프로젝트를 관리하는 도구
  • Outline: 소스코드의 문법적인 요소를 시각적으로 표시
  • Problems: 소스코드의 문제가 있을때 알려줌
  • Consol: 터미널에서 결과를 출력

Untitled

상단바 File → new → Java project로 폴더를 지정해 finish클릭하면 bin(binary .class확장자)과 src(source .java확장자)가 생성됨.

프로젝트 파일 우클릭 → New → Package란?

→ 하나의 프로젝트안에서 같은 폴더명을 사용할때 디렉토리를 만들어 보관하는 것을 해주는것..?!

→ 패키지 이름도 중복될 가능성을 낮추기 위해 도메인주소를 작성한다.

Untitled


“” 과 ‘’ String 과 Character

java에서 문자열의 따옴표는 무조건 쌍따옴표(””)를 사용한다.

홑따옴표(’’)는 Character 문자이며 의미가 달라진다.

Character → 한글자를 표현하는 데이터 타입.

String → Character들이 모여 있는 것.


Java의 Variable

변수를 선언할때 데이터타입을 꼭 명시해야 한다.

int → 정수

double → 실수

String → 문자열


CASTING

데이터 타입을 다른 데이터 타입으로 변환하는 방법

public class Casting {
	public static void main(String[] args) {
		// 정수, 실수를 double로 선언했을때 오류나지 않음
		double a = 1.1;
		double b = 1;
		System.out.println(a, b);
		
		// 실수를 int로 선언했을때 오류남
		int c = 1.1;

		// 오류나는 부분에 커서를 가져다 대면 두가지 옵션이 뜸.
		// Add cast to 'int'  => 현재 정수타입(int)을 실수(double)로 변경해주겠다.
		double d = 1.1;
		// Change type of 'c' to 'double' => 현재 실수타입인 변수값(1.1)을 정수(1)로 자동 변환해 주겠다.
		int e = (int) 1.1;		
	}
}

// 결론
double b = 1;
// b가 오류가 나지 않는 이유는
double b = (double) 1; 
// 위와같이 자동적으로 처리되어 있다.

int → String 변환

int one = 1;
System.out.println(String.valueOf(one));
System.out.println(Integer.toString(one));

String → int 변환

String one = "1";
System.out.println(Integer.valueOf(one));
System.out.println(Integer.parseInt(one));

타입 확인

Ststem.out.println("1".getClass());
// class java.lang.String

arguments & parameter

자바의 args에 매개변수를 넣어 값을 확인해 보는 방법.

초록버튼 클릭후 Run Configurations의 Arguments 부분을 입력한다.

2개의 값을 넣어야 할경우 작은따옴표로 구분을 짓는다. ex) “인자1” “인자2”


API (Application Programming Interface)

프로그램: 시간 순서에 따라서 실행된다라는 시간이 강조되 ㄴ표현.

애플리케이션: 자바가 제공하는 부품들을 응용해서 만든다라는 으용 관점의 표현.

즉, 자바를 응용해서 프로그래밍적으로 실행되는 프로그램을 만들기 위해 사용해야 하는 조작 장치 또는 조작 방법을 API라고 부른다.


자바 문서 보는 법

“api documentation java”

  • java.lang 패키지 import없이 사용가능한 기본이되는 가장 중요한 패키지
  • 패키지, 클래스, 변수, 메소드 Untitled 패키지: 관련 클래스들을 그루핑해서 이름을 붙여 분류해놓은 것.

클래스

변수와 메소드를 그루핑한 것. 서로 연관된 변수와 메서드를 모아서 이름을 붙인 것.

ex) 수학과 관련된 클레스 Math클래스

인스턴스

생성자가 없는 클래스는 일회성으로 사용되는 클래스다.

생성자가 있고, 생성자가 있다는 것은 생성자를 이용해 인스턴스를 만드는 것이 허용된다고 생각하면된다.

어떤 클래스를 사용할 때 그 클래스를 만든 사람이 클래스를 인스턴스로써 활용하기 원한다면 클래스에 생성자가 있을 것이고, 이 경우 생성자 앞에 new를 붙이면 된다.

그럼 클래스가 복제되어 인스턴스가 된다.

하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것.

클래스 이름 앞에 new를 붙여서 만들어진 것.

이 코드가 동작하기 위해서는 할당한 변수와 메서드 앞에 static이라는 키워드를 사용하면 안된다.

상속

이클립스 Type Hierarchy에서 클래스의 상속 관계를 볼 수 있다.

상속은 부모 클래스에 있는 함수나 변수를 받아오는 것으로 볼 수 있다.

extends를 사용해 나타내고 부모클래스와 자식클래스에서 메소드가 겹치면 override(덮어쓰기)한다.


이클립스 한 번에 변수로 만들기

  1. 변수로 만들 부분 스크랩
  2. 우클릭 → Refactor → Extract Local Variable(ALT + command + L) → 변수명 정해주면 끝.

변수 입력값도입 → 290page


배열

double [] array = new double[3];
array[0] = 0.1;
array[1] = 0.2;
array[2] = 0.3;

전역변수

public static type name

데이터 타입

  1. primitive
    • boolean
    • int
    • double
    • short
    • long
    • float
    • char
  2. non primitive
    • String
    • Array
    • Date
    • File

원시데이터타입에서는 == 사용, 원시데이터타입이 아니라면 equals사용

== 은 같은 곳에 있는지를 따짐. equals는 내용이 같은지 따짐.

Untitled


객체 지향 프로그래밍 OOP(Object Oriented Programming)

서로 연관된 변수를 그루핑해 이름을 붙인 것이 클래스.

이 클래스를 복제해서 서로 다른 내부적인 상태를 갖고 있는 복제본들은 인스턴스.

우선 클래스와 인스턴스를 포괄적으로 객체라고 생각.

이 객체를 뼈대로 삼아 프로그램을 만들어 가는 프로그래밍 방법론을 객체지향이라고 한다.

메서드를 다른 컴퓨터 언어에서 함수, 펑션, 서브루틴, 프로시저라 부른다.

한국어로는 절차지향.

프로그래밍 영어로는 프로시저럴 프로그래밍이라 불리는 프로그래밍의 패러다임은 프로시저,

즉 자바에서는 메서드라고 불리는 것을 이용해 프로그램을 정리정돈하는 프로그래밍 기법이다.

메서드를 이용해 작은 부품을 만들고 이것을 결합해서 더 큰 프로그램을 만들어가는 테크닉이 절차지향 프로그래밍이다. (대표적으로 C언어)

메서드만으로 프로그램을 만드는 것에서 부족함을 느껴 서로 연관된 메서드와 변수를 모아 그루핑하고, 이름을 붙여 정리정돈을 한 수납상자가 클래스이다.

  • 클래스 Untitled

클래스를 중심으로 프로그램의 구조를 만들어가는 컴퓨터 프로그래밍 방법론을 객체지향 프로그래밍이라고 하며, 이러한 방법론을 언어 차원에서 지원하는 언어를 객체지향 언어라고 한다.

하나의 파일안에 두 개의 클래스를 만들고 컴파일(이클립스에서 저장)했을 때 이클립스 Navigator창을 확인하면 .class파일이 생긴다.

이파일은 해당 클래스에 대한 파일이다.

즉, 하나의 파일안에서 클래스를 여러 개 만들면 각 클래스가 파일로서 존재하게 된다는 것.


접근 제어자

public class void function(){}

public 대신 protected, default, priviate등이 올 수 있다.

  • private
    • private키워드가 지정된 것들은 같은 클래스 안에서만 사용할 수 있다.
    • 클래스 안에서만 쓸 수 있는 내부적인 메서드가 되는 것.

static

static - class method

no static - instance method

스태틱이라는 키워드가 붙은 메서드는 클래스의 메서드이고 스태틱이 없는 메서드는 인스턴스의 메서드이다.

메소드가 인스턴스의 소속일때는 static을 뺴줘야 한다.

클래스에 static이 붙은 변수와 붙지않은 변수 2개를 선언하고 클래스를 통해 두 변수에 접근이 되는지를 따져보면 static이 붙은 변수는 접근이 가능하고 붙지않은 변수는 에러가 발생한다.

즉, 클래스를 통해서는 당연히 클래스 변수에 접근할 수 있지만 인스턴스 소속의 변수에 클래스를 통해서 접근하고자 하면 에러가 발생한다.

인스턴스 소속의 변수는 인스턴스를 통해 사용하도록 고안된 변수이다.

클래스 메서드 안에서는 클래스 변수에 접근할 수 있는데, 인스턴스 변수에는 접근할 수 없다.

인스턴스 메서드 안에서 클래스 변수와 인스턴스 변수를 호출했을때 두 변수(클래스변수, 인스턴스변수)모두 접근이 가능하다.

클래스 소속 변수는 인스턴스에 실제 값이 존재하지 않고, 해당 클래스를 가리키게 된다.

인스턴스 변수는 인스턴스가 생성될 때 변수가 생성되면서 만약 클래스의 값도 설정돼 있다면 그 값까지 복제된다. 그리고 클래스와 인스턴스는 서로 링크가 걸려있지 않기 대문에 인스턴스변수의 값을 바꾼다고 해서 클래스의 변수 값이 바뀌지 않는다.

클래스의 변수값이 바뀌면 인스턴스의 값도 바뀌게 된다.

클래스의 변수를 바꾸면 모든 인스턴스의 변숫값이 바뀌고, 인스턴스에서 클래스 변수를 바꿀 수도 이쓴ㄴ데 그렇게 되면 클래스의 변수가 바뀌고 변수를 사용하고 있는 모든 인스턴스의 값도 바뀐다.


생성자(Constructor)와 this

반드시 값을 설정해야 할 때, 설정하지 않는 실수를 방지하기 위해 인스턴스를 생성할때 값을 지정하게 하는 것을 위해 생성자라는 것을 정의해야 한다.

자바에서 클래스는 생성자라고 하는 특수한 메서드를 구현할 수 있는 기능을 제공하고 생성자의 주요한 작업은 초기화이다.

클래스와 동일한 이름의 메서드가 있다면 인스턴스를 생성할 때 그 메서드를 호출하도록 약속돼 있기 때문에 클래스가 인스턴스화될 때 실행해야 할 코드를 생성자 메서드 안에 정의하는 방식으로 초기화 목적을 달성할 수 있다.

생성자를 선언하려면 그냥 클래스의 이름와 똑같은 이름의 메서드를 정의하면 되고, static 또는 리턴 데이터 타입과 같은 것들은 지정하지 않는다.

this와 super

this: 자기자신

super: 부모


상속

extends를 사용해 클래스를 상속받을 수 있다.

Overriding과 Overloading

Overriding

부모가 갖고 있는 기능을 덮어쓰기 하는 것.

부모 클래스의 메서드를 재정의하는 것.

Overloading

상속과는 상관이 없다.

Interface

implements를 적으면 인터페이스에 적혀있는 메서드들을 구현해야 한다.

Package

같은 이름의 클래스가 존재하기 위해서는 그것을 서로 다른 패키지에 담아야한다.

클래스가 많아졌을 때 클래스를 정리정돈하는 디렉토리로서 사용할 수 있다.

0개의 댓글