이번주차에서는 저번주에 이어서 Java
학습을 이어 진행했습니다. 단순히 코딩만 하는 것이 아닌, 자바라는 언어의 구조, 실행 원리, 더 나아가 "객체지향 프로그래밍 언어" 의 전반적인 것에 대해 학습하였습니다. 해당 내용은 자바뿐만 아니라 파이썬에도 공통적으로 적용되는 내용들이 많아 매우 유익한 내용이었습니다.
하지만 이론적인 내용이 많다보니 전처럼 실습 예제 코드를 풀어볼 시간이 없었고, 짧은 시간 안에 많은 내용들을 학습하다보니 매우 급박하게 느껴지고 헷갈리는 부분들이 많아서 아쉬웠습니다.
프로그래밍 보다는 자바라는 언어의 구조, "어떻게 실행되고, 값들이 이동하고, 저장되는 지" 와 같은 이론적인 내용들이 많았습니다. 이전에 알고 싶었던 내용들도 있었고, 처음 알게 되는 내용들도 있어서 값진 시간이었습니다. 단지 자바에 관한 것 만이 아닌 "객체지향 프로그래밍언어", 파이썬 과 같은 언어에도 해당되는 내용이어서 그들의 실행 원리에 대해 알게 되어 매우 좋았습니다.
다양한 예시문들과 함께 학습한 내용들을 이해하는데 도움이 되었고, 실습 예제문들을 통해 다시 한번 복습하는데 도움이 되었습니다.
자바 관련 다양한 패키지에 관한 내용들을 배울 수 있어 좋았습니다. 혼자 공부하기 힘든 부분이지만 같이 학습하기 때문에 도움이 되었습니다.
다양한 내용들이 많아서 정리하는데 전부 다 이해하는데 힘들었으나 여러 가지를 하여 흥미가 있었습니다.
MySQL
에 직접 데이터 테이블을 만들고 수정하고 출력하는 내용들을 SQL
환경이 아닌 자바, Eclipse
에서 실행할 수 있었고, Tomcat
서버를 다운 받아 이클립스에 설정한 후 각종 html, css
관련 파일들을 생성하고 로컬 서버, 브라우저에서 확인하는 활동들이 재밌었습니다.
이론적인 수업이었기 때문에 실습 예제가 별로 없어서 아쉬웠습니다.
수업 중 주어진 실습 예제를 풀 때, 코드가 거의 완성되었음에도 빨리 끝내고 싶다는 마음에 해당 상황을 못보고 그냥 지나친 것이 아쉬웠습니다. 앞으로 프로그래밍 할 때 차분히 코드를 보고 확인하며, 그때 그때 주석을 다는 습관을 들여야겠다는 생각이 들었습니다.
이번 주차에 배운 내용들이 너무나도 다양해서 솔직히 모든 것을 이해하기 힘들었습니다. 특히, 마지막 날 오전에 자바스크립트, 오후에 SpringIoC 에 대해 간략하게 학습하였는데, Spring의 경우 다음 시간부터 본격적으로 하기 때문에 그 전에 잠깐 맛보기 형식이었습니다. 그러나 오늘의 짧은 시간동안 모든 것을 받아 들이는 데에는 한계가 있었고, 헷갈리는 부분들이 많아서 전체적으로 학습이 아쉬웠습니다. 다음 시간부터는 조금 더 집중해서 수업을 들어야할 것 같습니다.
이외에도 데이터베이스, 웹, 자바 등 여러 가지의 내용들이 많이 포함되어 있는 부분들 또한 하루만에 학습을 다하기에는 벅차서 조금 아쉬웠고 앞으로 해야할 공부들이 많다고 느꼈습니다.
자바는 완벽한 객체지향프로그래밍언어.
객체는 속성과 기능으로 이루어짐.
// 클래스 객체의 생성과 사용 예시.
class Student{
String name;
String subject;
int age;
String getStudentInfo() {
return name + "학생은 나이가 "+age+"세이고 "+subject+" 과목을 학습합니다.";
}
}
public class ____ {
public static void main(String[] args) {
Student st = new Student();
// 객체를 다루기 위해 참조변수 선언과
// 생성된 객체의 주소를 참조변수에 저장하는 과정.
st.name = "Baby";
st.subject = "Java";
st.age = 20;
// 객체의 속성(변수)에 값 할당
System.out.println(st.getStudentInfo());
// 객체의 기능(메서드) 활용
}
}
기본 생성자(default constructor)
매개변수가 없는 생성자
클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
(생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)
- java xxx
1. 클래스로딩
1. 검증
1. main() 메서드를 호출
JVM(Java Virtual Machine) : 자바프로그램의 실행환경, 인터프리터
-> 운영체제의 역할을 대신한다.
일정 크기의 메모리 공간을 확보해 놓고 실행시킨다.
=> "확보된 메모리 공간을 목적에 따라서 여러 개로 나누어 사용."
callstack
: 메서드의 작업공간. 호출되는 메서드에 대한 정보, 지역변수
heap
: 객체가 만들어지는 공간, 멤버변수(non-static)
method area
: 클래스 정보와 변수가 저장되는 곳, 클래스 로딩
: 인스턴스변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.
인스턴스 변수 -> non-static
변수
클래스 변수 -> static
변수
import java.~~
패키지 관련..java.lang
: 가장 기본적인 기능의 클래스들이 모여 있는 패키지.java.io
: 입출력 관련 기능을 제공합니다. 파일을 읽고 쓰는데 필요한 클래스들이 포함.java.net
: 네트워크 프로그래밍과 관련된 클래스들을 제공. 네트워크 통신을 구현할 때 사용되는 클래스들이 포함.java.util
: 유용한 유틸리티 클래스들을 포함. 자료구조 (예: List, Set, Map) 및 유틸리티 클래스 (예: Collections, Arrays, Date, Calendar) 등이 이 패키지에 속함.(1) 사용하려는 클래스를 import 하고
import java.util.Date;
Date d = new Date();
(2) import를 생략하고 사용
java.util.Date d =new Date(); //-> 객체 생성 시 패키지명을 전부 적어서 선언.
클래스메서드(static메서드) :
객체생성없이클래스이름.메서드이름()
으로 호출
인스턴스변수나 인스턴스메서드와 관련없는 작업을 하는 메서드
메서드 내에서 인스턴스변수 사용불가 <br메서드 내에서 인스턴스변수를 사용하지 않는다면 static을 붙이는 것을 고려한다.
인스턴스메서드 :
인스턴스 생성 후,참조변수.메서드이름()
으로 호출
인스턴스변수나 인스턴스메서드와 관련된 작업을 하는 메서드
메서드 내에서 인스턴스변수 사용가능
static 블럭 :
클래스가 로딩될 때 수행되는 블럭
main()
메서드 보다 먼저 수행됨
static 멤버 변수의 복잡한 초기화를 해야할 때 사용
인스턴스(instance) 블럭 :
클래스의 객체가 생성될 때 수행되는 블럭
접근제어자 : public '+', protected '#', () 'default', private '-' / '?'-> 클래스 다이어그램 내 표시 기호
public
or ()
(생략) 둘 중 하나만 가능.public
, protected
, (생략)
, private
활용제어자(일반제어자) : static, final, abstract
static
: 멤버변수, 메서드, static 블럭final
: 클래스, 멤버변수, 지역변수, 메서드abstract
: 클래스, 메서드class A{
A(){
System.out.println("A 클래스 객체 생성");
}
}
class B extends A{
B(){
System.out.println("B 클래스 객체 생성");
}
}
class C extends B{
C(){
System.out.println("C 클래스 객체 생성");
}
}
// C > B > A > Object class
public class ABCTest {
public static void main(String[] args) {
new C();
// C class의 생성자 메서드를 불러옴.
// C가 처음 생성되면서 차례로 상속된 B(A를 상속), A class 가 호출된다.
// 상속이 많을수록 메모리 할당 부담이 커진다. <- 많은 부모 객체들도 생성되므로
// 처리되는 순서 또한 부모 클래스 부터 처리된다.
// (부모 클래스 로딩이 먼저되어야한다는 규칙이 있다.)
}
}
: "하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩, 간단히 오버로딩이라고 한다."
abstract
클래스, interface
public
, ()
, final
, abstract
class A // 상속, 객체 생성 등 자유로운 형태
final class B // 더 이상 확장X, 상속X, 객체 생성만 가능.
abstract class C // 미완성 클래스, 객체 생성X, 상속만 가능.
abstract
는 메서드에도 설정 가능한 제어자.abstract
메서드 : 미완성 메서드, 메서드의 헤더만 정해진 메서드abstract void buy(); // => abstract 메서드는 {} 블럭이 아닌 ;이 마지막에 반드시 붙어야한다.
/**
* 클래스에 abstract 메서드가 1개라도 정의된 경우,
* 클래스도 반드시 abstract로 설정해야한다.
**/
interface
: 특별한 자바 클래스 / 상수, 추상메서드, static 메서드, default 메서드
interface 인터페이스명 [extends 부모인터페이스,...]{
상수, 추상메서드, static 메서드, default 메서드
}
// 인터페이스 내 정의된 추상 메서드의 public 지정은 필수!!
class 클래스명 extends 부모클래스 implements 부모인터페이스1, ~2... {
// 인터페이스 다중 상속이 가능하다.
// 다형성이 베이스로 깔려있어 가능한 것.
}
예외 처리 Exception
관련 내용
- 실행 오류의 종류
에러 : JVM 영역에서 발생하는 오류, 심각한 오류, 대처 코드 작성 불가, 바로 실행 종료
(try-catch 구문을 통해 해결 불가.)
예외 : Java 프로그램 영역에서 발생하는 오류, 가벼운 오류, 대처 작성 -> 원하는 처리 가능
1. RuntimeException
: 예외처리 코드 구현이 선택 사항(안했을 때 JVM이 대신 처리)
1. not-RuntimeException
: 예외처리 코드 구현 필수 (안하면 ComplieError)
자바 Collection API
ArrayList, LinkedList
HashSet
HashMap
java.io
==>
단방향 : 출력용, 입력용으로 나눠져 있다.
단위 : 바이트, 문자
InputStream
, OutputStream
: 바이트 단위Reader
, Writer
: 문자 단위
InputStreamReader
,OutputStreamWriter
: 바이트 단위의 스트림 객체를 문자 단위의 스트림 객체로 변환
MySQL
JDBC
관련 내용Web application
window
, BOM
등 다양한 예제문과 함께 학습SpringIoC
학습
new
연산자 🚀new
연산자로 생성된 객체는 똑같은 값이라도 서로 다른 메모리를 할당하기 때문에 서로 다른 객체로 분리된다.String str = new String("string");
작동원리 예시우선 변수는 'Stack' 영역에 할당되고,
new String
으로 생성된 문자열값이 'Heap' 영역의 메모리 공간을 할당받아
str
이라는 변수가 그 메모리주소를 가르킬 것 입니다. 이를 다른 말로 참조 라고도 합니다.
만약String str2 = new String("string");
와 같은 똑같은 값을 가진 변수가 선언되어new
연산자를 통해 초기화 된다면
이는 똑같이 'Stack' 과 'Heap' 영역의 메모리 공간을 할당받아 저장될 것 이며, 앞서 선언한str
과는 전혀 다른 변수임이 나타날 것 입니다.
개발자로서 배울 점이 많은 글이었습니다. 감사합니다.