728x90
반응형

🧭 목차

  1. 객체지향 언어란?
  2. 클래스, 객체, 인스턴스의 차이
  3. 객체지향의 3대 특징
  4. 객체지향의 장단점
  5. 대표적인 객체지향 언어

1. 객체지향 언어란?

**객체지향 언어(Object-Oriented Language)**는
현실 세계의 **모든 객체(자동차, 사람, 문 등)**가
자신만의 속성과 기능을 가지고 상호작용한다는 개념을
프로그래밍에 적용한 언어입니다.

  • 객체 간의 관계와 역할에 중점을 둠
  • 각 객체는 고유한 속성과 기능을 가지고 있음
  • 이 객체들이 협력하며 동작하는 구조로 소프트웨어를 구성

2. 클래스(Class), 객체(Object), 인스턴스(Instance)

구분설명
객체 프로그램에서 구현하고자 하는 대상 (예: 자동차, 회원, 게시물 등)
클래스 객체의 속성과 기능을 정의한 설계도
인스턴스 클래스를 기반으로 실제 메모리에 생성된 객체 (현실 세계의 실체)
 
 
class Car {
    String color;
    void drive() {
        System.out.println("주행 중");
    }
}

Car myCar = new Car();  // ← 이게 바로 인스턴스!

3. 객체지향 언어의 3대 특징

🔒 캡슐화 (Encapsulation)

  • 객체의 내부 구조를 외부에 은닉
  • 필요한 정보만 외부에 public으로 노출
  • 자바에서는 private, protected, public 등 접근 제어자로 구현

➡ 예:

private int age;  
public void setAge(int a) { age = a; }

👪 상속 (Inheritance)

  • 자식 클래스가 부모 클래스의 속성과 기능을 물려받는 것
  • 코드의 재사용성 높이고, 유지보수 편리
class Animal { void eat() { } }
class Dog extends Animal { void bark() { } }
  • 부모 클래스 → 슈퍼 클래스(Super Class)
  • 자식 클래스 → 서브 클래스(Sub Class)

🔄 다형성 (Polymorphism)

  • 하나의 메소드나 객체가 다양한 방식으로 동작

▪ 오버라이딩 (Overriding)

  • 부모 메소드를 자식 클래스에서 재정의
  • 메소드명, 매개변수, 반환형 동일
@Override
public void run() {
    System.out.println("자식 클래스에서 실행");
}

▪ 오버로딩 (Overloading)

  • 같은 이름의 메소드지만 매개변수 다름
@Override
public void run() {
    System.out.println("자식 클래스에서 실행");
}

4. 객체지향 프로그래밍의 장점과 단점

✅ 장점

  • 재사용성: 상속으로 기존 코드 활용
  • 생산성 향상: 독립적인 객체 개발
  • 자연스러운 모델링: 현실 세계와 유사
  • 유지보수 우수: 캡슐화로 영향 최소화

❌ 단점

  • 설계 복잡: 개념 파악 및 초기 설계 시간 소요
  • 실행 속도 저하: 절차형 언어보다 느릴 수 있음
  • 코딩 난이도: 복잡한 구조로 인한 학습 장벽

5. 대표적인 객체지향 언어

언어특징
Java 가장 널리 쓰이는 객체지향 언어, 플랫폼 독립적
C++ C 언어의 확장, 다중 상속 지원
C# 닷넷(.NET) 기반 객체지향 언어
Python 인터프리터 기반, 동적 타이핑, 강력한 객체지향 지원
 

 

728x90
반응형
728x90
반응형

“ArrayList? Set? Hash 뭐시기? 그냥 배열에 때려 넣으면 안 돼요?”


1. Java Collections Framework(JCF)란?

JCF는 자바에서 데이터를 그룹으로 관리하기 위한 자료구조 라이브러리 집합입니다.
배열을 대체하고, 더 강력하게 데이터를 처리할 수 있게 해줍니다.


2. 컬렉션 상속 구조도

         ┌──────────┐
         │Collection│
         └────┬─────┘
      ┌────────┼────────┐
     List      Set     Queue
      │         │        │
┌─────┴─────┐  ┌┴┐     ┌─┴─┐
ArrayList  ... HashSet ...

※ Map은 Collection을 상속하진 않지만, 함께 묶어서 취급합니다.


3. 주요 인터페이스와 특징

✅ Set (중복 ❌, 순서 ❌)

구현체특징
HashSet 가장 빠른 접근 속도, 순서 없음
TreeSet 자동 정렬 가능 (오름차순/내림차순 설정 가능)
 

✅ List (중복 ⭕, 순서 ⭕)

구현체특징
ArrayList 인덱스 기반, 조회 성능 우수
LinkedList 삽입/삭제에 유리
Vector 동기화 지원. 구식이라 거의 안 씀
 

✅ Queue (선입선출 구조)

구현체특징
LinkedList 양방향 연결 구조
PriorityQueue 우선순위 기반 처리 가능
 

✅ Map (Key 중복 ❌, Value 중복 ⭕

구현체특징
HashMap 가장 자주 쓰이며, null 허용
TreeMap 자동 정렬
Hashtable 동기화 지원. null 금지, 구식
 

4. 언제 어떤 컬렉션을 써야 할까?

상황추천 컬렉션
중복 없이 저장 HashSet
인덱스 접근, 조회 위주 ArrayList
삽입/삭제 잦음 LinkedList
Key-Value 저장 HashMap
정렬된 데이터 필요 TreeSet, TreeMap
스레드 동기화 필요 Vector, Hashtable (하지만 잘 안 씀)
 

5. 한줄 요약

"Java 컬렉션은 목적에 맞게 잘 골라 써야 성능이 살아납니다!"

 

728x90
반응형
728x90
반응형

✅ OSI 7계층(OSI 7 Layer Model) 개요

OSI (Open Systems Interconnection) 7계층 모델은 국제표준화기구(ISO)가 제정한 통신 시스템 간 상호 호환성 확보를 위한 표준 아키텍처입니다.

  • 다양한 제조사의 시스템 간 네트워크 호환 가능
  • 계층 구조 기반으로 기능을 분리하여 분업화(Divide & Conquer) 가능
  • TCP/IP 4계층 모델의 한계를 보완하는 기술표준의 기반

🔹 OSI 7계층 요약표

계층이름 (영문)주요 역할대표 장비/프로토콜
7계층 응용 계층 (Application) 사용자 서비스 제공 HTTP, FTP, SMTP
6계층 표현 계층 (Presentation) 데이터 표현, 인코딩/암호화 XDR, JPEG
5계층 세션 계층 (Session) 세션 관리, 동기화 NetBIOS
4계층 전송 계층 (Transport) 종단 간 전송 제어 TCP, UDP
3계층 네트워크 계층 (Network) 라우팅, IP 주소 기반 전달 IP, ICMP, Router
2계층 데이터링크 계층 (Data Link) MAC 주소 통한 인접 노드간 통신 Ethernet, L2 Switch
1계층 물리 계층 (Physical) 실제 신호 전송, 전기/광 신호 처리 허브, 리피터, 케이블
 

🧠 각 계층별 특징 요약 (블로그 본문 연결 포인트)

  • 1계층: 전기/광 신호로 비트 전달, 장비: 허브, NIC
  • 2계층: MAC주소 기반 프레임 전송, 오류제어
  • 3계층: IP 주소 기반 라우팅 및 최적 경로 설정
  • 4계층: TCP/UDP로 신뢰성 있는 전송 보장
  • 5~7계층: 사용자 응용과 직결된 상위 계층 (세션/표현/응용)
728x90
반응형
728x90
반응형

인프런 강의를 듣던 중 회원 도메인 설계를 하다가 동시성 이슈 때문에 HashMap보다는 ConcurrentHashMap을 사용한다라고 배웠습니다. 과연 두 개의 차이점은 어떤 점 있는지, 각 각의 장단점을 깊게 파보고 싶어서 정리해보았습니다.

출처:  https://javaconceptoftheday.com/hashmap-vs-concurrenthashmap-in-java/


 해외 문서를 찾아보다가 잘 정리되어 있는 문서를 발견하고 정리해보았습니다.


HashMap과 ConcurrentHashMap의 차이점


1) Thread Safe

주요 차이점은 ConcurrentHashMap는 내부적 동기화 때문에 스레드가 Safe합니다. 

HashMap는 내부적으로 동기화되지 않고 스레드로부터 안전하지 않습니다. HashMap 메서드를 사용하여 외부에서 동기화 할 수 있습니다.

 

2) Internal Structure(내부구조)

ConcurrentHashMap의 모든 작업이 동기화되는 것은 아닙니다. 추가 및 삭제와 같은 수정 작업만 동기화됩니다. 읽기 작업은 동기화되지 않습니다. 이렇게 하면 ConcurrentHashMap이 외부에서 동기화된 HashMap보다 동시 다중 스레드 응용 프로그램에 대한 첫 번째 선택 맵이 됩니다.

 

3) Null Keys And Null Values

HashMap은 최대 하나의 null 키와 임의의 수의 null 값을 허용합니다.ConcurrentHashMap은 null 키와 null 값도 허용하지 않습니다.

 

4) Fail-Fast Vs Fail-Safe

HashMap에 의해 반환된 반복자는 본질적으로 빠른 속도입니다. 반복자 생성 후 맵이 수정되면ConcurrentModificationException이 발생하기 때문입니다. ConcurrentHashMap에 의해 반환된 반복자는 본질적으로 안전합니다. iterator 생성 후 맵이 수정되면 예외가 발생하지 않습니다.

 

5) Performance(성능)

ConcurrentHashMap에 대한 수정 작업만 동기화됩니다. 따라서 ConcurrentHashMap에 대한 추가 또는 제거 작업은 HashMap보다 느립니다. ConcurrentHashMap 및 HashMap 모두에 대한 읽기 작업은 두 맵의 읽기 작업이 동일한 성능을 제공합니다.

결론적으로 ConcurrentHashMap는 내부적으로 동기화 함으로, 동시 멀티 쓰레드 어플리케이션에 적합합니다. HashMap은 내부적으로 동기화 되지않습니다. 따라서 단일 쓰레드 프로그램에 적합합니다.

 

https://applepick.tistory.com/124

 

[동시성 이슈해결] HashMap보다는 ConcurrentHashMap을 쓰자!

인프런 강의를 듣던 중 회원 도메인 설계를 하다가 동시성 이슈 때문에 HashMap보다는 ConcurrentHashMap을 사용한다라고 배웠습니다. 과연 두 개의 차이점은 어떤 점 있는지, 각 각의 장단점을 깊게 파

applepick.tistory.com

 

728x90
반응형
728x90
반응형

단위 테스트를 편하게 설정하기 위해 설정하기

Live Template tdd 작성
JAVA에 사용하도록 설정

 

728x90
반응형
728x90
반응형

● 환경 변수를 설정하는 이유

PATH는 파일이 있는 그 폴더가 아닌 다른 폴더에서 해당 폴더에 접근하기 위해 지정해 준다.

자바에서 PATH를 잡는 이유는 javac의 컴파일 때문이다.

JVM에 의해선 자바는 다른 폴더에서도 실행 되지만, 컴파일 할 때 필요한 javac는 PATH를 잡지 않으면 실행이 안된다. 즉, javac를 어디서든 사용하고 bin 디렉토리 내 모든 자바 전용 툴을 사용하기 위해 환경변수를 설정 해야만 한다.

시스템 변수 : 하나의 OS에 여러명의 사용자 계정이 있더라도 공통으로 적용

사용자 변수 : 하나의 OS에 여러명의 사용자 계정이 있을 경우 특정 사용자만 적용됨

 

● JAVA_HOME

자바 프로그램에서 JAVA_HOM을 인식하기 때문에 설정한다

자바로만 프로그래밍한다면 PATH, CLASSPATH만 잡아줘도 잘 작동하지만, 나중에 자바 버전을 변경할 때 JAVA_HOME만 변경하면 PATH와 CLASSPATH는 변경하지 않아도 되기 때무ㅜㄴ에 JAVA_HOME을 잡아 두는것이 좋다.

ex) C:\jdk\java11;

 

● PATH

OS환경변수의 하나로 실행파일 경로를 지정

javac에 대한 PATH를 설정해보자

PATH를 설정하면 해당 폴더 외 다른 폴더에서도 경로를 찾아 javac를 실행 할 수 있게 해준다.

ex) %JAVA_HOME%\bin;

 

● CLASSPATH

자바에서 사용하는 PATH. 자바는 CLASS를 사용

PATH와 비슷한 개념이지만 자바의 CLASS 파일들을 위한 환경변수이다. 편리하게  packge를 import할 수 있다.

ex) %JAVA_HOME%\lib;

728x90
반응형
728x90
반응형

저장소 업데이트 및 업그레이드

sudo yum update && sudo yum upgrade -y

jdk11 설치

 

sudo amazon-linux-extras install java-openjdk11 -y
java -version

아마존 리눅스 Jenkins  설치

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install -y jenkins

sudo systemctl daemon-reload
sudo systemctl start jenkins

sudo systemctl enable jenkins

sudo systemctl status jenkins

sudo systemctl is-enabled jenkins

sudo vim /etc/sysconfig/jenkins

JENKINS_PORT="8080"   <------- 바꾸고 싶은 포트 변경

sudo vim /usr/lib/systemd/system/jenkins.service



Enviroment="JENKINS_PORT=8080" <------- 바꾸고 싶은 포트 변경

Jenkins 서비스 재기동

sudo systemctl daemon-reload
sudo service jenkins restart

Jenkins 서비스 상태 확인
sudo systemctl status jenkins

Jenkins 초기 비밀번호 확인
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

728x90
반응형

'ETC > AWS' 카테고리의 다른 글

AWS Ubuntu Jenkins 완전 삭제  (0) 2022.08.14
우분투 Jenkins 설치  (0) 2022.08.13
우분투 ubuntu Ruby 완전 삭제  (0) 2022.08.03
travis ./gradlew: Permission denied  (0) 2022.07.29
Amazon linux mysql8 설치  (0) 2022.07.28
728x90
반응형

블로그 저자의 환경

- AWS EC2

- Ubuntu 20.04.3 LTS 

 

실행중인 jenkins 중지하기

sudo service jenkins stop

 

apt 명령어로 삭제하기

sudo apt remove jenkins -y
sudo apt-get remove --purge jenkins -y
sudo apt-get remove --auto-remove jenkins -y

 

잔여 파일이 있는지 확인해보기

sudo find / -name 'jenkins*'
sudo rm -rf /etc/apt/sources.list.d/jenkins.list
sudo rm -rf /var/cache/apt/archives/jenkins_2.346.3_all.deb

728x90
반응형

'ETC > AWS' 카테고리의 다른 글

Amazon linux EC2 jenkins와 JDK 11 설치  (0) 2022.08.18
우분투 Jenkins 설치  (0) 2022.08.13
우분투 ubuntu Ruby 완전 삭제  (0) 2022.08.03
travis ./gradlew: Permission denied  (0) 2022.07.29
Amazon linux mysql8 설치  (0) 2022.07.28

+ Recent posts