language study 13

[Java] 객체지향 기초 : 캡슐화, final, static 블록

자바와 객체 지향 개념에 대해 공부할 때 항상 헷갈리는 핵심 개념들이 있습니다.이번 게시글에서는 코드의 안전성을 높이는 접근 제한자와 캡슐화, 프로그램의 구조를 잡는 package와 import, 그리고 데이터의 변경을 막고 초기화를 돕는 final과 static 블록에 대해 정리했습니다.목차1. 접근제한자와 캡슐화2. package와 import3. final과 static 블록1. 접근 제한자 (Access Modifier)와 캡슐화 (Encapsulation)접근 제한자는 클래스, 변수, 메서드의 사용 범위를 제한하는 역할을 합니다.1.1 접근 허용 범위 크기public > protected > default > private public: 다른 패키지를 포함해 어디서나 접근 가능합니다.prote..

[Java] 객체지향 기초 : 상속(Is-A), 포함(Has-A), super, 오버라이딩과 다형성

오늘 자바 강의에서 객체지향 프로그래밍의 특징인 상속과 다형성에 대해 간단하게 배웠습니다. 모든 예제 코드는 '책(Book)'을 주제로 작성되었으며, 저처럼 객체지향 개념이 헷갈리는 분들께도 도움이 될 수 있도록 작성해보았습니다!목차1. 상속과 Is-A 관계2. Has-A 관계 (포함 관계)3. super 생성자4. super 키워드5. 메서드 오버라이딩6. 다형성1. 상속과 Is-A 관계자바에서 상속은 기존 클래스의 변수와 메서드를 다른 클래스가 물려받는 것을 말하며,extends 키워드를 사용합니다. class B extends A { ... }A 클래스 : 부모 클래스 (Super Class)B 클래스 : 자식 클래스 (Sub Class) 위와 같이 상속 관계면, 부모와 자식 관계가 형성이 되며 특..

[Java] 알고리즘 기초 : 배열과 리스트, 언제 무엇을 쓸까?

배열은 크기가 고정되고 접근이 빠르며, 리스트는 크기 변경과 삽입/삭제가 용이하다.코딩 테스트에서 배열과 리스트 중 무엇을 선택해야 할까? 코딩 테스트에서 배열과 리스트는 가장 흔하게 사용되는 자료 구조이며, 문제 유형에 따라 적절히 선택하는 것이 중요하다. 1. 배열(Array): 정해진 크기와 빠른 접근 배열은 메모리의 연속적인 공간에 데이터가 일렬로 배치되는 자료구조입니다. 한 번 생성하면 그 크기를 변경할 수 없는 '정적(Static)'인 특징을 가진다.// 배열 선언 방식의 예int[] arr = new int[5]; // 크기가 5인 배열 선언 주요 특징빠른 접근 : 인덱스(Index)를 통해 데이터의 위치에 즉시 접근할 수 있습니다. (O(1))예를 들어, arr 배열에서 값 4에 접근하..

[Java] 메서드 파라미터 전달 방식 : Call by Value - 값과 주소값 전달 차이

자바에서 메서드에 변수를 전달할 때, 원본 값이 변하는 경우와 변하지 않는 경우가 있습니다.헷갈리기 쉬운 이 두가지 현상을 기본형과 참조형 변수의 차이로 정리해 보았습니다.1. 자바는 오직 'Call by Value'자바에는 C++과 같은 진정한 의미의 'Call by Reference(참조에 의한 호출)'가 없습니다.항상 값을 복사해서 전달(Call by Value)하지만, 변수 타입에 따라 복사되는 대상이 다릅니다. 기본형 (Primitive Type): 실제 데이터 값을 복사하여 전달. (원본에 영향 없음)참조형 (Reference Type): 클래스, 배열 등은 객체가 위치한 메모리의 주소값(Address)을 복사하여 전달합니다. (주소를 통해 원본 객체 수정 가능) 즉, 어떤 타입의 파라미터로 ..

[Java] 기본 문법 정리 : final, 오버로딩, 생성자, 가변인자 정리

자바 기초 문법 중 실무와 협업 환경에서 코드의 안정성과 재사용성을 높이는 데 필수적인5가지 핵심 개념(상수, 오버로딩, 생성자, this 생성자, 가변인자)을 정리했습니다.1. 상수 (final)final 키워드는 변수를 선언할 때 할당된 값을 더 이상 변경할 수 없도록 고정합니다.왜 사용하는가? 협업 시 절대 변경되어서는 안 되는 설정값이나 기준값을 정의할 때 사용합니다.누군가 값을 수정하려고 시도하면 컴파일 단계에서 에러가 발생하므로, 런타임 이전에 코드의 훼손을 방지할 수 있습니다.예시 코드도서 관리 시스템에서 도서의 '최대 대여 가능 일수'는 모든 책에 동일하게 적용되며, 로직 내에서 임의로 변경되어서는 안 됩니다.public class Book { // 1. final을 활용한 상수 선언..

[Java] 객체지향 기초: this와 static (클래스 변수와 클래스 메서드)

지난 글에서는 클래스와 객체의 생성에 대해 알아봤습니다. [Java] 객체지향 기초 - 클래스와 메서드객체지향 프로그래밍(OOP)은 현대 소프트웨어 개발의 표준입니다.오늘은 자바에서 객체지향을 구성하는 2가지 핵심 요소를 한 페이지에 정리해 보려 합니다.1. 클래스2. 메서드1.클래스(Class)객체(jignonne.tistory.com 이어서 객체 내부에서 자기 자신을 가리키는 this의 역할과, 모든 객체가 공유하는 static(클래스 변수/메서드)의 차이점을 학습하여 정리해 보았습니다.1. 메서드와 thisthis 키워드가 필요한 이유메서드를 작성하다 보면 매개변수(파라미터)와 인스턴스 변수의 이름이 동일한 경우가 발생할 수 있습니다.이 경우 자바는 기본적으로 가장 가까운 범위의 변수(지역 변수, ..

[Java] 객체지향 기초 : 클래스와 메서드

객체지향 프로그래밍(OOP)은 현대 소프트웨어 개발의 표준입니다.오늘은 자바에서 객체지향을 구성하는 2가지 핵심 요소를 한 페이지에 정리해 보려 합니다.1. 클래스2. 메서드1.클래스(Class)객체(Object)를 활용하는 이유 : 코드의 '유지 보수성'프로그래밍에서 가장 중요한 문제 중 하나는 데이터의 일관성과 유지보수입니다.만약 객체를 사용하지 않고 “책(Book)” 정보를 관리한다면 어떻게 될까요? 예를 들어 다음과 같이 데이터를 분리해서 관리해야 합니다.// 책을 10권 저장한다고 가정String[] titleList = new String[10];// 책 제목 저장 리스트String[] authorList = new String[10]; // 작가 이름 저장 리스트int[] priceList ..

[Java] 기본 문법 학습 정리

0. 들어가며그동안 프론트엔드와 데이터 분석을 중심으로 Python을 주로 활용해왔지만, 최근 전산 직무 면접 과정에서 Java 기반 경험의 필요성을 체감하게 되었습니다. 스스로 써보지 않으면 내 것이 되지 않으니 면접 결과가 나오자마자 입문 강의와 관련 IDE를 설치하며, 백엔드 학습을 위한 5월 한달 로드맵도 작성해봤습니다. 해당 글은 이러한 학습 과정의 일환으로, Java의 기본 구조와 동작 방식을 정리한 내용입니다.정보처리기사와 SQLD 취득 과정에서 쌓은 기초 지식을 바탕으로, 개념을 코드로 연결하는 데 집중했습니다.1. 기본 세팅Java 버전Java 21 (LTS) : 최신 장기 지원 버전, 신규 프로젝트에서 사용하려는 추세Java 17 (LTS) : 실무, 교육에서 많이 사용되는 안정..

[백준] 수학 | 최대공약수(GCD) 문제 풀이 전략과 관련 문제

해당 알고리즘 풀이 게시글은 python을 기준으로 작성되었습니다. 1. 최대 공약수(GCD) 개념 정리이미지 출처 - TCP 코딩 스쿨 최대 공약수(GCD, Greatest Common Divisor)란두 개 이상의 정수에서 공통으로 나눌 수 있는 가장 큰 수를 의미한다. 파이썬에서는 표준 라이브러리인 math 모듈에서gcd 함수를 기본 제공하므로 직접 구현하지 않고도 간단하게 사용할 수 있다.import math math.gcd(12, 18) # 6math.gcd(24, 16) # 8 알고리즘 문제에서 GCD는 단순한 수학 계산 문제 보다수의 규칙성, 차이, 공통된 간격 등을 찾아내는 핵심 도구로 활용된다. 2. 유클리드 호제법math.gcd 내부 구현은 유클리드 호제법을 기반으로 하며,최대 공약..

[백준] 1929 소수 구하기

문제 정보1. 문제 링크 : 소수 구하기2. 문제 난이도 : 실버 33. 유형 : 수학 1. 첫번째 해결 코드 메모리 : 32421 kb시간 복잡도 : 3000 msimport sysinput = sys.stdin.readline# m 이상 n 이하의 소수 찾기.def find_prime_nums(num) : if num == 1 : return False if num == 2 : return True for r in range(2, int(num**0.5) + 1): if not (num % r) : return False return Truem, n = map(int, input().split())for num in range(m, n+1) :..